@@ -122,6 +122,8 @@
IOCTL(FDSETMAXERRS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_floppy_max_errors)))
IOCTL(FDGETMAXERRS, IOC_R, MK_PTR(MK_STRUCT(STRUCT_floppy_max_errors)))
IOCTL(FDRESET, 0, TYPE_NULL)
+ IOCTL(FDGETFDCSTAT, IOC_R,
+ MK_PTR(MK_STRUCT(STRUCT_target_floppy_fdc_state)))
IOCTL(FDRAWCMD, 0, TYPE_NULL)
IOCTL(FDTWADDLE, 0, TYPE_NULL)
IOCTL(FDEJECT, 0, TYPE_NULL)
@@ -897,6 +897,23 @@ struct target_pollfd {
/* From <linux/fd.h> */
+struct target_floppy_fdc_state {
+ int spec1; /* spec1 value last used */
+ int spec2; /* spec2 value last used */
+ int dtr;
+ unsigned char version; /* FDC version code */
+ unsigned char dor;
+ abi_long address; /* io 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; /* version code for floppy driver */
+ unsigned char track[4];
+};
+
+
#define TARGET_FDMSGON TARGET_IO(2, 0x45)
#define TARGET_FDMSGOFF TARGET_IO(2, 0x46)
#define TARGET_FDFMTBEG TARGET_IO(2, 0x47)
@@ -907,6 +924,7 @@ struct target_pollfd {
#define TARGET_FDSETMAXERRS TARGET_IOW(2, 0x4c, struct floppy_max_errors)
#define TARGET_FDGETMAXERRS TARGET_IOR(2, 0x0e, struct floppy_max_errors)
#define TARGET_FDRESET TARGET_IO(2, 0x54)
+#define TARGET_FDGETFDCSTAT TARGET_IOR(2, 0x15, struct target_floppy_fdc_state)
#define TARGET_FDRAWCMD TARGET_IO(2, 0x58)
#define TARGET_FDTWADDLE TARGET_IO(2, 0x59)
#define TARGET_FDEJECT TARGET_IO(2, 0x5a)
@@ -273,6 +273,18 @@ STRUCT(floppy_max_errors,
TYPE_INT, /* recal */
TYPE_INT) /* reporting */
+STRUCT(target_floppy_fdc_state,
+ TYPE_INT, /* spec1 */
+ TYPE_INT, /* spec2 */
+ TYPE_INT, /* dtr */
+ TYPE_CHAR, /* version */
+ TYPE_CHAR, /* dor */
+ TYPE_ULONG, /* address */
+ TYPE_INT, /* bit field for rawcmd:2, reset:1, need_configure:1, */
+ /* perp_mode:2, and has_fifo:1 */
+ TYPE_INT, /* driver_version */
+ MK_ARRAY(TYPE_CHAR, 4)) /* track */
+
#if defined(CONFIG_USBFS)
/* usb device ioctls */
STRUCT(usbdevfs_ctrltransfer,