1*53524e44Schristos /* $NetBSD: linux_fdio.h,v 1.4 2007/03/04 06:01:23 christos Exp $ */ 2a499e569Sfvdl 3a499e569Sfvdl /* 4a499e569Sfvdl * Copyright (c) 2000 Wasabi Systems, Inc. 5a499e569Sfvdl * All rights reserved. 6a499e569Sfvdl * 7a499e569Sfvdl * Written by Frank van der Linden for Wasabi Systems, Inc. 8a499e569Sfvdl * 9a499e569Sfvdl * Redistribution and use in source and binary forms, with or without 10a499e569Sfvdl * modification, are permitted provided that the following conditions 11a499e569Sfvdl * are met: 12a499e569Sfvdl * 1. Redistributions of source code must retain the above copyright 13a499e569Sfvdl * notice, this list of conditions and the following disclaimer. 14a499e569Sfvdl * 2. Redistributions in binary form must reproduce the above copyright 15a499e569Sfvdl * notice, this list of conditions and the following disclaimer in the 16a499e569Sfvdl * documentation and/or other materials provided with the distribution. 17a499e569Sfvdl * 3. All advertising materials mentioning features or use of this software 18a499e569Sfvdl * must display the following acknowledgement: 19a499e569Sfvdl * This product includes software developed for the NetBSD Project by 20a499e569Sfvdl * Wasabi Systems, Inc. 21a499e569Sfvdl * 4. The name of Wasabi Systems, Inc. may not be used to endorse 22a499e569Sfvdl * or promote products derived from this software without specific prior 23a499e569Sfvdl * written permission. 24a499e569Sfvdl * 25a499e569Sfvdl * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND 26a499e569Sfvdl * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 27a499e569Sfvdl * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28a499e569Sfvdl * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC 29a499e569Sfvdl * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30a499e569Sfvdl * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31a499e569Sfvdl * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32a499e569Sfvdl * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33a499e569Sfvdl * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34a499e569Sfvdl * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35a499e569Sfvdl * POSSIBILITY OF SUCH DAMAGE. 36a499e569Sfvdl */ 37a499e569Sfvdl 38a499e569Sfvdl #ifndef _LINUX_FDIO_H 39a499e569Sfvdl #define _LINUX_FDIO_H 40a499e569Sfvdl 41a499e569Sfvdl /* 42a499e569Sfvdl * Linux floppy ioctl call structures and defines. 43a499e569Sfvdl */ 44a499e569Sfvdl 45a499e569Sfvdl struct linux_floppy_struct { 46a499e569Sfvdl u_int size; 47a499e569Sfvdl u_int sect; 48a499e569Sfvdl u_int head; 49a499e569Sfvdl u_int track; 50a499e569Sfvdl u_int stretch; 51a499e569Sfvdl u_char gap; 52a499e569Sfvdl u_char rate; 53a499e569Sfvdl u_char spec1; 54a499e569Sfvdl u_char fmt_gap; 55a499e569Sfvdl const char *name; 56a499e569Sfvdl }; 57a499e569Sfvdl 58a499e569Sfvdl struct linux_floppy_max_errors { 59a499e569Sfvdl u_int abort; 60a499e569Sfvdl u_int read_track; 61a499e569Sfvdl u_int reset; 62a499e569Sfvdl u_int recal; 63a499e569Sfvdl u_int reporting; 64a499e569Sfvdl }; 65a499e569Sfvdl 66a499e569Sfvdl struct linux_floppy_drive_params { 67a499e569Sfvdl char cmos; 68a499e569Sfvdl u_long max_dtr; 69a499e569Sfvdl u_long hlt; 70a499e569Sfvdl u_long hut; 71a499e569Sfvdl u_long srt; 72a499e569Sfvdl u_long spinup; 73a499e569Sfvdl u_long spindown; 74a499e569Sfvdl u_char spindown_offset; 75a499e569Sfvdl u_char select_delay; 76a499e569Sfvdl u_char rps; 77a499e569Sfvdl u_char tracks; 78a499e569Sfvdl u_long timeout; 79a499e569Sfvdl u_char interleave_sect; 80a499e569Sfvdl struct linux_floppy_max_errors max_errors; 81a499e569Sfvdl char flags; 82a499e569Sfvdl char read_track; 83a499e569Sfvdl short autodetect[8]; 84a499e569Sfvdl int checkfreq; 85a499e569Sfvdl int native_format; 86a499e569Sfvdl }; 87a499e569Sfvdl 88a499e569Sfvdl struct linux_floppy_drive_struct { 89a499e569Sfvdl u_long flags; 90a499e569Sfvdl u_long spinup_date; 91a499e569Sfvdl u_long select_date; 92a499e569Sfvdl u_long first_read_date; 93a499e569Sfvdl short probed_format; 94a499e569Sfvdl short track; 95a499e569Sfvdl short maxblock; 96a499e569Sfvdl short maxtrack; 97a499e569Sfvdl int generation; 98a499e569Sfvdl int keep_data; 99a499e569Sfvdl int fd_ref; 100a499e569Sfvdl int fd_device; 101a499e569Sfvdl u_long last_checked; 102a499e569Sfvdl char *dmabuf; 103a499e569Sfvdl int bufblocks; 104a499e569Sfvdl }; 105a499e569Sfvdl 106a499e569Sfvdl #define LINUX_FD_NEED_TWADDLE 0x01 107a499e569Sfvdl #define LINUX_FD_VERIFY 0x02 108a499e569Sfvdl #define LINUX_FD_DISK_NEWCHANGE 0x04 109a499e569Sfvdl #define LINUX_FD_DISK_CHANGED 0x10 110a499e569Sfvdl #define LINUX_FD_DISK_WRITABLE 0x20 111a499e569Sfvdl 112a499e569Sfvdl 113a499e569Sfvdl struct linux_floppy_fdc_state { 114a499e569Sfvdl int spec1; 115a499e569Sfvdl int spec2; 116a499e569Sfvdl int dtr; 117a499e569Sfvdl u_char version; 118a499e569Sfvdl u_char dor; 119a499e569Sfvdl u_long address; 120a499e569Sfvdl u_int rawcmd:2; 121a499e569Sfvdl u_int reset:1; 122a499e569Sfvdl u_int need_configure:1; 123a499e569Sfvdl u_int perp_mode:2; 124a499e569Sfvdl u_int has_fifo:1; 125a499e569Sfvdl u_int driver_version; 126a499e569Sfvdl u_char track[4]; 127a499e569Sfvdl }; 128a499e569Sfvdl 129a499e569Sfvdl struct linux_floppy_write_errors { 130a499e569Sfvdl u_int write_errors; 131a499e569Sfvdl u_long first_error_sector; 132a499e569Sfvdl u_int first_error_generation; 133a499e569Sfvdl u_long last_error_sector; 134a499e569Sfvdl u_int last_error_generation; 135a499e569Sfvdl u_int badness; 136a499e569Sfvdl }; 137a499e569Sfvdl 138a499e569Sfvdl struct linux_floppy_raw_cmd { 139a499e569Sfvdl u_int flags; 140a499e569Sfvdl void *data; 141*53524e44Schristos void *kernel_data; 142a499e569Sfvdl struct floppy_raw_cmd *next; 143a499e569Sfvdl long length; 144a499e569Sfvdl long phys_length; 145a499e569Sfvdl int buffer_length; 146a499e569Sfvdl u_char rate; 147a499e569Sfvdl u_char cmd_count; 148a499e569Sfvdl u_char cmd[16]; 149a499e569Sfvdl u_char reply_count; 150a499e569Sfvdl u_char reply[16]; 151a499e569Sfvdl int track; 152a499e569Sfvdl int resultcode; 153a499e569Sfvdl int reserved1; 154a499e569Sfvdl int reserved2; 155a499e569Sfvdl }; 156a499e569Sfvdl 157a499e569Sfvdl struct linux_format_descr { 158a499e569Sfvdl u_int device; 159a499e569Sfvdl u_int head; 160a499e569Sfvdl u_int track; 161a499e569Sfvdl }; 162a499e569Sfvdl 163a499e569Sfvdl typedef char linux_floppy_drive_name[16]; 164a499e569Sfvdl 165a499e569Sfvdl #define LINUX_FDCLRPRM _LINUX_IO(2, 0x41) 166a499e569Sfvdl #define LINUX_FDSETPRM _LINUX_IOW(2, 0x42, struct linux_floppy_struct) 167a499e569Sfvdl #define LINUX_FDDEFPRM _LINUX_IOW(2, 0x43, struct linux_floppy_struct) 168a499e569Sfvdl #define LINUX_FDGETPRM _LINUX_IOR(2, 0x04, struct linux_floppy_struct) 169a499e569Sfvdl #define LINUX_FDMSGON _LINUX_IO(2, 0x45) 170a499e569Sfvdl #define LINUX_FDMSGOFF _LINUX_IO(2, 0x46) 171a499e569Sfvdl #define LINUX_FDFMTBEG _LINUX_IO(2, 0x47) 172a499e569Sfvdl #define LINUX_FDFMTTRK _LINUX_IOW(2, 0x48, struct linux_format_descr) 173a499e569Sfvdl #define LINUX_FDFMTEND _LINUX_IO(2, 0x49) 174a499e569Sfvdl #define LINUX_FDSETEMSGTRESH _LINUX_IO(2, 0x4a) 175a499e569Sfvdl #define LINUX_FDFLUSH _LINUX_IO(2, 0x4b) 176a499e569Sfvdl #define LINUX_FDSETMAXERRS \ 177a499e569Sfvdl _LINUX_IOW(2, 0x4c, struct linux_floppy_max_errors) 178a499e569Sfvdl #define LINUX_FDGETMAXERRS \ 179a499e569Sfvdl _LINUX_IOR(2, 0x0e, struct linux_floppy_max_errors) 180a499e569Sfvdl #define LINUX_FDGETDRVTYP _LINUX_IOR(2, 0x0f, linux_floppy_drive_name) 181a499e569Sfvdl /* 0x90 is not a typo, that's how it's listed in the Linux include file */ 182a499e569Sfvdl #define LINUX_FDSETDRVPRM \ 183a499e569Sfvdl _LINUX_IOW(2, 0x90, struct linux_floppy_drive_params) 184a499e569Sfvdl #define LINUX_FDGETDRVPRM \ 185a499e569Sfvdl _LINUX_IOR(2, 0x11, struct linux_floppy_drive_params) 186a499e569Sfvdl #define LINUX_FDGETDRVSTAT \ 187a499e569Sfvdl _LINUX_IOR(2, 0x12, struct linux_floppy_drive_struct) 188a499e569Sfvdl #define LINUX_FDPOLLDRVSTAT \ 189a499e569Sfvdl _LINUX_IOR(2, 0x13, struct linux_floppy_drive_struct) 190a499e569Sfvdl #define LINUX_FDRESET _LINUX_IO(2, 0x54) 191a499e569Sfvdl #define LINUX_FDGETFDCSTAT \ 192a499e569Sfvdl _LINUX_IOR(2, 0x15, struct linux_floppy_fdc_state) 193a499e569Sfvdl #define LINUX_FDWERRORCLR _LINUX_IO(2, 0x56) 194a499e569Sfvdl #define LINUX_FDWERRORGET \ 195a499e569Sfvdl _LINUX_IOR(2, 0x17, struct linux_floppy_write_errors) 196a499e569Sfvdl #define LINUX_FDRAWCMD _LINUX_IO(2, 0x58) 197a499e569Sfvdl #define LINUX_FDTWADDLE _LINUX_IO(2, 0x59) 198a499e569Sfvdl #define LINUX_FDEJECT _LINUX_IO(2, 0x5a) 199a499e569Sfvdl 200a499e569Sfvdl #endif /* _LINUX_FDIO_H */ 201