scsi: mpi3mr: Add bios_param SCSI host template hook
authorKashyap Desai <kashyap.desai@broadcom.com>
Thu, 20 May 2021 15:25:33 +0000 (20:55 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 2 Jun 2021 04:56:16 +0000 (00:56 -0400)
Link: https://lore.kernel.org/r/20210520152545.2710479-13-kashyap.desai@broadcom.com
Cc: sathya.prakash@broadcom.com
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpi3mr/mpi3mr_os.c

index 21e2ac4..8d895e4 100644 (file)
@@ -2051,6 +2051,46 @@ static int mpi3mr_build_sg_scmd(struct mpi3mr_ioc *mrioc,
 }
 
 /**
+ * mpi3mr_bios_param - BIOS param callback
+ * @sdev: SCSI device reference
+ * @bdev: Block device reference
+ * @capacity: Capacity in logical sectors
+ * @params: Parameter array
+ *
+ * Just the parameters with heads/secots/cylinders.
+ *
+ * Return: 0 always
+ */
+static int mpi3mr_bios_param(struct scsi_device *sdev,
+       struct block_device *bdev, sector_t capacity, int params[])
+{
+       int heads;
+       int sectors;
+       sector_t cylinders;
+       ulong dummy;
+
+       heads = 64;
+       sectors = 32;
+
+       dummy = heads * sectors;
+       cylinders = capacity;
+       sector_div(cylinders, dummy);
+
+       if ((ulong)capacity >= 0x200000) {
+               heads = 255;
+               sectors = 63;
+               dummy = heads * sectors;
+               cylinders = capacity;
+               sector_div(cylinders, dummy);
+       }
+
+       params[0] = heads;
+       params[1] = sectors;
+       params[2] = cylinders;
+       return 0;
+}
+
+/**
  * mpi3mr_map_queues - Map queues callback handler
  * @shost: SCSI host reference
  *
@@ -2493,6 +2533,7 @@ static struct scsi_host_template mpi3mr_driver_template = {
        .slave_destroy                  = mpi3mr_slave_destroy,
        .scan_finished                  = mpi3mr_scan_finished,
        .scan_start                     = mpi3mr_scan_start,
+       .bios_param                     = mpi3mr_bios_param,
        .map_queues                     = mpi3mr_map_queues,
        .no_write_same                  = 1,
        .can_queue                      = 1,