OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rc203soc/] [sw/] [uClinux/] [drivers/] [char/] [ftape/] [ecc.h] - Rev 1777

Go to most recent revision | Compare with Previous | Blame | View Log

/*
 *      Copyright (C) 1993 Ning and David Mosberger.
 *      Original:
 *      Copyright (C) 1993 Bas Laarhoven.
 *      Copyright (C) 1992 David L. Brown, Jr.
 *
 * 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, 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; see the file COPYING.  If not, write to
 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
 * USA.
 *
 *
 * $Source: /home/marcus/revision_ctrl_test/oc_cvs/cvs/or1k/rc203soc/sw/uClinux/drivers/char/ftape/ecc.h,v $
 * $Author: jcastillo $
 *
 * $Revision: 1.1 $
 * $Date: 2005-12-20 10:16:52 $
 * $State: Exp $
 *
 *      This file contains the definitions for the
 *      Reed-Solomon error correction code 
 *      for the QIC-40/80 tape streamer device driver.
 */
#ifndef _ecc_h_
#define _ecc_h_
 
typedef unsigned long BAD_SECTOR;
#define BAD_CLEAR(entry) ((entry)=0)
#define BAD_SET(entry,sector) ((entry)|=(1<<(sector)))
#define BAD_CHECK(entry,sector) ((entry)&(1<<(sector)))
 
/*
 * Return values for ecc_correct_data:
 */
enum {
	ECC_OK,			/* Data was correct. */
	ECC_CORRECTED,		/* Correctable error in data. */
	ECC_FAILED,		/* Could not correct data. */
};
 
/*
 * Representation of an in memory segment.  MARKED_BAD lists the
 * sectors that were marked bad during formatting.  If the N-th sector
 * in a segment is marked bad, bit 1<<N will be set in MARKED_BAD.
 * The sectors should be read in from the disk and packed, as if the
 * bad sectors were not there, and the segment just contained fewer
 * sectors.  READ_SECTORS is a bitmap of errors encountered while
 * reading the data.  These offsets are relative to the packed data.
 * BLOCKS is a count of the sectors not marked bad.  This is just to
 * prevent having to count the zero bits in MARKED_BAD each time this
 * is needed.  DATA is the actual sector packed data from (or to) the
 * tape.
 */
struct memory_segment {
	BAD_SECTOR marked_bad;
	BAD_SECTOR read_bad;
	int blocks;
	unsigned char *data;
	BAD_SECTOR corrected;
};
 
/*
 * ecc.c defined global variables:
 */
#ifdef TEST
extern int ftape_ecc_tracing;
#endif
 
/*
 * ecc.c defined global functions:
 */
extern int ecc_correct_data(struct memory_segment *data);
extern int ecc_set_segment_parity(struct memory_segment *data);
 
#endif	/* _ecc_h_ */
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.