|
@@ -92,34 +92,28 @@ static int DAC960_open(struct inode *inode, struct file *file)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int DAC960_ioctl(struct inode *inode, struct file *file,
|
|
|
- unsigned int cmd, unsigned long arg)
|
|
|
+static int DAC960_getgeo(struct block_device *bdev, struct hd_geometry *geo)
|
|
|
{
|
|
|
- struct gendisk *disk = inode->i_bdev->bd_disk;
|
|
|
+ struct gendisk *disk = bdev->bd_disk;
|
|
|
DAC960_Controller_T *p = disk->queue->queuedata;
|
|
|
int drive_nr = (long)disk->private_data;
|
|
|
- struct hd_geometry g;
|
|
|
- struct hd_geometry __user *loc = (struct hd_geometry __user *)arg;
|
|
|
-
|
|
|
- if (cmd != HDIO_GETGEO || !loc)
|
|
|
- return -EINVAL;
|
|
|
|
|
|
if (p->FirmwareType == DAC960_V1_Controller) {
|
|
|
- g.heads = p->V1.GeometryTranslationHeads;
|
|
|
- g.sectors = p->V1.GeometryTranslationSectors;
|
|
|
- g.cylinders = p->V1.LogicalDriveInformation[drive_nr].
|
|
|
- LogicalDriveSize / (g.heads * g.sectors);
|
|
|
+ geo->heads = p->V1.GeometryTranslationHeads;
|
|
|
+ geo->sectors = p->V1.GeometryTranslationSectors;
|
|
|
+ geo->cylinders = p->V1.LogicalDriveInformation[drive_nr].
|
|
|
+ LogicalDriveSize / (geo->heads * geo->sectors);
|
|
|
} else {
|
|
|
DAC960_V2_LogicalDeviceInfo_T *i =
|
|
|
p->V2.LogicalDeviceInformation[drive_nr];
|
|
|
switch (i->DriveGeometry) {
|
|
|
case DAC960_V2_Geometry_128_32:
|
|
|
- g.heads = 128;
|
|
|
- g.sectors = 32;
|
|
|
+ geo->heads = 128;
|
|
|
+ geo->sectors = 32;
|
|
|
break;
|
|
|
case DAC960_V2_Geometry_255_63:
|
|
|
- g.heads = 255;
|
|
|
- g.sectors = 63;
|
|
|
+ geo->heads = 255;
|
|
|
+ geo->sectors = 63;
|
|
|
break;
|
|
|
default:
|
|
|
DAC960_Error("Illegal Logical Device Geometry %d\n",
|
|
@@ -127,12 +121,11 @@ static int DAC960_ioctl(struct inode *inode, struct file *file,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- g.cylinders = i->ConfigurableDeviceSize / (g.heads * g.sectors);
|
|
|
+ geo->cylinders = i->ConfigurableDeviceSize /
|
|
|
+ (geo->heads * geo->sectors);
|
|
|
}
|
|
|
|
|
|
- g.start = get_start_sect(inode->i_bdev);
|
|
|
-
|
|
|
- return copy_to_user(loc, &g, sizeof g) ? -EFAULT : 0;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int DAC960_media_changed(struct gendisk *disk)
|
|
@@ -157,7 +150,7 @@ static int DAC960_revalidate_disk(struct gendisk *disk)
|
|
|
static struct block_device_operations DAC960_BlockDeviceOperations = {
|
|
|
.owner = THIS_MODULE,
|
|
|
.open = DAC960_open,
|
|
|
- .ioctl = DAC960_ioctl,
|
|
|
+ .getgeo = DAC960_getgeo,
|
|
|
.media_changed = DAC960_media_changed,
|
|
|
.revalidate_disk = DAC960_revalidate_disk,
|
|
|
};
|