util: host program to generate ecc test patterns
authorBill Mills <wmills@ti.com>
Thu, 26 May 2011 02:02:12 +0000 (22:02 -0400)
committerSandeep Paulraj <s-paulraj@ti.com>
Thu, 30 Jun 2011 16:04:38 +0000 (12:04 -0400)
Signed-off-by: Bill Mills <wmills@ti.com>
Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
src/util/ecc-test/.gitignore [new file with mode: 0644]
src/util/ecc-test/Makefile [new file with mode: 0644]
src/util/ecc-test/ecc-pattern.c [new file with mode: 0644]
src/util/ecc-test/ecc-test.c [new file with mode: 0644]
src/util/ecc-test/types.h [new file with mode: 0644]

diff --git a/src/util/ecc-test/.gitignore b/src/util/ecc-test/.gitignore
new file mode 100644 (file)
index 0000000..14f5d47
--- /dev/null
@@ -0,0 +1,4 @@
+ecc-test
+ecc-pattern
+ecc-pattern.bin
+random-pattern.bin
diff --git a/src/util/ecc-test/Makefile b/src/util/ecc-test/Makefile
new file mode 100644 (file)
index 0000000..06fa8df
--- /dev/null
@@ -0,0 +1,58 @@
+#*
+#*
+#* Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ 
+#* 
+#* 
+#*  Redistribution and use in source and binary forms, with or without 
+#*  modification, are permitted provided that the following conditions 
+#*  are met:
+#*
+#*    Redistributions of source code must retain the above copyright 
+#*    notice, this list of conditions and the following disclaimer.
+#*
+#*    Redistributions in binary form must reproduce the above copyright
+#*    notice, this list of conditions and the following disclaimer in the 
+#*    documentation and/or other materials provided with the   
+#*    distribution.
+#*
+#*    Neither the name of Texas Instruments Incorporated nor the names of
+#*    its contributors may be used to endorse or promote products derived
+#*    from this software without specific prior written permission.
+#*
+#*  THIS SOFTWARE IS PROVIDED BY THE 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.
+#*
+
+all: gen_cdefdep ecc-test ecc-pattern
+
+ecc-pattern: cdefdep ecc-pattern.c ../../ecc/3byte/3byte_ecc.c 
+       gcc -o ecc-pattern -g ecc-pattern.c ../../ecc/3byte/3byte_ecc.c -I. -I../.. -I../../ecc
+
+ecc-test: cdefdep ecc-test.c ../../ecc/3byte/3byte_ecc.c 
+       gcc -o ecc-test -g ecc-test.c ../../ecc/3byte/3byte_ecc.c -I. -I../.. -I../../ecc
+
+clean:
+       rm -f ecc-test
+
+gen_cdefdep:
+       @echo Checking command line dependencies
+       @echo $(TARGET) > cdefdep.tmp
+       @sh -c 'if diff -q cdefdep.tmp cdefdep ; then echo same ; else cp cdefdep.tmp cdefdep ; fi '
+       
+
+random-pattern.bin:
+       dd if=/dev/urandom of=random-pattern.bin bs=1024 count=100K
+
+
+
+
+
diff --git a/src/util/ecc-test/ecc-pattern.c b/src/util/ecc-test/ecc-pattern.c
new file mode 100644 (file)
index 0000000..f7398fb
--- /dev/null
@@ -0,0 +1,57 @@
+/* ecc-pattern.c: generate ECC test patterns */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "types.h"
+#include "ecc/ecc.h"
+
+uint8_t block[4096];
+uint8_t ecc_value[64];
+int block_size;
+int ecc_size;
+
+int main(int argc, const char* argv[])
+{
+    FILE* fp;
+    int i;
+    int index;
+    
+    block_size = eccBytesPerBlock();
+    ecc_size   = eccNumBytes();
+    printf("ECC block size = %d  ECC value size = %d\n", block_size, ecc_size);
+    if (block_size > sizeof(block) || ecc_size > sizeof(ecc_value) )
+    {
+       fprintf(stderr, "Error max block size = %d and max ecc value size =%d\n", sizeof(block), sizeof(ecc_value));
+       exit(2);
+    }
+    
+    fp = fopen("ecc-pattern.bin", "wb");
+    if (fp == NULL)
+    {
+       fprintf(stderr, "can't open pattern output file");
+       exit(2);
+    }
+    
+    /* start with all zeros */
+    memset(block, 0, block_size);
+    fwrite(block, 1, block_size, fp);
+    
+    /* each bit number in the first byte */
+    for (i=0; i < 8; i++)
+    {
+       block[0] = 1 << i;
+       fwrite(block, 1, block_size, fp);
+    }
+
+    /* first bit of each byte on a power of 2 */
+    block[0] = 0;
+    for (index = 1; index < block_size; index = index << 1)
+    {
+       block[index] = 1;
+       fwrite(block, 1, block_size, fp);
+       block[index] = 0;
+    }
+}
diff --git a/src/util/ecc-test/ecc-test.c b/src/util/ecc-test/ecc-test.c
new file mode 100644 (file)
index 0000000..f006e2c
--- /dev/null
@@ -0,0 +1,81 @@
+/* ecc-test.c: generate ECC values for input data */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "types.h"
+#include "ecc/ecc.h"
+
+uint8_t block[4096];
+uint8_t ecc_value[64];
+int block_size;
+int ecc_size;
+
+void print_ecc(void);
+
+int main(int argc, const char* argv[])
+{
+    FILE* fp;
+    int i;
+    int index;
+    int read_size;
+    
+    block_size = eccBytesPerBlock();
+    ecc_size   = eccNumBytes();
+    printf("ECC block size = %d  ECC value size = %d\n", block_size, ecc_size);
+    if (block_size > sizeof(block) || ecc_size > sizeof(ecc_value) )
+    {
+       fprintf(stderr, "Error max block size = %d and max ecc value size =%d\n", sizeof(block), sizeof(ecc_value));
+       exit(2);
+    }
+    
+    if (argc != 2)
+    {
+       fprintf(stderr, "Error, need input data filename as only argument\n");
+       exit(2);
+    }
+    
+    fp = fopen(argv[1], "rb");
+    if (fp == NULL)
+    {
+       fprintf(stderr, "can't open pattern input file %s", argv[1]);
+       exit(2);
+    }
+    
+    /* each bit number in the first byte */
+    for ( i=0; TRUE; i++)
+    {
+       block[0] = 1 << i;
+       read_size = fread(block, 1, block_size, fp);
+       if (feof(fp) && read_size == 0)
+       {
+           break;
+       }
+       if (ferror(fp)) 
+       { 
+           fprintf(stderr, "error reading from input file\n"); 
+           exit(2);
+       }
+       if (read_size != block_size)
+       {
+           fprintf(stderr, "ignoring extra %d bytes at end of input\n", read_size);
+           break;
+       }
+       eccComputeECC(block, ecc_value);
+       printf("block %6d: ", i);
+       print_ecc();
+    }
+}
+
+void print_ecc(void)
+{
+    int i;
+    
+    for (i=0; i < ecc_size; i++)
+    {
+       printf("0x%2.2X ", ecc_value[i]);
+    }
+    printf("\n");
+}
\ No newline at end of file
diff --git a/src/util/ecc-test/types.h b/src/util/ecc-test/types.h
new file mode 100644 (file)
index 0000000..eb78227
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ *
+ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ 
+ * 
+ * 
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met:
+ *
+ *    Redistributions of source code must retain the above copyright 
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ *    Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the 
+ *    documentation and/or other materials provided with the   
+ *    distribution.
+ *
+ *    Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE 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.
+ *
+*/
+
+
+
+#ifndef _TYPES_H
+#define _TYPES_H
+/*******************************************************************************
+ * FILE PURPOSE:  DSP specific C type definitions.
+ *******************************************************************************
+ * FILE NAME: swpform.h  
+ *
+ * DESCRIPTION: Defines general use types for DSP.  
+ *
+ *  @file   types.h
+ *
+ *  @brief
+ *      This file provides architecture specific typedefs
+ *
+ ******************************************************************************/
+
+
+#include <stdlib.h>  /* Defines NULL */
+
+/* a signed 16-bit integer */
+typedef short int16;
+typedef unsigned short uint16;
+
+typedef int int32;
+typedef unsigned int uint32;
+
+typedef char char8;
+typedef unsigned char uchar8;
+
+typedef char int8;
+typedef unsigned char uint8;
+
+
+typedef unsigned char word;
+
+typedef short BOOL;
+typedef short bool;
+typedef short Bool;
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef TRUE
+#define TRUE  1
+#endif
+
+
+/* tistdtypes.h types used from the emac driver */
+typedef unsigned char Uint8;
+typedef char Int8;
+typedef int Int32;
+typedef unsigned short Uint16;
+typedef unsigned int Uint32;
+
+/* TI boot types */
+typedef unsigned char  UINT8;
+typedef unsigned short UINT16;
+typedef short          SINT16;
+typedef unsigned int   UINT32;
+typedef int            SINT32;
+
+
+/* Types from evm driver */
+typedef volatile unsigned int  VUint32;
+typedef volatile unsigned char VUint8;
+
+/* Types from the ethernet driver */
+typedef unsigned int  IPN;
+
+#endif /* types.h */