From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
Date: Mon, 24 Mar 97 10:47:41 +0100
To: linux-m68k@phil.uni-sb.de
Subject: L68K: BLK* ioctls missing in atari floppy driver
X-Yow: I'm changing the CHANNEL..  But all I get is commercials
 for ``RONCO MIRACLE BAMBOO STEAMERS''!
Sender: owner-linux-m68k@phil.uni-sb.de
Reply-To: linux-m68k@phil.uni-sb.de

Hi!

This implements the missing BLK* ioctls in the atari floppy driver.

Andreas.

--- drivers/block/ataflop.c.~1~	Sat Jan  4 10:49:31 1997
+++ drivers/block/ataflop.c	Wed Mar 19 16:46:48 1997
@@ -52,6 +52,9 @@
  * Michael (MSch) 11/07/96:
  *  - implemented FDSETPRM and FDDEFPRM ioctl
  *
+ * Andreas (97/03/19):
+ *  - implemented missing BLK* ioctls
+ *
  *  Things left to do:
  *   - Formatting
  *   - Maybe a better strategy for disk change detection (does anyone
@@ -1584,6 +1587,7 @@
 	drive &= 3;
 	switch (cmd) {
 	case FDGETPRM:
+	case BLKGETSIZE:
 		if (type) {
 			if (--type >= NUM_DISK_MINORS)
 				return -ENODEV;
@@ -1601,6 +1605,9 @@
 			else
 				dtp = UDT;
 		}
+		if (cmd == BLKGETSIZE)
+			return put_user(dtp->blocks, (long *)param);
+
 		memset((void *)&getprm, 0, sizeof(getprm));
 		getprm.size = dtp->blocks;
 		getprm.sect = dtp->spt;
@@ -1609,6 +1616,22 @@
 		getprm.stretch = dtp->stretch;
 		if (copy_to_user((void *)param, &getprm, sizeof(getprm)))
 			return -EFAULT;
+		return 0;
+	case BLKRASET:
+		if (!suser())
+			return -EACCES;
+		if (param > 0xff)
+			return -EINVAL;
+		read_ahead[MAJOR(inode->i_rdev)] = param;
+		return 0;
+	case BLKRAGET:
+		return put_user(read_ahead[MAJOR(inode->i_rdev)],
+				(int *) param);
+	case BLKFLSBUF:
+		if (!suser())
+			return -EACCES;
+		fsync_dev(inode->i_rdev);
+		invalidate_buffers(inode->i_rdev);
 		return 0;
 	}
 	if (!IOCTL_ALLOWED)
