RE: [PATCH 2/2] - mptfusion - FC Transport Support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



To be honest, if I could have killed it (target-based object
in sysfs), I would have as part of the FC transport rework. There was
unfortunately too many app side things (udev, etc) that refer to it.
This object is really a lame-duck.

If you want real FC transport support, be sure to support all the new
host attributes, and the remote port infrastructure as well.

-- james

> -----Original Message-----
> From: linux-scsi-owner@xxxxxxxxxxxxxxx
> [mailto:linux-scsi-owner@xxxxxxxxxxxxxxx]On Behalf Of Moore, Eric Dean
> Sent: Friday, June 24, 2005 2:19 PM
> To: linux scsi
> Cc: James Bottomley
> Subject: [PATCH 2/2] - mptfusion - FC Transport Support
> 
> 
> Adding FC transport support in driver.
> 
> Target Attributes:
> 	port_id
> 	port_name
> 	node_name
> 
> Signed-off-by: Eric Moore <Eric.Moore@xxxxxxxx>
> 
> diff -uarN b/drivers/message/fusion/Kconfig 
> a/drivers/message/fusion/Kconfig
> --- b/drivers/message/fusion/Kconfig	2005-05-10 
> 15:01:27.000000000 -0600
> +++ a/drivers/message/fusion/Kconfig	2005-06-23 
> 17:07:37.000000000 -0600
> @@ -23,6 +23,7 @@
>  	tristate "Fusion MPT ScsiHost drivers for FC"
>  	depends on PCI && SCSI
>  	select FUSION
> +	select SCSI_FC_ATTRS
>  	---help---
>  	  SCSI HOST support for a Fiber Channel host adapters.
>  
> diff -uarN b/drivers/message/fusion/mptbase.h 
> a/drivers/message/fusion/mptbase.h
> --- b/drivers/message/fusion/mptbase.h	2005-06-24 
> 11:57:37.000000000 -0600
> +++ a/drivers/message/fusion/mptbase.h	2005-06-24 
> 12:02:47.000000000 -0600
> @@ -76,8 +76,8 @@
>  #define COPYRIGHT	"Copyright (c) 1999-2005 " MODULEAUTHOR
>  #endif
>  
> -#define MPT_LINUX_VERSION_COMMON	"3.03.02"
> -#define MPT_LINUX_PACKAGE_NAME		"@(#)mptlinux-3.03.02"
> +#define MPT_LINUX_VERSION_COMMON	"3.03.03"
> +#define MPT_LINUX_PACKAGE_NAME		"@(#)mptlinux-3.03.03"
>  #define WHAT_MAGIC_STRING		"@" "(" "#" ")"
>  
>  #define show_mptmod_ver(s,ver)  \
> diff -uarN b/drivers/message/fusion/mptfc.c 
> a/drivers/message/fusion/mptfc.c
> --- b/drivers/message/fusion/mptfc.c	2005-06-23 
> 15:09:00.000000000 -0600
> +++ a/drivers/message/fusion/mptfc.c	2005-06-23 
> 17:11:52.000000000 -0600
> @@ -61,6 +61,8 @@
>  #include <scsi/scsi_device.h>
>  #include <scsi/scsi_host.h>
>  #include <scsi/scsi_tcq.h>
> +#include <scsi/scsi_transport.h>
> +#include <scsi/scsi_transport_fc.h>
>  
>  #include "mptbase.h"
>  #include "mptscsih.h"
> @@ -83,6 +85,80 @@
>  static int	mptfcTaskCtx = -1;
>  static int	mptfcInternalCtx = -1; /* Used only for 
> internal commands */
>  
> +static struct scsi_transport_template 
> *mptfc_transport_template = NULL;
> +
> +static void
> +mptfc_get_port_id(struct scsi_target *starget)
> +{
> +	struct Scsi_Host *host = dev_to_shost(starget->dev.parent);
> +	MPT_SCSI_HOST	*hd;
> +	MPT_ADAPTER 	*ioc;
> +	FCDevicePage0_t fcDevicePage;
> +	int rc;
> +
> +	fc_starget_port_id(starget) = -1;
> +	hd = (MPT_SCSI_HOST *)host->hostdata;
> +	if (hd==NULL)
> +		return;
> +	ioc = hd->ioc;
> +	rc = mptscsih_readFCDevicePage0(ioc, starget->channel, 
> starget->id, &fcDevicePage);
> +	if (rc > offsetof(FCDevicePage0_t,Protocol))
> +		fc_starget_port_id(starget) = 
> le64_to_cpu(fcDevicePage.PortIdentifier);
> +}
> +
> +static void
> +mptfc_get_port_name(struct scsi_target *starget)
> +{
> +	struct Scsi_Host *host = dev_to_shost(starget->dev.parent);
> +	MPT_SCSI_HOST	*hd;
> +	MPT_ADAPTER 	*ioc;
> +	FCDevicePage0_t fcDevicePage;
> +	int rc;
> +
> +	fc_starget_port_name(starget) = -1;
> +	hd = (MPT_SCSI_HOST *)host->hostdata;
> +	if (hd==NULL)
> +		return;
> +	ioc = hd->ioc;
> +	rc = mptscsih_readFCDevicePage0(ioc, starget->channel, 
> starget->id, &fcDevicePage);
> +	if (rc > offsetof(FCDevicePage0_t,PortIdentifier)) {
> +		
> memcpy(&fc_starget_port_name(starget),&fcDevicePage.WWPN,
> +		    sizeof(fcDevicePage.WWPN));
> +		le64_to_cpus(&fc_starget_port_name(starget));
> +	}
> +}
> +
> +static void
> +mptfc_get_node_name(struct scsi_target *starget)
> +{
> +	struct Scsi_Host *host = dev_to_shost(starget->dev.parent);
> +	MPT_SCSI_HOST	*hd;
> +	MPT_ADAPTER 	*ioc;
> +	FCDevicePage0_t fcDevicePage;
> +	int rc;
> +
> +	fc_starget_node_name(starget) = -1;
> +	hd = (MPT_SCSI_HOST *)host->hostdata;
> +	if (hd==NULL)
> +		return;
> +	ioc = hd->ioc;
> +	rc = mptscsih_readFCDevicePage0(ioc, starget->channel, 
> starget->id, &fcDevicePage);
> +	if (rc > offsetof(FCDevicePage0_t,WWPN)) {
> +		
> memcpy(&fc_starget_node_name(starget),&fcDevicePage.WWNN,
> +		    sizeof(fcDevicePage.WWNN));
> +		le64_to_cpus(&fc_starget_node_name(starget));
> +	}
> +}
> +
> +static struct fc_function_template mptfc_transport_functions = {
> +	.get_starget_port_id = mptfc_get_port_id,
> +	.show_starget_port_id = 1,
> +	.get_starget_port_name = mptfc_get_port_name,
> +	.show_starget_port_name = 1,
> +	.get_starget_node_name = mptfc_get_node_name,
> +	.show_starget_node_name = 1,
> +};
> +
>  static struct scsi_host_template mptfc_driver_template = {
>  	.proc_name			= "mptfc",
>  	.proc_info			= mptscsih_proc_info,
> @@ -220,6 +296,9 @@
>  	sh->max_channel = 0;
>  	sh->this_id = ioc->pfacts[0].PortSCSIID;
>  
> +	BUG_ON(mptfc_transport_template == NULL);
> +	sh->transportt = mptfc_transport_template;
> +
>  	/* Required entry.
>  	 */
>  	sh->unique_id = ioc->id;
> @@ -373,6 +452,11 @@
>  
>  	show_mptmod_ver(my_NAME, my_VERSION);
>  
> +	mptfc_transport_template =
> +	    fc_attach_transport(&mptfc_transport_functions);
> +	if (!mptfc_transport_template)
> +		return -ENODEV;
> +
>  	mptfcDoneCtx = mpt_register(mptscsih_io_done, MPTFC_DRIVER);
>  	mptfcTaskCtx = mpt_register(mptscsih_taskmgmt_complete, 
> MPTFC_DRIVER);
>  	mptfcInternalCtx = 
> mpt_register(mptscsih_scandv_complete, MPTFC_DRIVER);
> @@ -400,7 +484,9 @@
>  mptfc_exit(void)
>  {
>  	pci_unregister_driver(&mptfc_driver);
> -	
> +
> +	fc_release_transport(mptfc_transport_template);
> +
>  	mpt_reset_deregister(mptfcDoneCtx);
>  	dprintk((KERN_INFO MYNAM
>  	  ": Deregistered for IOC reset notifications\n"));
> diff -uarN b/drivers/message/fusion/mptscsih.c 
> a/drivers/message/fusion/mptscsih.c
> --- b/drivers/message/fusion/mptscsih.c	2005-06-24 
> 11:55:06.000000000 -0600
> +++ a/drivers/message/fusion/mptscsih.c	2005-06-24 
> 12:00:06.000000000 -0600
> @@ -944,6 +944,70 @@
>  
>  
> /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> =-=-=-=-=-=-=-=*/
>  /*
> + *	mptscsih_readFCDevicePage0 - returns FC Device Page 0 data
> + *	@ioc: Pointer to MPT_ADAPTER structure
> + *	@bus: bus id
> + *	@targetId: target id
> + *	@fcDevicePage: FC Device Page 0 data
> + *
> + *	Returns count of number bytes copied into @fcDevicePage
> + *
> + */
> +
> +int
> +mptscsih_readFCDevicePage0(MPT_ADAPTER *ioc, u8 bus, u8 
> targetId, pFCDevicePage0_t fcDevicePage)
> +{
> +	ConfigPageHeader_t	 hdr;
> +	CONFIGPARMS		 cfg;
> +	pFCDevicePage0_t	 ppage0_alloc;
> +	dma_addr_t		 page0_dma;
> +	int			 data_sz;
> +	int			 copy_sz=0;
> +	int			 rc;
> +
> +	/* Get FCPort Page 0 header */
> +	hdr.PageVersion = 0;
> +	hdr.PageLength = 0;
> +	hdr.PageNumber = 0;
> +	hdr.PageType = MPI_CONFIG_PAGETYPE_FC_DEVICE;
> +	cfg.hdr = &hdr;
> +	cfg.physAddr = -1;
> +	cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
> +	cfg.dir = 0;
> +
> +	cfg.pageAddr = (bus << 8) + targetId + 
> MPI_FC_DEVICE_PGAD_FORM_BUS_TID;
> +	cfg.timeout = 0;
> +
> +	if ((rc = mpt_config(ioc, &cfg)) != 0)
> +		return 0;
> +
> +	if (hdr.PageLength == 0)
> +		return 0;
> +
> +	data_sz = hdr.PageLength * 4;
> +	rc = -ENOMEM;
> +	ppage0_alloc = (pFCDevicePage0_t ) 
> pci_alloc_consistent(ioc->pcidev,
> +	    data_sz, &page0_dma);
> +	if (ppage0_alloc) {
> +		memset((u8 *)ppage0_alloc, 0, data_sz);
> +		cfg.physAddr = page0_dma;
> +		cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
> +
> +		if ((rc = mpt_config(ioc, &cfg)) == 0) {
> +			/* save the data */
> +			copy_sz = min_t(int, 
> sizeof(FCDevicePage0_t), data_sz);
> +			memcpy(fcDevicePage, ppage0_alloc, copy_sz);
> +		}
> +
> +		pci_free_consistent(ioc->pcidev, data_sz, (u8 
> *) ppage0_alloc,
> +		    page0_dma);
> +	}
> +
> +	return copy_sz;
> +}
> +
> +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> -=-=-=-=-=-=-=-=*/
> +/*
>   *	mptscsih_remove - Removed scsi devices
>   *	@pdev: Pointer to pci_dev structure
>   *
> @@ -5582,6 +5646,7 @@
>  EXPORT_SYMBOL(mptscsih_event_process);
>  EXPORT_SYMBOL(mptscsih_ioc_reset);
>  EXPORT_SYMBOL(mptscsih_change_queue_depth);
> +EXPORT_SYMBOL(mptscsih_readFCDevicePage0);
>  EXPORT_SYMBOL(mptscsih_timer_expired);
>  
>  
> /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> =-=-=-=-=-=-=-=*/
> diff -uarN b/drivers/message/fusion/mptscsih.h 
> a/drivers/message/fusion/mptscsih.h
> --- b/drivers/message/fusion/mptscsih.h	2005-06-23 
> 14:50:34.000000000 -0600
> +++ a/drivers/message/fusion/mptscsih.h	2005-06-23 
> 16:52:46.000000000 -0600
> @@ -105,3 +105,4 @@
>  extern int mptscsih_ioc_reset(MPT_ADAPTER *ioc, int post_reset);
>  extern int mptscsih_change_queue_depth(struct scsi_device 
> *sdev, int qdepth);
>  extern void mptscsih_timer_expired(unsigned long data);
> +extern int mptscsih_readFCDevicePage0(MPT_ADAPTER *ioc, u8 
> bus, u8 targetId, pFCDevicePage0_t fcDevicePage);
> -
> : send the line "unsubscribe 
> linux-scsi" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
-
: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux