diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/asm-m68k/swim_iop.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'include/asm-m68k/swim_iop.h')
-rw-r--r-- | include/asm-m68k/swim_iop.h | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/include/asm-m68k/swim_iop.h b/include/asm-m68k/swim_iop.h new file mode 100644 index 000000000000..f29b67876b01 --- /dev/null +++ b/include/asm-m68k/swim_iop.h | |||
@@ -0,0 +1,221 @@ | |||
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 /* can't 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__ */ | ||