patch-1.3.72 linux/drivers/char/ftape/ftape-rw.h

Next file: linux/drivers/char/ftape/ftape-write.c
Previous file: linux/drivers/char/ftape/ftape-rw.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v1.3.71/linux/drivers/char/ftape/ftape-rw.h linux/drivers/char/ftape/ftape-rw.h
@@ -0,0 +1,173 @@
+#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/bas/distr/ftape-2.03b/RCS/ftape-rw.h,v $
+ $Author: bas $
+ *
+ $Revision: 1.33 $
+ $Date: 1995/04/22 07:30:15 $
+ $State: Beta $
+ *
+ *      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 (contigious) 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 */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov with Sam's (original) version
of this