summaryrefslogtreecommitdiff
path: root/pfinet.old/linux-src/arch/s390
diff options
context:
space:
mode:
authorroot <root@(null).(none)>2009-05-03 17:20:00 +0200
committerroot <root@(null).(none)>2009-05-03 17:20:00 +0200
commite0faf22f31c48fb27b43c1825897d26e58feafc4 (patch)
tree65a09372b31e08a3a865bd0a88cd2718bafcd643 /pfinet.old/linux-src/arch/s390
This is my initial working version.
There is a bug in boot in this version: subhurd sometimes cannot boot.
Diffstat (limited to 'pfinet.old/linux-src/arch/s390')
-rw-r--r--pfinet.old/linux-src/arch/s390/CVS/Entries1
-rw-r--r--pfinet.old/linux-src/arch/s390/CVS/Repository1
-rw-r--r--pfinet.old/linux-src/arch/s390/CVS/Root1
-rw-r--r--pfinet.old/linux-src/arch/s390/lib/CVS/Entries2
-rw-r--r--pfinet.old/linux-src/arch/s390/lib/CVS/Repository1
-rw-r--r--pfinet.old/linux-src/arch/s390/lib/CVS/Root1
-rw-r--r--pfinet.old/linux-src/arch/s390/lib/checksum.c56
7 files changed, 63 insertions, 0 deletions
diff --git a/pfinet.old/linux-src/arch/s390/CVS/Entries b/pfinet.old/linux-src/arch/s390/CVS/Entries
new file mode 100644
index 00000000..7b214dc9
--- /dev/null
+++ b/pfinet.old/linux-src/arch/s390/CVS/Entries
@@ -0,0 +1 @@
+D/lib////
diff --git a/pfinet.old/linux-src/arch/s390/CVS/Repository b/pfinet.old/linux-src/arch/s390/CVS/Repository
new file mode 100644
index 00000000..55a1f21a
--- /dev/null
+++ b/pfinet.old/linux-src/arch/s390/CVS/Repository
@@ -0,0 +1 @@
+hurd/pfinet/linux-src/arch/s390
diff --git a/pfinet.old/linux-src/arch/s390/CVS/Root b/pfinet.old/linux-src/arch/s390/CVS/Root
new file mode 100644
index 00000000..55403097
--- /dev/null
+++ b/pfinet.old/linux-src/arch/s390/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd
diff --git a/pfinet.old/linux-src/arch/s390/lib/CVS/Entries b/pfinet.old/linux-src/arch/s390/lib/CVS/Entries
new file mode 100644
index 00000000..c82e1d67
--- /dev/null
+++ b/pfinet.old/linux-src/arch/s390/lib/CVS/Entries
@@ -0,0 +1,2 @@
+/checksum.c/1.1.1.1/Sat Feb 5 12:21:17 2000/-ko/
+D
diff --git a/pfinet.old/linux-src/arch/s390/lib/CVS/Repository b/pfinet.old/linux-src/arch/s390/lib/CVS/Repository
new file mode 100644
index 00000000..182a0dbc
--- /dev/null
+++ b/pfinet.old/linux-src/arch/s390/lib/CVS/Repository
@@ -0,0 +1 @@
+hurd/pfinet/linux-src/arch/s390/lib
diff --git a/pfinet.old/linux-src/arch/s390/lib/CVS/Root b/pfinet.old/linux-src/arch/s390/lib/CVS/Root
new file mode 100644
index 00000000..55403097
--- /dev/null
+++ b/pfinet.old/linux-src/arch/s390/lib/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd
diff --git a/pfinet.old/linux-src/arch/s390/lib/checksum.c b/pfinet.old/linux-src/arch/s390/lib/checksum.c
new file mode 100644
index 00000000..9411e1c5
--- /dev/null
+++ b/pfinet.old/linux-src/arch/s390/lib/checksum.c
@@ -0,0 +1,56 @@
+/*
+ * arch/s390/lib/checksum.c
+ * S390 fast network checksum routines
+ *
+ * S390 version
+ * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
+ * Author(s): Ulrich Hild (first version),
+ * Martin Schwidefsky (schwidefsky@de.ibm.com),
+ * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
+ *
+ * This file contains network checksum routines
+ */
+
+#include <linux/string.h>
+#include <linux/types.h>
+#include <asm/uaccess.h>
+#include <asm/byteorder.h>
+#include <asm/checksum.h>
+
+/*
+ * computes a partial checksum, e.g. for TCP/UDP fragments
+ */
+unsigned int
+csum_partial (const unsigned char *buff, int len, unsigned int sum)
+{
+ /*
+ * Experiments with ethernet and slip connections show that buff
+ * is aligned on either a 2-byte or 4-byte boundary.
+ */
+ __asm__ __volatile__ (
+ " lr 2,%1\n" /* address in gpr 2 */
+ " lr 3,%2\n" /* length in gpr 3 */
+ "0: cksm %0,2\n" /* do checksum on longs */
+ " jo 0b\n"
+ : "+&d" (sum)
+ : "d" (buff), "d" (len)
+ : "cc", "2", "3" );
+ return sum;
+}
+
+/*
+ * Fold a partial checksum without adding pseudo headers
+ */
+unsigned short csum_fold(unsigned int sum)
+{
+ __asm__ __volatile__ (
+ " sr 3,3\n" /* %0 = H*65536 + L */
+ " lr 2,%0\n" /* %0 = H L, R2/R3 = H L / 0 0 */
+ " srdl 2,16\n" /* %0 = H L, R2/R3 = 0 H / L 0 */
+ " alr 2,3\n" /* %0 = H L, R2/R3 = L H / L 0 */
+ " alr %0,2\n" /* %0 = H+L+C L+H */
+ " srl %0,16\n" /* %0 = H+L+C */
+ : "+d" (sum) : : "cc", "2", "3");
+ return ((unsigned short) ~sum);
+}
+