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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rc203soc/] [sw/] [uClinux/] [drivers/] [char/] [ftape/] [ftape-rw.h] - Rev 1626

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

#ifndef _FTAPE_RW_H
#define _FTAPE_RW_H
 
/*
 * Copyright (C) 1993-1995 Bas Laarhoven.
 
 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/ftape-rw.h,v $
 $Author: jcastillo $
 *
 $Revision: 1.1 $
 $Date: 2005-12-20 10:16:52 $
 $State: Exp $
 *
 *      This file contains the definitions for the read and write
 *      functions for the QIC-117 floppy-tape driver for Linux.
 *
 */
 
#include "fdc-io.h"
#include "kernel-interface.h"
 
#define GET2( address, offset) *(short*)(address + offset)
#define GET4( address, offset) *(long*)(address + offset)
#define PUT2( address, offset, value) *(short*)(address + offset) = value
#define PUT4( address, offset, value) *(long*)(address + offset) = value
 
enum runner_status_enum {
	idle = 0,
	running,
	do_abort,
	aborting,
	logical_eot,
	end_of_tape,
	buffer_overrun,
	buffer_underrun,
};
 
typedef struct {
	byte *address;
	volatile buffer_state_enum status;
	volatile byte *ptr;
	volatile unsigned bytes;
	volatile unsigned segment_id;
 
	/* bitmap for remainder of segment not yet handled.
	 * one bit set for each bad sector that must be skipped.
	 */
	volatile unsigned long bad_sector_map;
 
	/* bitmap with bad data blocks in data buffer.
	 * the errors in this map may be retried.
	 */
	volatile unsigned long soft_error_map;
 
	/* bitmap with bad data blocks in data buffer
	 * the errors in this map may not be retried.
	 */
	volatile unsigned long hard_error_map;
 
	/* retry counter for soft errors.
	 */
	volatile int retry;
 
	/* sectors to skip on retry ???
	 */
	volatile unsigned int skip;
 
	/* nr of data blocks in data buffer
	 */
	volatile unsigned data_offset;
 
	/* offset in segment for first sector to be handled.
	 */
	volatile unsigned sector_offset;
 
	/* size of cluster of good sectors to be handled.
	 */
	volatile unsigned sector_count;
 
	/* size of remaining part of segment to be handled.
	 */
	volatile unsigned remaining;
 
	/* points to next segment (contiguous) to be handled,
	 * or is zero if no read-ahead is allowed.
	 */
	volatile unsigned next_segment;
 
	/* flag being set if deleted data was read.
	 */
	volatile int deleted;
 
	volatile byte head;
	volatile byte cyl;
	volatile byte sect;
} buffer_struct;
 
typedef struct {
	int active;
	int error;
	int offset;
} ftape_fast_start_struct;
 
typedef struct {
	int id;
	int size;
	int free;
} ftape_last_segment_struct;
 
typedef struct {
	int track;		/* tape head position */
	volatile int known;	/* validates bot, segment, sector */
	volatile int bot;	/* logical begin of track */
	volatile int eot;	/* logical end of track */
	volatile int segment;	/* current segment */
	volatile int sector;	/* sector offset within current segment */
} location_record;
 
typedef enum {
	fmt_normal = 2, fmt_1100ft = 3, fmt_wide = 4, fmt_425ft = 5
} format_type;
 
/*      ftape-rw.c defined global vars.
 */
extern int tracing;
extern byte trace_id;
extern buffer_struct buffer[];
extern location_record location;
extern volatile ftape_fast_start_struct ftape_fast_start;
extern byte deblock_buffer[(SECTORS_PER_SEGMENT - 3) * SECTOR_SIZE];
extern byte scratch_buffer[(SECTORS_PER_SEGMENT - 3) * SECTOR_SIZE];
extern ftape_last_segment_struct ftape_last_segment;
extern int header_segment_1;
extern int header_segment_2;
extern int used_header_segment;
extern unsigned int fast_seek_segment_time;
extern volatile int tape_running;
extern format_type format_code;
 
/*      ftape-rw.c defined global functions.
 */
extern int count_ones(unsigned long mask);
extern int valid_segment_no(unsigned segment);
extern int setup_new_segment(buffer_struct * buff, unsigned int segment_id,
			     int offset);
extern int calc_next_cluster(buffer_struct * buff);
extern buffer_struct *next_buffer(volatile int *x);
extern int ftape_read_id(void);
extern void ftape_tape_parameters(byte drive_configuration);
extern int wait_segment(buffer_state_enum state);
extern int ftape_dumb_stop(void);
extern int ftape_start_tape(int segment_id, int offset);
 
/*      fdc-io.c defined global functions.
 */
extern int setup_fdc_and_dma(buffer_struct * buff, byte operation);
 
#endif				/* _FTAPE_RW_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.