All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Garzik <jgarzik@pobox.com>
To: Tobias Lorenz <tobias.lorenz@gmx.net>
Cc: Boris Buchheimer <boris@buchheimer.de>,
	"linux-ide@vger.kernel.org" <linux-ide@vger.kernel.org>
Subject: Re: Promise FastTrak TX4000 (pdc20619), hdparm support for libata, smart
Date: Thu, 21 Oct 2004 19:35:35 -0400	[thread overview]
Message-ID: <417847C7.9000509@pobox.com> (raw)
In-Reply-To: <1098304343.30313.13.camel@server.lorenz.priv>

Tobias Lorenz wrote:


(copied to linux-ide@vger.kernel.org, where the ATA hackers hang out)


> based on linux-2.6.9 + your 2.6.9-libata1-dev1.patch, we made a patch to
> support the Promise FastTrak TX4000 4-port PATA hardware raid
> controller. It is very similar to the sata_promise.c driver, so we added
> the support there.
> 
> We also started to support information tranfer via the hd_driveid
> structure to the hdparm utility in the libata layer. At the moment, we
> only transfer cylinders, sectors, heads, model and firmware version. Our
> intention was to display the supported and the used UDMA mode(s), but we
> didn't find the correct structures yet to get these infos...
> 
> Finally, we tried to use the smart utilities. That's also the reason, we
> we choose your development patch. We found out, that smartctl from the
> smartsuite package, uses scsi-3 smart commands, when trying to access a
> scsi disk device (/dev/sd?). That makes smart access with that utility
> not working. Then we used ide-smart from the ide-smart package. It
> always uses ide smart commands, also to scsi disk devices, and that
> makes it working.
> 
> I hope you include that patch and it get's added to the linux kernel. I
> would be happy to see my name somewhere there. :-)

I would be happy to facilitate that...  libata contributors are always 
welcome.  ;-)


> Todo is just to change/complete the description of the driver and to add
> us to the Changelog/Credits/History/... section(s).

This is pretty good stuff.

I would request that you work with me a bit, as I would like you to make 
a few minor changes.

Comments:

1) [administrivia]  Please submit patches to linux-ide@vger.kernel.org 
and jgarzik@pobox.com email addresses.

2) [administrivia]  There is a standard email format for patches, which 
makes it easier to merge your Linux kernel changes, that I request you 
use.  Details:
	http://linux.yyz.us/patch-format.html
	http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt

In particular we request a "signed-off-by: ..." line accompany each 
patch and patch description.


> ------------------------------------------------------------------------
> 
> --- linux-2.6.9/drivers/scsi/libata-scsi.c	2004-10-20 22:07:50.000000000 +0200
> +++ linux-2.6.7-patched/drivers/scsi/libata-scsi.c	2004-10-20 19:25:15.000000000 +0200
> @@ -215,6 +215,17 @@
>  	struct ata_port *ap;
>  	struct ata_device *dev;
>  	int val = -EINVAL, rc = -EINVAL;
> +	struct hd_driveid drv_id = {
> +		.cyls		= 0,
> +		.sectors	= 0,
> +		.heads		= 0,
> +		.fw_rev		= "",
> +		.model		= "",
> +		.cur_cyls	= 0,
> +		.cur_heads	= 0,
> +		.cur_sectors	= 0,
> +	};
> +	int geom[3];
>  
>  	ap = (struct ata_port *) &scsidev->host->hostdata[0];
   	if (!ap)
> @@ -249,7 +260,25 @@
>  			return -EACCES;
>  		return ata_task_ioctl(scsidev, arg);
>  
> +	case HDIO_GET_MULTCOUNT:
> +		printk("HDIO_GET_MULTCOUNT not yet implemented\n");
> +		rc = -EOPNOTSUPP;
> +		break;
> +
> +	case HDIO_GET_IDENTITY:
> +		ata_std_bios_param(scsidev, NULL, dev->n_sectors, geom);
> +		drv_id.cur_heads	= drv_id.heads		= geom[0];
> +		drv_id.cur_sectors	= drv_id.sectors	= geom[1];
> +		drv_id.cur_cyls		= drv_id.cyls		= geom[2];
> +		strncpy((char *) &drv_id.model, scsidev->model, sizeof(drv_id.model));
> +		strncpy((char *) &drv_id.fw_rev, scsidev->rev, sizeof(drv_id.fw_rev));
> +		if(copy_to_user((char *) arg, (char *) &drv_id,
> +				 sizeof(drv_id)))
> +			return(-EFAULT);
> +		return 0;
> +		
>  	default:
> +		printk("command was: %#x\n", cmd);
>  		rc = -EOPNOTSUPP;
>  		break;

3) Since the default return value is EOPNOTSUPP, I would rather not 
include a "not implemented yet" implementation :)  So, please remove the 
HDIO_GET_MULTCOUNT part of the patch.

4) Also, per the "split up logical changes" standard, please send this 
change in a separate patch (and separate email).


> -static struct pci_device_id pdc_sata_pci_tbl[] = {
> -	{ PCI_VENDOR_ID_PROMISE, 0x3371, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
> +static struct pci_device_id pdc_ata_pci_tbl[] = {
> +	{ PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20371, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
>  	  board_2037x },
> -	{ PCI_VENDOR_ID_PROMISE, 0x3373, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
> +	{ PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20373, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
>  	  board_2037x },
> -	{ PCI_VENDOR_ID_PROMISE, 0x3375, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
> +	{ PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20375, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
>  	  board_2037x },
> -	{ PCI_VENDOR_ID_PROMISE, 0x3376, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
> +	{ PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20376, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
>  	  board_2037x },
> -	{ PCI_VENDOR_ID_PROMISE, 0x3318, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
> +	{ PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20318, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
>  	  board_20319 },
> -	{ PCI_VENDOR_ID_PROMISE, 0x3319, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
> +	{ PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20319, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
>  	  board_20319 },
> +	{ PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20619, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
> +	  board_20619 },

5) [style]  While your patch _is_ 100% correct, my own personal feeling 
is that PCI device ids have very little value as constants in 
include/linux/pci_ids.h.  Therefore, I actually prefer to use the 
hexidecimal constant rather than a named constant.

6) [summary]  Overall, I do not see any bugs or problems in your 
sata_promise patch.  However...  I need to ponder a "human" question... 
  does it make sense to add support for a PATA controller to a module 
named 'sata_promise'?

I wish to avoid code duplication of course, but this is an issue I would 
like to address.

Perhaps we could apply your patch, then rename the kernel module to 
'ata_promise'.  [we can use the MODULE_ALIAS facility to smooth the user 
transition]

	Jeff





           reply	other threads:[~2004-10-21 23:35 UTC|newest]

Thread overview: expand[flat|nested]  mbox.gz  Atom feed
 [parent not found: <1098304343.30313.13.camel@server.lorenz.priv>]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=417847C7.9000509@pobox.com \
    --to=jgarzik@pobox.com \
    --cc=boris@buchheimer.de \
    --cc=linux-ide@vger.kernel.org \
    --cc=tobias.lorenz@gmx.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.