aboutsummaryrefslogtreecommitdiff
path: root/include/linux/fd.h
blob: 0d95ae6e44468440bf56f7da503923c055e97bad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
#ifndef _LINUX_FD_H
#define _LINUX_FD_H

#include <linux/ioctl.h>
#include <linux/compiler.h>


struct floppy_struct {
	unsigned int	size,		
			sect,		
			head,		
			track,		
			stretch;	
					
					
					
#define FD_STRETCH 1
#define FD_SWAPSIDES 2
#define FD_ZEROBASED 4
#define FD_SECTBASEMASK 0x3FC
#define FD_MKSECTBASE(s) (((s) ^ 1) << 2)
#define FD_SECTBASE(floppy) ((((floppy)->stretch & FD_SECTBASEMASK) >> 2) ^ 1)

	unsigned char	gap,		

			rate,		
#define FD_2M 0x4
#define FD_SIZECODEMASK 0x38
#define FD_SIZECODE(floppy) (((((floppy)->rate&FD_SIZECODEMASK)>> 3)+ 2) %8)
#define FD_SECTSIZE(floppy) ( (floppy)->rate & FD_2M ? \
			     512 : 128 << FD_SIZECODE(floppy) )
#define FD_PERP 0x40

			spec1,		
			fmt_gap;	
	const char	* name; 
};



#define FDCLRPRM _IO(2, 0x41)

#define FDSETPRM _IOW(2, 0x42, struct floppy_struct) 
#define FDSETMEDIAPRM FDSETPRM

#define FDDEFPRM _IOW(2, 0x43, struct floppy_struct) 
#define FDGETPRM _IOR(2, 0x04, struct floppy_struct)
#define FDDEFMEDIAPRM FDDEFPRM
#define FDGETMEDIAPRM FDGETPRM


#define	FDMSGON  _IO(2,0x45)
#define	FDMSGOFF _IO(2,0x46)


#define FD_FILL_BYTE 0xF6 

struct format_descr {
	unsigned int device,head,track;
};

#define FDFMTBEG _IO(2,0x47)
#define	FDFMTTRK _IOW(2,0x48, struct format_descr)
#define FDFMTEND _IO(2,0x49)


struct floppy_max_errors {
	unsigned int
	  abort,      
	  read_track, 
	  reset,      
	  recal,      

	  reporting;

};

#define FDSETEMSGTRESH	_IO(2,0x4a)

#define FDFLUSH  _IO(2,0x4b)

#define FDSETMAXERRS _IOW(2, 0x4c, struct floppy_max_errors)
#define FDGETMAXERRS _IOR(2, 0x0e, struct floppy_max_errors)


typedef char floppy_drive_name[16];
#define FDGETDRVTYP _IOR(2, 0x0f, floppy_drive_name)


struct floppy_drive_params {
	signed char cmos;		
	
	unsigned long max_dtr;		
	unsigned long hlt;     		
	unsigned long hut;     		
	unsigned long srt;     		

	unsigned long spinup;		
	unsigned long spindown;		
	unsigned char spindown_offset;	
	unsigned char select_delay;	
	unsigned char rps;		
	unsigned char tracks;		
	unsigned long timeout;		
	
	unsigned char interleave_sect;	
	
	struct floppy_max_errors max_errors;
	
	char flags;			

#define FTD_MSG 0x10
#define FD_BROKEN_DCL 0x20
#define FD_DEBUG 0x02
#define FD_SILENT_DCL_CLEAR 0x4
#define FD_INVERTED_DCL 0x80 

	char read_track;		

	short autodetect[8];		
	
	int checkfreq; 
	int native_format; 
};

enum {
	FD_NEED_TWADDLE_BIT,	
	FD_VERIFY_BIT,		
	FD_DISK_NEWCHANGE_BIT,	
	FD_UNUSED_BIT,
	FD_DISK_CHANGED_BIT,	
	FD_DISK_WRITABLE_BIT	
};

#define FDSETDRVPRM _IOW(2, 0x90, struct floppy_drive_params)
#define FDGETDRVPRM _IOR(2, 0x11, struct floppy_drive_params)


struct floppy_drive_struct {
	unsigned long flags;
#define FD_NEED_TWADDLE (1 << FD_NEED_TWADDLE_BIT)
#define FD_VERIFY (1 << FD_VERIFY_BIT)
#define FD_DISK_NEWCHANGE (1 << FD_DISK_NEWCHANGE_BIT)
#define FD_DISK_CHANGED (1 << FD_DISK_CHANGED_BIT)
#define FD_DISK_WRITABLE (1 << FD_DISK_WRITABLE_BIT)

	unsigned long spinup_date;
	unsigned long select_date;
	unsigned long first_read_date;
	short probed_format;
	short track; 
	short maxblock; 
	short maxtrack; 
	int generation; 

	int keep_data;
	
	
	int fd_ref;
	int fd_device;
	unsigned long last_checked; 
	
	char *dmabuf;
	int bufblocks;
};

#define FDGETDRVSTAT _IOR(2, 0x12, struct floppy_drive_struct)
#define FDPOLLDRVSTAT _IOR(2, 0x13, struct floppy_drive_struct)


enum reset_mode {
	FD_RESET_IF_NEEDED,	
	FD_RESET_IF_RAWCMD,	
	FD_RESET_ALWAYS		
};
#define FDRESET _IO(2, 0x54)


struct floppy_fdc_state {	
	int spec1;		
	int spec2;		
	int dtr;
	unsigned char version;	
	unsigned char dor;
	unsigned long address;	
	unsigned int rawcmd:2;
	unsigned int reset:1;
	unsigned int need_configure:1;
	unsigned int perp_mode:2;
	unsigned int has_fifo:1;
	unsigned int driver_version;	
#define FD_DRIVER_VERSION 0x100

	unsigned char track[4];

};

#define FDGETFDCSTAT _IOR(2, 0x15, struct floppy_fdc_state)


struct floppy_write_errors {

	unsigned int write_errors;  
	
	
	unsigned long first_error_sector;
	int           first_error_generation;
	unsigned long last_error_sector;
	int           last_error_generation;
	
	unsigned int badness; 
};

#define FDWERRORCLR  _IO(2, 0x56)
#define FDWERRORGET  _IOR(2, 0x17, struct floppy_write_errors)


#define FDHAVEBATCHEDRAWCMD

struct floppy_raw_cmd {
	unsigned int flags;
#define FD_RAW_READ 1
#define FD_RAW_WRITE 2
#define FD_RAW_NO_MOTOR 4
#define FD_RAW_DISK_CHANGE 4 
#define FD_RAW_INTR 8    
#define FD_RAW_SPIN 0x10 
#define FD_RAW_NO_MOTOR_AFTER 0x20 
#define FD_RAW_NEED_DISK 0x40  
#define FD_RAW_NEED_SEEK 0x80  

#define FD_RAW_MORE 0x100  
#define FD_RAW_STOP_IF_FAILURE 0x200 
#define FD_RAW_STOP_IF_SUCCESS 0x400 
#define FD_RAW_SOFTFAILURE 0x800 

#define FD_RAW_FAILURE 0x10000 
#define FD_RAW_HARDFAILURE 0x20000 

	void __user *data;
	char *kernel_data; 
	struct floppy_raw_cmd *next; 
	long length; 
	long phys_length; 
	int buffer_length; 

	unsigned char rate;
	unsigned char cmd_count;
	unsigned char cmd[16];
	unsigned char reply_count;
	unsigned char reply[16];
	int track;
	int resultcode;

	int reserved1;
	int reserved2;
};

#define FDRAWCMD _IO(2, 0x58)

#define FDTWADDLE _IO(2, 0x59)


#define FDEJECT _IO(2, 0x5a)


#ifdef __KERNEL__
#ifdef CONFIG_COMPAT
#include <linux/compat.h>

struct compat_floppy_struct {
	compat_uint_t	size;
	compat_uint_t	sect;
	compat_uint_t	head;
	compat_uint_t	track;
	compat_uint_t	stretch;
	unsigned char	gap;
	unsigned char	rate;
	unsigned char	spec1;
	unsigned char	fmt_gap;
	const compat_caddr_t name;
};

#define FDGETPRM32 _IOR(2, 0x04, struct compat_floppy_struct)
#endif
#endif

#endif