1 #ifndef _FTAPE_CTL_H 2 #define _FTAPE_CTL_H 3 4 /* 5 * Copyright (C) 1993-1996 Bas Laarhoven, 6 * (C) 1996-1997 Claus-Justus Heine. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2, or (at your option) 11 any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; see the file COPYING. If not, write to 20 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 21 22 * 23 * $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/ftape-ctl.h,v $ 24 * $Revision: 1.2 $ 25 * $Date: 1997/10/05 19:18:09 $ 26 * 27 * This file contains the non-standard IOCTL related definitions 28 * for the QIC-40/80/3010/3020 floppy-tape driver "ftape" for 29 * Linux. 30 */ 31 32 #include <linux/ioctl.h> 33 #include <linux/mtio.h> 34 #include <linux/ftape-vendors.h> 35 36 #include "../lowlevel/ftape-rw.h" 37 #include <linux/ftape-header-segment.h> 38 39 typedef struct { 40 int used; /* any reading or writing done */ 41 /* isr statistics */ 42 unsigned int id_am_errors; /* id address mark not found */ 43 unsigned int id_crc_errors; /* crc error in id address mark */ 44 unsigned int data_am_errors; /* data address mark not found */ 45 unsigned int data_crc_errors; /* crc error in data field */ 46 unsigned int overrun_errors; /* fdc access timing problem */ 47 unsigned int no_data_errors; /* sector not found */ 48 unsigned int retries; /* number of tape retries */ 49 /* ecc statistics */ 50 unsigned int crc_errors; /* crc error in data */ 51 unsigned int crc_failures; /* bad data without crc error */ 52 unsigned int ecc_failures; /* failed to correct */ 53 unsigned int corrected; /* total sectors corrected */ 54 /* general statistics */ 55 unsigned int rewinds; /* number of tape rewinds */ 56 unsigned int defects; /* bad sectors due to media defects */ 57 } history_record; 58 59 /* this structure contains * ALL * information that we want 60 * our child modules to know about, but don't want them to 61 * modify. 62 */ 63 typedef struct { 64 /* vendor information */ 65 vendor_struct fti_drive_type; 66 /* data rates */ 67 unsigned int fti_used_data_rate; 68 unsigned int fti_drive_max_rate; 69 unsigned int fti_fdc_max_rate; 70 /* drive selection, either FTAPE_SEL_A/B/C/D */ 71 int fti_drive_sel; 72 /* flags set after decode the drive and tape status */ 73 unsigned int fti_formatted :1; 74 unsigned int fti_no_tape :1; 75 unsigned int fti_write_protected:1; 76 unsigned int fti_new_tape :1; 77 /* values of last queried drive/tape status and error */ 78 ft_drive_error fti_last_error; 79 ft_drive_status fti_last_status; 80 /* cartridge geometry */ 81 unsigned int fti_tracks_per_tape; 82 unsigned int fti_segments_per_track; 83 /* location of header segments, etc. */ 84 int fti_used_header_segment; 85 int fti_header_segment_1; 86 int fti_header_segment_2; 87 int fti_first_data_segment; 88 int fti_last_data_segment; 89 /* the format code as stored in the header segment */ 90 ft_format_type fti_format_code; 91 /* the following is the sole reason for the ftape_set_status() call */ 92 unsigned int fti_qic_std; 93 /* is tape running? */ 94 volatile enum runner_status_enum fti_runner_status; 95 /* is tape reading/writing/verifying/formatting/deleting */ 96 buffer_state_enum fti_state; 97 /* flags fatal hardware error */ 98 unsigned int fti_failure:1; 99 /* history record */ 100 history_record fti_history; 101 } ftape_info; 102 103 /* vendor information */ 104 #define ft_drive_type ftape_status.fti_drive_type 105 /* data rates */ 106 #define ft_data_rate ftape_status.fti_used_data_rate 107 #define ft_drive_max_rate ftape_status.fti_drive_max_rate 108 #define ft_fdc_max_rate ftape_status.fti_fdc_max_rate 109 /* drive selection, either FTAPE_SEL_A/B/C/D */ 110 #define ft_drive_sel ftape_status.fti_drive_sel 111 /* flags set after decode the drive and tape status */ 112 #define ft_formatted ftape_status.fti_formatted 113 #define ft_no_tape ftape_status.fti_no_tape 114 #define ft_write_protected ftape_status.fti_write_protected 115 #define ft_new_tape ftape_status.fti_new_tape 116 /* values of last queried drive/tape status and error */ 117 #define ft_last_error ftape_status.fti_last_error 118 #define ft_last_status ftape_status.fti_last_status 119 /* cartridge geometry */ 120 #define ft_tracks_per_tape ftape_status.fti_tracks_per_tape 121 #define ft_segments_per_track ftape_status.fti_segments_per_track 122 /* the format code as stored in the header segment */ 123 #define ft_format_code ftape_status.fti_format_code 124 /* the qic status as returned by report drive configuration */ 125 #define ft_qic_std ftape_status.fti_qic_std 126 #define ft_used_header_segment ftape_status.fti_used_header_segment 127 #define ft_header_segment_1 ftape_status.fti_header_segment_1 128 #define ft_header_segment_2 ftape_status.fti_header_segment_2 129 #define ft_first_data_segment ftape_status.fti_first_data_segment 130 #define ft_last_data_segment ftape_status.fti_last_data_segment 131 /* is tape running? */ 132 #define ft_runner_status ftape_status.fti_runner_status 133 /* is tape reading/writing/verifying/formatting/deleting */ 134 #define ft_driver_state ftape_status.fti_state 135 /* flags fatal hardware error */ 136 #define ft_failure ftape_status.fti_failure 137 /* history record */ 138 #define ft_history ftape_status.fti_history 139 140 /* 141 * ftape-ctl.c defined global vars. 142 */ 143 extern ftape_info ftape_status; 144 extern int ftape_segments_per_head; 145 extern int ftape_segments_per_cylinder; 146 extern int ftape_init_drive_needed; 147 148 /* 149 * ftape-ctl.c defined global functions. 150 */ 151 extern int ftape_mmap(struct vm_area_struct *vma); 152 extern int ftape_enable(int drive_selection); 153 extern void ftape_disable(void); 154 extern int ftape_seek_to_bot(void); 155 extern int ftape_seek_to_eot(void); 156 extern int ftape_abort_operation(void); 157 extern void ftape_calc_timeouts(unsigned int qic_std, 158 unsigned int data_rate, 159 unsigned int tape_len); 160 extern int ftape_calibrate_data_rate(unsigned int qic_std); 161 extern int ftape_init_drive(void); 162 extern const ftape_info *ftape_get_status(void); 163 #endif 164