From 5d396b316f35eb905c45d84a2d79f91ac8b02306 Mon Sep 17 00:00:00 2001 From: Sumant Patro Date: Wed, 14 Feb 2007 12:41:55 -0800 Subject: [PATCH] --- yaml --- r: 49111 b: refs/heads/master c: cf62a0a543fbab15286509d2e04e3dcf5549e966 h: refs/heads/master i: 49109: 6db178a785bc1482c299998ec0dccf76c8052e7e 49107: 77d41c15095749cfcedf9b0f9be8e940028af53c 49103: 530dedd89669b22903417e6c77f829fbeae4f094 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/megaraid/megaraid_sas.c | 45 ++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 010ab410ca78..b15242ac5cd7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: af37acfb63d8e924550e67b884dbd1c478e26c96 +refs/heads/master: cf62a0a543fbab15286509d2e04e3dcf5549e966 diff --git a/trunk/drivers/scsi/megaraid/megaraid_sas.c b/trunk/drivers/scsi/megaraid/megaraid_sas.c index 6ff540140807..9c5e4da5a132 100644 --- a/trunk/drivers/scsi/megaraid/megaraid_sas.c +++ b/trunk/drivers/scsi/megaraid/megaraid_sas.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -1014,6 +1015,49 @@ static int megasas_reset_bus_host(struct scsi_cmnd *scmd) return ret; } +/** + * 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 @@ -1054,6 +1098,7 @@ static struct scsi_host_template megasas_template = { .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, };