scsi: megaraid_sas - added bios_param in scsi_host_template
Subsystems (2)
PATCH 2/6 scsi: megaraid_sas - added bios_param in scsi_host_template
Added bios_param in scsi_host_template to return disk geometry.
Signed-off-by Sumant Patro <[email protected]>
--- drivers/scsi/megaraid/megaraid_sas.c | 45 +++++++++++++++++++++++++ 1 files changed, 45 insertions(+)
Resubmitting with following changes : ulong -> unsigned long, removed type-casting in size comparison of > 1Gb
drivers/scsi/megaraid/megaraid_sas.c +45 -0
@@ -35,6 +35,7 @@#include <asm/uaccess.h> #include <linux/fs.h> #include <linux/compat.h> +#include <linux/blkdev.h> #include <linux/mutex.h> #include <scsi/scsi.h>
@@ -1015,6 +1016,49 @@ static int megasas_reset_bus_host(struct }/** +* megasas_bios_param - Returns disk geometry for a disk +* @sdev: device handle +* @bdev: block device +* @capacity: drive capacity +* @geom: geometry parameters +*/ +static int +megasas_bios_param (struct scsi_device *sdev,struct block_device *bdev, +sector_t capacity,int geom[]) +{ +int heads; +int sectors; +sector_t cylinders; +unsigned long tmp; +/* Default heads (64) & sectors (32) */ + heads =64 ; + sectors =32 ; + + tmp = heads * sectors; + cylinders = capacity; + +sector_div (cylinders, tmp); + +/* +* Handle extended translation size for logical drives > 1Gb +*/ + +if (capacity >=0x200000 ) { + heads =255 ; + sectors =63 ; + tmp = heads*sectors; + cylinders = capacity; +sector_div (cylinders, tmp); + } + + geom[0 ] = heads; + geom[1 ] = sectors; + geom[2 ] = cylinders; + +return 0 ; +} + +/** * megasas_service_aen - Processes an event notification * @instance: Adapter soft state * @cmd: AEN command completed by the ISR
@@ -1054,6 +1098,7 @@ static struct scsi_host_template megasas .eh_device_reset_handler = megasas_reset_device, .eh_bus_reset_handler = megasas_reset_bus_host, .eh_host_reset_handler = megasas_reset_bus_host, + .bios_param = megasas_bios_param, .use_clustering = ENABLE_CLUSTERING, };