diff options
Diffstat (limited to 'drivers/block/sx8.c')
-rw-r--r-- | drivers/block/sx8.c | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/drivers/block/sx8.c b/drivers/block/sx8.c index 9251f4131b53..c0cdc182a8b0 100644 --- a/drivers/block/sx8.c +++ b/drivers/block/sx8.c | |||
@@ -407,8 +407,7 @@ struct carm_array_info { | |||
407 | 407 | ||
408 | static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent); | 408 | static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent); |
409 | static void carm_remove_one (struct pci_dev *pdev); | 409 | static void carm_remove_one (struct pci_dev *pdev); |
410 | static int carm_bdev_ioctl(struct inode *ino, struct file *fil, | 410 | static int carm_bdev_getgeo(struct block_device *bdev, struct hd_geometry *geo); |
411 | unsigned int cmd, unsigned long arg); | ||
412 | 411 | ||
413 | static struct pci_device_id carm_pci_tbl[] = { | 412 | static struct pci_device_id carm_pci_tbl[] = { |
414 | { PCI_VENDOR_ID_PROMISE, 0x8000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, }, | 413 | { PCI_VENDOR_ID_PROMISE, 0x8000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, }, |
@@ -426,7 +425,7 @@ static struct pci_driver carm_driver = { | |||
426 | 425 | ||
427 | static struct block_device_operations carm_bd_ops = { | 426 | static struct block_device_operations carm_bd_ops = { |
428 | .owner = THIS_MODULE, | 427 | .owner = THIS_MODULE, |
429 | .ioctl = carm_bdev_ioctl, | 428 | .getgeo = carm_bdev_getgeo, |
430 | }; | 429 | }; |
431 | 430 | ||
432 | static unsigned int carm_host_id; | 431 | static unsigned int carm_host_id; |
@@ -434,32 +433,14 @@ static unsigned long carm_major_alloc; | |||
434 | 433 | ||
435 | 434 | ||
436 | 435 | ||
437 | static int carm_bdev_ioctl(struct inode *ino, struct file *fil, | 436 | static int carm_bdev_getgeo(struct block_device *bdev, struct hd_geometry *geo) |
438 | unsigned int cmd, unsigned long arg) | ||
439 | { | 437 | { |
440 | void __user *usermem = (void __user *) arg; | 438 | struct carm_port *port = bdev->bd_disk->private_data; |
441 | struct carm_port *port = ino->i_bdev->bd_disk->private_data; | ||
442 | struct hd_geometry geom; | ||
443 | 439 | ||
444 | switch (cmd) { | 440 | geo->heads = (u8) port->dev_geom_head; |
445 | case HDIO_GETGEO: | 441 | geo->sectors = (u8) port->dev_geom_sect; |
446 | if (!usermem) | 442 | geo->cylinders = port->dev_geom_cyl; |
447 | return -EINVAL; | 443 | return 0; |
448 | |||
449 | geom.heads = (u8) port->dev_geom_head; | ||
450 | geom.sectors = (u8) port->dev_geom_sect; | ||
451 | geom.cylinders = port->dev_geom_cyl; | ||
452 | geom.start = get_start_sect(ino->i_bdev); | ||
453 | |||
454 | if (copy_to_user(usermem, &geom, sizeof(geom))) | ||
455 | return -EFAULT; | ||
456 | return 0; | ||
457 | |||
458 | default: | ||
459 | break; | ||
460 | } | ||
461 | |||
462 | return -EOPNOTSUPP; | ||
463 | } | 444 | } |
464 | 445 | ||
465 | static const u32 msg_sizes[] = { 32, 64, 128, CARM_MSG_SIZE }; | 446 | static const u32 msg_sizes[] = { 32, 64, 128, CARM_MSG_SIZE }; |