File: /usr/src/linux/include/asm-m68k/swim_iop.h

1     /*
2      * SWIM access through the IOP
3      * Written by Joshua M. Thompson
4      */
5     
6     /* IOP number and channel number for the SWIM */
7     
8     #define SWIM_IOP	IOP_NUM_ISM
9     #define SWIM_CHAN	1
10     
11     /* Command code: */
12     
13     #define CMD_INIT		0x01	/* Initialize                  */
14     #define CMD_SHUTDOWN		0x02	/* Shutdown                    */
15     #define CMD_START_POLL		0x03	/* Start insert/eject polling  */
16     #define CMD_STOP_POLL		0x04	/* Stop insert/eject polling   */
17     #define CMD_SETHFSTAG		0x05	/* Set HFS tag buffer address  */
18     #define CMD_STATUS		0x06	/* Status                      */
19     #define CMD_EJECT		0x07	/* Eject                       */
20     #define CMD_FORMAT		0x08	/* Format                      */
21     #define CMD_FORMAT_VERIFY	0x09	/* Format and Verify           */
22     #define CMD_WRITE		0x0A	/* Write                       */
23     #define CMD_READ		0x0B	/* Read                        */
24     #define CMD_READ_VERIFY		0x0C	/* Read and Verify             */
25     #define CMD_CACHE_CTRL		0x0D	/* Cache control               */
26     #define CMD_TAGBUFF_CTRL	0x0E	/* Tag buffer control          */
27     #define CMD_GET_ICON		0x0F	/* Get Icon                    */
28     
29     /* Drive types: */
30     
31     /* note: apple sez DRV_FDHD is 4, but I get back a type */
32     /*       of 5 when I do a drive status check on my FDHD */
33     
34     #define	DRV_NONE	0	/* No drive             */
35     #define	DRV_UNKNOWN	1	/* Unspecified drive    */
36     #define	DRV_400K	2	/* 400K                 */
37     #define	DRV_800K	3	/* 400K/800K            */
38     #define	DRV_FDHD	5	/* 400K/800K/720K/1440K */
39     #define	DRV_HD20	7	/* Apple HD20           */
40     
41     /* Format types: */
42     
43     #define	FMT_HD20	0x0001	/*  Apple HD20 */
44     #define	FMT_400K	0x0002	/*  400K (GCR) */
45     #define	FMT_800K	0x0004	/*  800K (GCR) */
46     #define	FMT_720K	0x0008	/*  720K (MFM) */
47     #define	FMT_1440K	0x0010	/* 1.44M (MFM) */
48     
49     #define	FMD_KIND_400K	1
50     #define	FMD_KIND_800K	2
51     #define	FMD_KIND_720K	3
52     #define	FMD_KIND_1440K	1
53     
54     /* Icon Flags: */
55     
56     #define	ICON_MEDIA	0x01	/* Have IOP supply media icon */
57     #define	ICON_DRIVE	0x01	/* Have IOP supply drive icon */
58     
59     /* Error codes: */
60     
61     #define	gcrOnMFMErr	-400	/* GCR (400/800K) on HD media */
62     #define	verErr		-84	/* verify failed */
63     #define	fmt2Err		-83	/* cant get enough sync during format */
64     #define	fmt1Err		-82	/* can't find sector 0 after track format */
65     #define	sectNFErr	-81	/* can't find sector */
66     #define	seekErr		-80	/* drive error during seek */
67     #define	spdAdjErr	-79	/* can't set drive speed */
68     #define	twoSideErr	-78	/* drive is single-sided */
69     #define	initIWMErr	-77	/* error during initialization */
70     #define	tk0badErr	-76	/* track zero is bad */
71     #define	cantStepErr	-75	/* drive error during step */
72     #define	wrUnderrun	-74	/* write underrun occurred */
73     #define	badDBtSlp	-73	/* bad data bitslip marks */
74     #define	badDCksum	-72	/* bad data checksum */
75     #define	noDtaMkErr	-71	/* can't find data mark */
76     #define	badBtSlpErr	-70	/* bad address bitslip marks */
77     #define	badCksmErr	-69	/* bad address-mark checksum */
78     #define	dataVerErr	-68	/* read-verify failed */
79     #define	noAdrMkErr	-67	/* can't find an address mark */
80     #define	noNybErr	-66	/* no nybbles? disk is probably degaussed */
81     #define	offLinErr	-65	/* no disk in drive */
82     #define	noDriveErr	-64	/* drive isn't connected */
83     #define	nsDrvErr	-56	/* no such drive */
84     #define	paramErr	-50	/* bad positioning information */
85     #define	wPrErr		-44	/* write protected */
86     #define	openErr		-23	/* already initialized */
87     
88     #ifndef __ASSEMBLY__
89     
90     struct swim_drvstatus {
91     	__u16	curr_track;	/* Current track number                   */
92     	__u8	write_prot;	/* 0x80 if disk is write protected        */
93     	__u8	disk_in_drive;	/* 0x01 or 0x02 if a disk is in the drive */
94     	__u8	installed;	/* 0x01 if drive installed, 0xFF if not   */
95     	__u8	num_sides;	/* 0x80 if two-sided format supported     */
96     	__u8	two_sided;	/* 0xff if two-sided format diskette      */
97     	__u8	new_interface;	/* 0x00 if old 400K drive, 0xFF if newer  */
98     	__u16	errors;		/* Disk error count                       */
99     	struct {		/* 32 bits */
100     		__u16	reserved;
101     		__u16	:4;
102     		__u16	external:1;	/* Drive is external        */
103     		__u16	scsi:1;		/* Drive is a SCSI drive    */
104     		__u16	fixed:1;	/* Drive has fixed media    */
105     		__u16	secondary:1;	/* Drive is secondary drive */
106     		__u8	type;		/* Drive type               */
107     	} info;
108     	__u8	mfm_drive;	/* 0xFF if this is an FDHD drive    */
109     	__u8	mfm_disk;	/* 0xFF if 720K/1440K (MFM) disk    */
110     	__u8	mfm_format;	/* 0x00 if 720K, 0xFF if 1440K      */
111     	__u8	ctlr_type;	/* 0x00 if IWM, 0xFF if SWIM        */
112     	__u16	curr_format;	/* Current format type              */
113     	__u16	allowed_fmt;	/* Allowed format types             */
114     	__u32	num_blocks;	/* Number of blocks on disk         */
115     	__u8	icon_flags;	/* Icon flags                       */
116     	__u8	unusued;
117     };
118     
119     /* Commands issued from the host to the IOP: */
120     
121     struct swimcmd_init {
122     	__u8	code;		/* CMD_INIT */
123     	__u8	unusued;
124     	__u16	error;
125     	__u8	drives[28];	/* drive type list */
126     };
127     
128     struct swimcmd_startpoll {
129     	__u8	code;		/* CMD_START_POLL */
130     	__u8	unusued;
131     	__u16	error;
132     };
133     
134     struct swimcmd_sethfstag {
135     	__u8	code;		/* CMD_SETHFSTAG */
136     	__u8	unusued;
137     	__u16	error;
138     	caddr_t	tagbuf;		/* HFS tag buffer address */
139     };
140     
141     struct swimcmd_status {
142     	__u8	code;		/* CMD_STATUS */
143     	__u8	drive_num;
144     	__u16	error;
145     	struct swim_drvstatus status;
146     };
147     
148     struct swimcmd_eject {
149     	__u8	code;		/* CMD_EJECT */
150     	__u8	drive_num;
151     	__u16	error;
152     	struct swim_drvstatus status;
153     };
154     
155     struct swimcmd_format {
156     	__u8	code;		/* CMD_FORMAT */
157     	__u8	drive_num;
158     	__u16	error;
159     	union {
160     		struct {
161     			__u16 fmt;	   /* format kind                  */
162     			__u8  hdrbyte;	   /* fmt byte for hdr (0=default) */
163     			__u8  interleave;  /* interleave (0 = default)     */
164     			caddr_t	databuf;   /* sector data buff (0=default  */
165     			caddr_t	tagbuf;	   /* tag data buffer (0=default)  */
166     		} f;
167     		struct swim_drvstatus status;
168     	} p;
169     };
170     
171     struct swimcmd_fmtverify {
172     	__u8	code;		/* CMD_FORMAT_VERIFY */
173     	__u8	drive_num;
174     	__u16	error;
175     };
176     
177     struct swimcmd_rw {
178     	__u8	code;		/* CMD_READ, CMD_WRITE or CMD_READ_VERIFY */
179     	__u8	drive_num;
180     	__u16	error;
181     	caddr_t	buffer;		/* R/W buffer address */
182     	__u32	first_block;	/* Starting block     */
183     	__u32	num_blocks;	/* Number of blocks   */
184     	__u8	tag[12];	/* tag data           */
185     };
186     
187     struct swimcmd_cachectl {
188     	__u8	code;		/* CMD_CACHE_CTRL */
189     	__u8	unused;
190     	__u16	error;
191     	__u8	enable;		/* Nonzero to enable cache                */
192     	__u8	install;	/* +1 = install, -1 = remove, 0 = neither */
193     };
194     
195     struct swimcmd_tagbufctl {
196     	__u8	code;		/* CMD_TAGBUFF_CTRL */
197     	__u8	unused;
198     	__u16	error;
199     	caddr_t	buf;		/* buffer address or 0 to disable */
200     };
201     
202     struct swimcmd_geticon {
203     	__u8	code;		/* CMD_GET_ICON */
204     	__u8	drive_num;
205     	__u16	error;
206     	caddr_t	buffer;		/* Nuffer address */
207     	__u16	kind;		/* 0 = media icon, 1 = drive icon */
208     	__u16	unused;
209     	__u16	max_bytes;	/* maximum  byte count */
210     };
211     
212     /* Messages from the SWIM IOP to the host CPU: */
213     
214     struct swimmsg_status {
215     	__u8	code;		/* 1 = insert, 2 = eject, 3 = status changed */
216     	__u8	drive_num;
217     	__u16	error;
218     	struct swim_drvstatus status;
219     };
220     
221     #endif /* __ASSEMBLY__ */
222