Commit 84cbd722 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull first round of SCSI updates from James Bottomley:
 "The patch set is mostly driver updates (usf, zfcp, lpfc, mpt2sas,
  megaraid_sas, bfa, ipr) and a few bug fixes.  Also of note is that the
  Buslogic driver has been rewritten to a better coding style and 64 bit
  support added.  We also removed the libsas limitation on 16 bytes for
  the command size (currently no drivers make use of this)"

* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (101 commits)
  [SCSI] megaraid: minor cut and paste error fixed.
  [SCSI] ufshcd-pltfrm: remove unnecessary dma_set_coherent_mask() call
  [SCSI] ufs: fix register address in UIC error interrupt handling
  [SCSI] ufshcd-pltfrm: add missing empty slot in ufs_of_match[]
  [SCSI] ufs: use devres functions for ufshcd
  [SCSI] ufs: Fix the response UPIU length setting
  [SCSI] ufs: rework link start-up process
  [SCSI] ufs: remove version check before IS reg clear
  [SCSI] ufs: amend interrupt configuration
  [SCSI] ufs: wrap the i/o access operations
  [SCSI] storvsc: Update the storage protocol to win8 level
  [SCSI] storvsc: Increase the value of scsi timeout for storvsc devices
  [SCSI] MAINTAINERS: Add myself as the maintainer for BusLogic SCSI driver
  [SCSI] BusLogic: Port driver to 64-bit.
  [SCSI] BusLogic: Fix style issues
  [SCSI] libiscsi: Added new boot entries in the session sysfs
  [SCSI] aacraid: Fix for arrays are going offline in the system. System hangs
  [SCSI] ipr: IOA Status Code(IOASC) update
  [SCSI] sd: Update WRITE SAME heuristics
  [SCSI] fnic: potential dead lock in fnic_is_abts_pending()
  ...
parents 80cc38b1 a3fda7dd
* Universal Flash Storage (UFS) Host Controller
UFSHC nodes are defined to describe on-chip UFS host controllers.
Each UFS controller instance should have its own node.
Required properties:
- compatible : compatible list, contains "jedec,ufs-1.1"
- interrupts : <interrupt mapping for UFS host controller IRQ>
- reg : <registers mapping>
Example:
ufshc@0xfc598000 {
compatible = "jedec,ufs-1.1";
reg = <0xfc598000 0x800>;
interrupts = <0 28 0>;
};
Release Date : Wed. May 15, 2013 17:00:00 PST 2013 -
(emaild-id:megaraidlinux@lsi.com)
Adam Radford
Kashyap Desai
Sumit Saxena
Current Version : 06.600.18.00-rc1
Old Version : 06.506.00.00-rc1
1. Return DID_ERROR for scsi io, when controller is in critical h/w error.
2. Fix the interrupt mask for Gen2 controller.
3. Update balance count in driver to be in sync of firmware.
4. Free event detail memory without device ID check.
5. Set IO request timeout value provided by OS timeout for Tape devices.
6. Add support for MegaRAID Fury (device ID-0x005f) 12Gb/s controllers.
7. Add support to display Customer branding details in syslog.
8. Set IoFlags to enable Fast Path for JBODs for Invader/Fury(12 Gb/s)
controllers.
9. Add support for Extended MSI-x vectors for Invader and Fury(12Gb/s
HBA).
10.Add support for Uneven Span PRL11.
11.Add support to differentiate between iMR and MR Firmware.
12.Version and Changelog update.
-------------------------------------------------------------------------------
Release Date : Sat. Feb 9, 2013 17:00:00 PST 2013 - Release Date : Sat. Feb 9, 2013 17:00:00 PST 2013 -
(emaild-id:megaraidlinux@lsi.com) (emaild-id:megaraidlinux@lsi.com)
Adam Radford Adam Radford
......
...@@ -1876,6 +1876,13 @@ S: Odd fixes ...@@ -1876,6 +1876,13 @@ S: Odd fixes
F: Documentation/video4linux/bttv/ F: Documentation/video4linux/bttv/
F: drivers/media/pci/bt8xx/bttv* F: drivers/media/pci/bt8xx/bttv*
BUSLOGIC SCSI DRIVER
M: Khalid Aziz <khalid@gonehiking.org>
L: linux-scsi@vger.kernel.org
S: Maintained
F: drivers/scsi/BusLogic.*
F: drivers/scsi/FlashPoint.*
C-MEDIA CMI8788 DRIVER C-MEDIA CMI8788 DRIVER
M: Clemens Ladisch <clemens@ladisch.de> M: Clemens Ladisch <clemens@ladisch.de>
L: alsa-devel@alsa-project.org (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Makefile for the S/390 specific device drivers # Makefile for the S/390 specific device drivers
# #
zfcp-objs := zfcp_aux.o zfcp_ccw.o zfcp_cfdc.o zfcp_dbf.o zfcp_erp.o \ zfcp-objs := zfcp_aux.o zfcp_ccw.o zfcp_dbf.o zfcp_erp.o \
zfcp_fc.o zfcp_fsf.o zfcp_qdio.o zfcp_scsi.o zfcp_sysfs.o \ zfcp_fc.o zfcp_fsf.o zfcp_qdio.o zfcp_scsi.o zfcp_sysfs.o \
zfcp_unit.o zfcp_unit.o
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Module interface and handling of zfcp data structures. * Module interface and handling of zfcp data structures.
* *
* Copyright IBM Corp. 2002, 2010 * Copyright IBM Corp. 2002, 2013
*/ */
/* /*
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
* Christof Schmitt * Christof Schmitt
* Martin Petermann * Martin Petermann
* Sven Schuetz * Sven Schuetz
* Steffen Maier
*/ */
#define KMSG_COMPONENT "zfcp" #define KMSG_COMPONENT "zfcp"
...@@ -140,13 +141,6 @@ static int __init zfcp_module_init(void) ...@@ -140,13 +141,6 @@ static int __init zfcp_module_init(void)
scsi_transport_reserve_device(zfcp_scsi_transport_template, scsi_transport_reserve_device(zfcp_scsi_transport_template,
sizeof(struct zfcp_scsi_dev)); sizeof(struct zfcp_scsi_dev));
retval = misc_register(&zfcp_cfdc_misc);
if (retval) {
pr_err("Registering the misc device zfcp_cfdc failed\n");
goto out_misc;
}
retval = ccw_driver_register(&zfcp_ccw_driver); retval = ccw_driver_register(&zfcp_ccw_driver);
if (retval) { if (retval) {
pr_err("The zfcp device driver could not register with " pr_err("The zfcp device driver could not register with "
...@@ -159,8 +153,6 @@ static int __init zfcp_module_init(void) ...@@ -159,8 +153,6 @@ static int __init zfcp_module_init(void)
return 0; return 0;
out_ccw_register: out_ccw_register:
misc_deregister(&zfcp_cfdc_misc);
out_misc:
fc_release_transport(zfcp_scsi_transport_template); fc_release_transport(zfcp_scsi_transport_template);
out_transport: out_transport:
kmem_cache_destroy(zfcp_fc_req_cache); kmem_cache_destroy(zfcp_fc_req_cache);
...@@ -175,7 +167,6 @@ module_init(zfcp_module_init); ...@@ -175,7 +167,6 @@ module_init(zfcp_module_init);
static void __exit zfcp_module_exit(void) static void __exit zfcp_module_exit(void)
{ {
ccw_driver_unregister(&zfcp_ccw_driver); ccw_driver_unregister(&zfcp_ccw_driver);
misc_deregister(&zfcp_cfdc_misc);
fc_release_transport(zfcp_scsi_transport_template); fc_release_transport(zfcp_scsi_transport_template);
kmem_cache_destroy(zfcp_fc_req_cache); kmem_cache_destroy(zfcp_fc_req_cache);
kmem_cache_destroy(zfcp_fsf_qtcb_cache); kmem_cache_destroy(zfcp_fsf_qtcb_cache);
...@@ -415,6 +406,8 @@ struct zfcp_adapter *zfcp_adapter_enqueue(struct ccw_device *ccw_device) ...@@ -415,6 +406,8 @@ struct zfcp_adapter *zfcp_adapter_enqueue(struct ccw_device *ccw_device)
adapter->dma_parms.max_segment_size = ZFCP_QDIO_SBALE_LEN; adapter->dma_parms.max_segment_size = ZFCP_QDIO_SBALE_LEN;
adapter->ccw_device->dev.dma_parms = &adapter->dma_parms; adapter->ccw_device->dev.dma_parms = &adapter->dma_parms;
adapter->stat_read_buf_num = FSF_STATUS_READS_RECOM;
if (!zfcp_scsi_adapter_register(adapter)) if (!zfcp_scsi_adapter_register(adapter))
return adapter; return adapter;
...@@ -464,20 +457,6 @@ void zfcp_adapter_release(struct kref *ref) ...@@ -464,20 +457,6 @@ void zfcp_adapter_release(struct kref *ref)
put_device(&cdev->dev); put_device(&cdev->dev);
} }
/**
* zfcp_device_unregister - remove port, unit from system
* @dev: reference to device which is to be removed
* @grp: related reference to attribute group
*
* Helper function to unregister port, unit from system
*/
void zfcp_device_unregister(struct device *dev,
const struct attribute_group *grp)
{
sysfs_remove_group(&dev->kobj, grp);
device_unregister(dev);
}
static void zfcp_port_release(struct device *dev) static void zfcp_port_release(struct device *dev)
{ {
struct zfcp_port *port = container_of(dev, struct zfcp_port, dev); struct zfcp_port *port = container_of(dev, struct zfcp_port, dev);
...@@ -530,6 +509,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, ...@@ -530,6 +509,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
port->wwpn = wwpn; port->wwpn = wwpn;
port->rport_task = RPORT_NONE; port->rport_task = RPORT_NONE;
port->dev.parent = &adapter->ccw_device->dev; port->dev.parent = &adapter->ccw_device->dev;
port->dev.groups = zfcp_port_attr_groups;
port->dev.release = zfcp_port_release; port->dev.release = zfcp_port_release;
if (dev_set_name(&port->dev, "0x%016llx", (unsigned long long)wwpn)) { if (dev_set_name(&port->dev, "0x%016llx", (unsigned long long)wwpn)) {
...@@ -543,10 +523,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, ...@@ -543,10 +523,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
goto err_out; goto err_out;
} }
if (sysfs_create_group(&port->dev.kobj,
&zfcp_sysfs_port_attrs))
goto err_out_put;
write_lock_irq(&adapter->port_list_lock); write_lock_irq(&adapter->port_list_lock);
list_add_tail(&port->list, &adapter->port_list); list_add_tail(&port->list, &adapter->port_list);
write_unlock_irq(&adapter->port_list_lock); write_unlock_irq(&adapter->port_list_lock);
...@@ -555,8 +531,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, ...@@ -555,8 +531,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
return port; return port;
err_out_put:
device_unregister(&port->dev);
err_out: err_out:
zfcp_ccw_adapter_put(adapter); zfcp_ccw_adapter_put(adapter);
return ERR_PTR(retval); return ERR_PTR(retval);
......
...@@ -71,15 +71,6 @@ static struct ccw_device_id zfcp_ccw_device_id[] = { ...@@ -71,15 +71,6 @@ static struct ccw_device_id zfcp_ccw_device_id[] = {
}; };
MODULE_DEVICE_TABLE(ccw, zfcp_ccw_device_id); MODULE_DEVICE_TABLE(ccw, zfcp_ccw_device_id);
/**
* zfcp_ccw_priv_sch - check if subchannel is privileged
* @adapter: Adapter/Subchannel to check
*/
int zfcp_ccw_priv_sch(struct zfcp_adapter *adapter)
{
return adapter->ccw_device->id.dev_model == ZFCP_MODEL_PRIV;
}
/** /**
* zfcp_ccw_probe - probe function of zfcp driver * zfcp_ccw_probe - probe function of zfcp driver
* @cdev: pointer to belonging ccw device * @cdev: pointer to belonging ccw device
...@@ -129,10 +120,10 @@ static void zfcp_ccw_remove(struct ccw_device *cdev) ...@@ -129,10 +120,10 @@ static void zfcp_ccw_remove(struct ccw_device *cdev)
zfcp_ccw_adapter_put(adapter); /* put from zfcp_ccw_adapter_by_cdev */ zfcp_ccw_adapter_put(adapter); /* put from zfcp_ccw_adapter_by_cdev */
list_for_each_entry_safe(unit, u, &unit_remove_lh, list) list_for_each_entry_safe(unit, u, &unit_remove_lh, list)
zfcp_device_unregister(&unit->dev, &zfcp_sysfs_unit_attrs); device_unregister(&unit->dev);
list_for_each_entry_safe(port, p, &port_remove_lh, list) list_for_each_entry_safe(port, p, &port_remove_lh, list)
zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); device_unregister(&port->dev);
zfcp_adapter_unregister(adapter); zfcp_adapter_unregister(adapter);
} }
......
This diff is collapsed.
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Debug traces for zfcp. * Debug traces for zfcp.
* *
* Copyright IBM Corp. 2002, 2010 * Copyright IBM Corp. 2002, 2013
*/ */
#define KMSG_COMPONENT "zfcp" #define KMSG_COMPONENT "zfcp"
...@@ -23,6 +23,13 @@ module_param(dbfsize, uint, 0400); ...@@ -23,6 +23,13 @@ module_param(dbfsize, uint, 0400);
MODULE_PARM_DESC(dbfsize, MODULE_PARM_DESC(dbfsize,
"number of pages for each debug feature area (default 4)"); "number of pages for each debug feature area (default 4)");
static u32 dbflevel = 3;
module_param(dbflevel, uint, 0400);
MODULE_PARM_DESC(dbflevel,
"log level for each debug feature area "
"(default 3, range 0..6)");
static inline unsigned int zfcp_dbf_plen(unsigned int offset) static inline unsigned int zfcp_dbf_plen(unsigned int offset)
{ {
return sizeof(struct zfcp_dbf_pay) + offset - ZFCP_DBF_PAY_MAX_REC; return sizeof(struct zfcp_dbf_pay) + offset - ZFCP_DBF_PAY_MAX_REC;
...@@ -447,7 +454,7 @@ static debug_info_t *zfcp_dbf_reg(const char *name, int size, int rec_size) ...@@ -447,7 +454,7 @@ static debug_info_t *zfcp_dbf_reg(const char *name, int size, int rec_size)
return NULL; return NULL;
debug_register_view(d, &debug_hex_ascii_view); debug_register_view(d, &debug_hex_ascii_view);
debug_set_level(d, 3); debug_set_level(d, dbflevel);
return d; return d;
} }
......
...@@ -86,10 +86,6 @@ struct zfcp_reqlist; ...@@ -86,10 +86,6 @@ struct zfcp_reqlist;
#define ZFCP_STATUS_PORT_PHYS_OPEN 0x00000001 #define ZFCP_STATUS_PORT_PHYS_OPEN 0x00000001
#define ZFCP_STATUS_PORT_LINK_TEST 0x00000002 #define ZFCP_STATUS_PORT_LINK_TEST 0x00000002
/* logical unit status */
#define ZFCP_STATUS_LUN_SHARED 0x00000004
#define ZFCP_STATUS_LUN_READONLY 0x00000008
/* FSF request status (this does not have a common part) */ /* FSF request status (this does not have a common part) */
#define ZFCP_STATUS_FSFREQ_ERROR 0x00000008 #define ZFCP_STATUS_FSFREQ_ERROR 0x00000008
#define ZFCP_STATUS_FSFREQ_CLEANUP 0x00000010 #define ZFCP_STATUS_FSFREQ_CLEANUP 0x00000010
......
...@@ -950,8 +950,7 @@ static void zfcp_erp_lun_strategy_clearstati(struct scsi_device *sdev) ...@@ -950,8 +950,7 @@ static void zfcp_erp_lun_strategy_clearstati(struct scsi_device *sdev)
{ {
struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev); struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED | atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED,
ZFCP_STATUS_LUN_SHARED | ZFCP_STATUS_LUN_READONLY,
&zfcp_sdev->status); &zfcp_sdev->status);
} }
......
...@@ -21,28 +21,14 @@ extern struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *, u64, u32, ...@@ -21,28 +21,14 @@ extern struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *, u64, u32,
u32); u32);
extern void zfcp_sg_free_table(struct scatterlist *, int); extern void zfcp_sg_free_table(struct scatterlist *, int);
extern int zfcp_sg_setup_table(struct scatterlist *, int); extern int zfcp_sg_setup_table(struct scatterlist *, int);
extern void zfcp_device_unregister(struct device *,
const struct attribute_group *);
extern void zfcp_adapter_release(struct kref *); extern void zfcp_adapter_release(struct kref *);
extern void zfcp_adapter_unregister(struct zfcp_adapter *); extern void zfcp_adapter_unregister(struct zfcp_adapter *);
/* zfcp_ccw.c */ /* zfcp_ccw.c */
extern int zfcp_ccw_priv_sch(struct zfcp_adapter *);
extern struct ccw_driver zfcp_ccw_driver; extern struct ccw_driver zfcp_ccw_driver;
extern struct zfcp_adapter *zfcp_ccw_adapter_by_cdev(struct ccw_device *); extern struct zfcp_adapter *zfcp_ccw_adapter_by_cdev(struct ccw_device *);
extern void zfcp_ccw_adapter_put(struct zfcp_adapter *); extern void zfcp_ccw_adapter_put(struct zfcp_adapter *);
/* zfcp_cfdc.c */
extern struct miscdevice zfcp_cfdc_misc;
extern void zfcp_cfdc_port_denied(struct zfcp_port *, union fsf_status_qual *);
extern void zfcp_cfdc_lun_denied(struct scsi_device *, union fsf_status_qual *);
extern void zfcp_cfdc_lun_shrng_vltn(struct scsi_device *,
union fsf_status_qual *);
extern int zfcp_cfdc_open_lun_eval(struct scsi_device *,
struct fsf_qtcb_bottom_support *);
extern void zfcp_cfdc_adapter_access_changed(struct zfcp_adapter *);
/* zfcp_dbf.c */ /* zfcp_dbf.c */
extern int zfcp_dbf_adapter_register(struct zfcp_adapter *); extern int zfcp_dbf_adapter_register(struct zfcp_adapter *);
extern void zfcp_dbf_adapter_unregister(struct zfcp_adapter *); extern void zfcp_dbf_adapter_unregister(struct zfcp_adapter *);
...@@ -117,8 +103,6 @@ extern int zfcp_fsf_exchange_config_data_sync(struct zfcp_qdio *, ...@@ -117,8 +103,6 @@ extern int zfcp_fsf_exchange_config_data_sync(struct zfcp_qdio *,
extern int zfcp_fsf_exchange_port_data(struct zfcp_erp_action *); extern int zfcp_fsf_exchange_port_data(struct zfcp_erp_action *);
extern int zfcp_fsf_exchange_port_data_sync(struct zfcp_qdio *, extern int zfcp_fsf_exchange_port_data_sync(struct zfcp_qdio *,
struct fsf_qtcb_bottom_port *); struct fsf_qtcb_bottom_port *);
extern struct zfcp_fsf_req *zfcp_fsf_control_file(struct zfcp_adapter *,
struct zfcp_fsf_cfdc *);
extern void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *); extern void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *);
extern int zfcp_fsf_status_read(struct zfcp_qdio *); extern int zfcp_fsf_status_read(struct zfcp_qdio *);
extern int zfcp_status_read_refill(struct zfcp_adapter *adapter); extern int zfcp_status_read_refill(struct zfcp_adapter *adapter);
...@@ -158,9 +142,9 @@ extern void zfcp_scsi_set_prot(struct zfcp_adapter *); ...@@ -158,9 +142,9 @@ extern void zfcp_scsi_set_prot(struct zfcp_adapter *);
extern void zfcp_scsi_dif_sense_error(struct scsi_cmnd *, int); extern void zfcp_scsi_dif_sense_error(struct scsi_cmnd *, int);
/* zfcp_sysfs.c */ /* zfcp_sysfs.c */
extern struct attribute_group zfcp_sysfs_unit_attrs; extern const struct attribute_group *zfcp_unit_attr_groups[];
extern struct attribute_group zfcp_sysfs_adapter_attrs; extern struct attribute_group zfcp_sysfs_adapter_attrs;
extern struct attribute_group zfcp_sysfs_port_attrs; extern const struct attribute_group *zfcp_port_attr_groups[];
extern struct mutex zfcp_sysfs_port_units_mutex; extern struct mutex zfcp_sysfs_port_units_mutex;
extern struct device_attribute *zfcp_sysfs_sdev_attrs[]; extern struct device_attribute *zfcp_sysfs_sdev_attrs[];
extern struct device_attribute *zfcp_sysfs_shost_attrs[]; extern struct device_attribute *zfcp_sysfs_shost_attrs[];
......
...@@ -668,7 +668,7 @@ static int zfcp_fc_eval_gpn_ft(struct zfcp_fc_req *fc_req, ...@@ -668,7 +668,7 @@ static int zfcp_fc_eval_gpn_ft(struct zfcp_fc_req *fc_req,
list_for_each_entry_safe(port, tmp, &remove_lh, list) { list_for_each_entry_safe(port, tmp, &remove_lh, list) {
zfcp_erp_port_shutdown(port, 0, "fcegpf2"); zfcp_erp_port_shutdown(port, 0, "fcegpf2");
zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); device_unregister(&port->dev);
} }
return ret; return ret;
......
This diff is collapsed.
...@@ -36,13 +36,6 @@ ...@@ -36,13 +36,6 @@
#define FSF_CONFIG_COMMAND 0x00000003 #define FSF_CONFIG_COMMAND 0x00000003
#define FSF_PORT_COMMAND 0x00000004 #define FSF_PORT_COMMAND 0x00000004
/* FSF control file upload/download operations' subtype and options */
#define FSF_CFDC_OPERATION_SUBTYPE 0x00020001
#define FSF_CFDC_OPTION_NORMAL_MODE 0x00000000
#define FSF_CFDC_OPTION_FORCE 0x00000001
#define FSF_CFDC_OPTION_FULL_ACCESS 0x00000002
#define FSF_CFDC_OPTION_RESTRICTED_ACCESS 0x00000004
/* FSF protocol states */ /* FSF protocol states */
#define FSF_PROT_GOOD 0x00000001 #define FSF_PROT_GOOD 0x00000001
#define FSF_PROT_QTCB_VERSION_ERROR 0x00000010 #define FSF_PROT_QTCB_VERSION_ERROR 0x00000010
...@@ -64,7 +57,6 @@ ...@@ -64,7 +57,6 @@
#define FSF_HANDLE_MISMATCH 0x00000005 #define FSF_HANDLE_MISMATCH 0x00000005
#define FSF_SERVICE_CLASS_NOT_SUPPORTED 0x00000006 #define FSF_SERVICE_CLASS_NOT_SUPPORTED 0x00000006
#define FSF_FCPLUN_NOT_VALID 0x00000009 #define FSF_FCPLUN_NOT_VALID 0x00000009
#define FSF_ACCESS_DENIED 0x00000010
#define FSF_LUN_SHARING_VIOLATION 0x00000012 #define FSF_LUN_SHARING_VIOLATION 0x00000012
#define FSF_FCP_COMMAND_DOES_NOT_EXIST 0x00000022 #define FSF_FCP_COMMAND_DOES_NOT_EXIST 0x00000022
#define FSF_DIRECTION_INDICATOR_NOT_VALID 0x00000030 #define FSF_DIRECTION_INDICATOR_NOT_VALID 0x00000030
...@@ -130,7 +122,6 @@ ...@@ -130,7 +122,6 @@
#define FSF_STATUS_READ_LINK_DOWN 0x00000005 #define FSF_STATUS_READ_LINK_DOWN 0x00000005
#define FSF_STATUS_READ_LINK_UP 0x00000006 #define FSF_STATUS_READ_LINK_UP 0x00000006
#define FSF_STATUS_READ_NOTIFICATION_LOST 0x00000009 #define FSF_STATUS_READ_NOTIFICATION_LOST 0x00000009
#define FSF_STATUS_READ_CFDC_UPDATED 0x0000000A
#define FSF_STATUS_READ_FEATURE_UPDATE_ALERT 0x0000000C #define FSF_STATUS_READ_FEATURE_UPDATE_ALERT 0x0000000C
/* status subtypes for link down */ /* status subtypes for link down */
...@@ -140,7 +131,6 @@ ...@@ -140,7 +131,6 @@
/* status subtypes for unsolicited status notification lost */ /* status subtypes for unsolicited status notification lost */
#define FSF_STATUS_READ_SUB_INCOMING_ELS 0x00000001 #define FSF_STATUS_READ_SUB_INCOMING_ELS 0x00000001
#define FSF_STATUS_READ_SUB_ACT_UPDATED 0x00000020
/* topologie that is detected by the adapter */ /* topologie that is detected by the adapter */
#define FSF_TOPO_P2P 0x00000001 #define FSF_TOPO_P2P 0x00000001
...@@ -166,8 +156,6 @@ ...@@ -166,8 +156,6 @@
#define FSF_QTCB_LOG_SIZE 1024 #define FSF_QTCB_LOG_SIZE 1024
/* channel features */ /* channel features */
#define FSF_FEATURE_CFDC 0x00000002
#define FSF_FEATURE_LUN_SHARING 0x00000004
#define FSF_FEATURE_NOTIFICATION_LOST 0x00000008 #define FSF_FEATURE_NOTIFICATION_LOST 0x00000008
#define FSF_FEATURE_HBAAPI_MANAGEMENT 0x00000010 #define FSF_FEATURE_HBAAPI_MANAGEMENT 0x00000010
#define FSF_FEATURE_ELS_CT_CHAINED_SBALS 0x00000020 #define FSF_FEATURE_ELS_CT_CHAINED_SBALS 0x00000020
...@@ -182,20 +170,6 @@ ...@@ -182,20 +170,6 @@
/* option */ /* option */
#define FSF_OPEN_LUN_SUPPRESS_BOXING 0x00000001 #define FSF_OPEN_LUN_SUPPRESS_BOXING 0x00000001
/* open LUN access flags*/
#define FSF_UNIT_ACCESS_EXCLUSIVE 0x02000000
#define FSF_UNIT_ACCESS_OUTBOUND_TRANSFER 0x10000000
/* FSF interface for CFDC */
#define ZFCP_CFDC_MAX_SIZE 127 * 1024
#define ZFCP_CFDC_PAGES PFN_UP(ZFCP_CFDC_MAX_SIZE)
struct zfcp_fsf_cfdc {
struct scatterlist sg[ZFCP_CFDC_PAGES];
u32 command;
u32 option;
};
struct fsf_queue_designator { struct fsf_queue_designator {
u8 cssid; u8 cssid;
u8 chpid; u8 chpid;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Interface to Linux SCSI midlayer. * Interface to Linux SCSI midlayer.
* *
* Copyright IBM Corp. 2002, 2010 * Copyright IBM Corp. 2002, 2013
*/ */
#define KMSG_COMPONENT "zfcp" #define KMSG_COMPONENT "zfcp"
...@@ -311,8 +311,12 @@ static struct scsi_host_template zfcp_scsi_host_template = { ...@@ -311,8 +311,12 @@ static struct scsi_host_template zfcp_scsi_host_template = {
.proc_name = "zfcp", .proc_name = "zfcp",
.can_queue = 4096, .can_queue = 4096,
.this_id = -1, .this_id = -1,
.sg_tablesize = 1, /* adjusted later */ .sg_tablesize = (((QDIO_MAX_ELEMENTS_PER_BUFFER - 1)
.max_sectors = 8, /* adjusted later */ * ZFCP_QDIO_MAX_SBALS_PER_REQ) - 2),
/* GCD, adjusted later */
.max_sectors = (((QDIO_MAX_ELEMENTS_PER_BUFFER - 1)
* ZFCP_QDIO_MAX_SBALS_PER_REQ) - 2) * 8,
/* GCD, adjusted later */
.dma_boundary = ZFCP_QDIO_SBALE_LEN - 1, .dma_boundary = ZFCP_QDIO_SBALE_LEN - 1,
.cmd_per_lun = 1, .cmd_per_lun = 1,
.use_clustering = 1, .use_clustering = 1,
......
...@@ -75,12 +75,6 @@ ZFCP_DEFINE_ATTR(zfcp_unit, unit, in_recovery, "%d\n", ...@@ -75,12 +75,6 @@ ZFCP_DEFINE_ATTR(zfcp_unit, unit, in_recovery, "%d\n",
ZFCP_DEFINE_ATTR(zfcp_unit, unit, access_denied, "%d\n", ZFCP_DEFINE_ATTR(zfcp_unit, unit, access_denied, "%d\n",
(zfcp_unit_sdev_status(unit) & (zfcp_unit_sdev_status(unit) &
ZFCP_STATUS_COMMON_ACCESS_DENIED) != 0); ZFCP_STATUS_COMMON_ACCESS_DENIED) != 0);
ZFCP_DEFINE_ATTR(zfcp_unit, unit, access_shared, "%d\n",
(zfcp_unit_sdev_status(unit) &
ZFCP_STATUS_LUN_SHARED) != 0);
ZFCP_DEFINE_ATTR(zfcp_unit, unit, access_readonly, "%d\n",
(zfcp_unit_sdev_status(unit) &
ZFCP_STATUS_LUN_READONLY) != 0);
static ssize_t zfcp_sysfs_port_failed_show(struct device *dev, static ssize_t zfcp_sysfs_port_failed_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
...@@ -268,7 +262,7 @@ static ssize_t zfcp_sysfs_port_remove_store(struct device *dev, ...@@ -268,7 +262,7 @@ static ssize_t zfcp_sysfs_port_remove_store(struct device *dev,
put_device(&port->dev); put_device(&port->dev);
zfcp_erp_port_shutdown(port, 0, "syprs_1"); zfcp_erp_port_shutdown(port, 0, "syprs_1");
zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); device_unregister(&port->dev);
out: out:
zfcp_ccw_adapter_put(adapter); zfcp_ccw_adapter_put(adapter);
return retval ? retval : (ssize_t) count; return retval ? retval : (ssize_t) count;
...@@ -340,27 +334,28 @@ static struct attribute *zfcp_port_attrs[] = { ...@@ -340,27 +334,28 @@ static struct attribute *zfcp_port_attrs[] = {
&dev_attr_port_access_denied.attr, &dev_attr_port_access_denied.attr,
NULL NULL
}; };
static struct attribute_group zfcp_port_attr_group = {
/**
* zfcp_sysfs_port_attrs - sysfs attributes for all other ports
*/
struct attribute_group zfcp_sysfs_port_attrs = {
.attrs = zfcp_port_attrs, .attrs = zfcp_port_attrs,
}; };
const struct attribute_group *zfcp_port_attr_groups[] = {
&zfcp_port_attr_group,
NULL,
};
static struct attribute *zfcp_unit_attrs[] = { static struct attribute *zfcp_unit_attrs[] = {
&dev_attr_unit_failed.attr, &dev_attr_unit_failed.attr,
&dev_attr_unit_in_recovery.attr, &dev_attr_unit_in_recovery.attr,
&dev_attr_unit_status.attr, &dev_attr_unit_status.attr,
&dev_attr_unit_access_denied.attr, &dev_attr_unit_access_denied.attr,
&dev_attr_unit_access_shared.attr,
&dev_attr_unit_access_readonly.attr,
NULL NULL
}; };
static struct attribute_group zfcp_unit_attr_group = {
struct attribute_group zfcp_sysfs_unit_attrs = {
.attrs = zfcp_unit_attrs, .attrs = zfcp_unit_attrs,
}; };
const struct attribute_group *zfcp_unit_attr_groups[] = {
&zfcp_unit_attr_group,
NULL,
};
#define ZFCP_DEFINE_LATENCY_ATTR(_name) \ #define ZFCP_DEFINE_LATENCY_ATTR(_name) \
static ssize_t \ static ssize_t \
......
...@@ -145,6 +145,7 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun) ...@@ -145,6 +145,7 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)
unit->fcp_lun = fcp_lun; unit->fcp_lun = fcp_lun;
unit->dev.parent = &port->dev; unit->dev.parent = &port->dev;
unit->dev.release = zfcp_unit_release; unit->dev.release = zfcp_unit_release;
unit->dev.groups = zfcp_unit_attr_groups;
INIT_WORK(&unit->scsi_work, zfcp_unit_scsi_scan_work); INIT_WORK(&unit->scsi_work, zfcp_unit_scsi_scan_work);
if (dev_set_name(&unit->dev, "0x%016llx", if (dev_set_name(&unit->dev, "0x%016llx",
...@@ -160,12 +161,6 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun) ...@@ -160,12 +161,6 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)
goto out; goto out;
} }
if (sysfs_create_group(&unit->dev.kobj, &zfcp_sysfs_unit_attrs)) {
device_unregister(&unit->dev);
retval = -EINVAL;
goto out;
}
atomic_inc(&port->units); /* under zfcp_sysfs_port_units_mutex ! */ atomic_inc(&port->units); /* under zfcp_sysfs_port_units_mutex ! */
write_lock_irq(&port->unit_list_lock); write_lock_irq(&port->unit_list_lock);
...@@ -254,7 +249,7 @@ int zfcp_unit_remove(struct zfcp_port *port, u64 fcp_lun) ...@@ -254,7 +249,7 @@ int zfcp_unit_remove(struct zfcp_port *port, u64 fcp_lun)
put_device(&unit->dev); put_device(&unit->dev);
zfcp_device_unregister(&unit->dev, &zfcp_sysfs_unit_attrs); device_unregister(&unit->dev);
return 0; return 0;
} }
...@@ -216,6 +216,7 @@ ...@@ -216,6 +216,7 @@
#include <scsi/scsi_host.h> #include <scsi/scsi_host.h>
#include <scsi/scsi_tcq.h> #include <scsi/scsi_tcq.h>
#include <scsi/scsi_cmnd.h> #include <scsi/scsi_cmnd.h>
#include <scsi/scsi_eh.h>
#include "3w-xxxx.h" #include "3w-xxxx.h"
/* Globals */ /* Globals */
...@@ -2009,7 +2010,8 @@ static int tw_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_c ...@@ -2009,7 +2010,8 @@ static int tw_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_c
printk(KERN_NOTICE "3w-xxxx: scsi%d: Unknown scsi opcode: 0x%x\n", tw_dev->host->host_no, *command); printk(KERN_NOTICE "3w-xxxx: scsi%d: Unknown scsi opcode: 0x%x\n", tw_dev->host->host_no, *command);
tw_dev->state[request_id] = TW_S_COMPLETED; tw_dev->state[request_id] = TW_S_COMPLETED;
tw_state_request_finish(tw_dev, request_id); tw_state_request_finish(tw_dev, request_id);
SCpnt->result = (DID_BAD_TARGET << 16); SCpnt->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
scsi_build_sense_buffer(1, SCpnt->sense_buffer, ILLEGAL_REQUEST, 0x20, 0);
done(SCpnt); done(SCpnt);
retval = 0; retval = 0;
} }
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -633,7 +633,7 @@ config SCSI_BUSLOGIC ...@@ -633,7 +633,7 @@ config SCSI_BUSLOGIC
config SCSI_FLASHPOINT config SCSI_FLASHPOINT
bool "FlashPoint support" bool "FlashPoint support"
depends on SCSI_BUSLOGIC && PCI && X86_32 depends on SCSI_BUSLOGIC && PCI
help help
This option allows you to add FlashPoint support to the This option allows you to add FlashPoint support to the
BusLogic SCSI driver. The FlashPoint SCCB Manager code is BusLogic SCSI driver. The FlashPoint SCCB Manager code is
......
...@@ -93,6 +93,9 @@ static irqreturn_t aac_src_intr_message(int irq, void *dev_id) ...@@ -93,6 +93,9 @@ static irqreturn_t aac_src_intr_message(int irq, void *dev_id)
int send_it = 0; int send_it = 0;
extern int aac_sync_mode; extern int aac_sync_mode;
src_writel(dev, MUnit.ODR_C, bellbits);
src_readl(dev, MUnit.ODR_C);
if (!aac_sync_mode) { if (!aac_sync_mode) {
src_writel(dev, MUnit.ODR_C, bellbits); src_writel(dev, MUnit.ODR_C, bellbits);
src_readl(dev, MUnit.ODR_C); src_readl(dev, MUnit.ODR_C);
......
...@@ -505,7 +505,8 @@ static int asd_build_ssp_ascb(struct asd_ascb *ascb, struct sas_task *task, ...@@ -505,7 +505,8 @@ static int asd_build_ssp_ascb(struct asd_ascb *ascb, struct sas_task *task,
scb->ssp_task.ssp_cmd.efb_prio_attr |= EFB_MASK; scb->ssp_task.ssp_cmd.efb_prio_attr |= EFB_MASK;
scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_prio << 3); scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_prio << 3);
scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_attr & 7); scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_attr & 7);
memcpy(scb->ssp_task.ssp_cmd.cdb, task->ssp_task.cdb, 16); memcpy(scb->ssp_task.ssp_cmd.cdb, task->ssp_task.cmd->cmnd,
task->ssp_task.cmd->cmd_len);
scb->ssp_task.sister_scb = cpu_to_le16(0xFFFF); scb->ssp_task.sister_scb = cpu_to_le16(0xFFFF);
scb->ssp_task.conn_handle = cpu_to_le16( scb->ssp_task.conn_handle = cpu_to_le16(
......
...@@ -1432,6 +1432,7 @@ bfa_iocfc_disable_cbfn(void *bfa_arg) ...@@ -1432,6 +1432,7 @@ bfa_iocfc_disable_cbfn(void *bfa_arg)
{ {
struct bfa_s *bfa = bfa_arg; struct bfa_s *bfa = bfa_arg;
bfa->queue_process = BFA_FALSE;
bfa_fsm_send_event(&bfa->iocfc, IOCFC_E_IOC_DISABLED); bfa_fsm_send_event(&bfa->iocfc, IOCFC_E_IOC_DISABLED);
} }
...@@ -1567,7 +1568,6 @@ bfa_iocfc_start(struct bfa_s *bfa) ...@@ -1567,7 +1568,6 @@ bfa_iocfc_start(struct bfa_s *bfa)
void void
bfa_iocfc_stop(struct bfa_s *bfa) bfa_iocfc_stop(struct bfa_s *bfa)
{ {
bfa->queue_process = BFA_FALSE;
bfa_fsm_send_event(&bfa->iocfc, IOCFC_E_STOP); bfa_fsm_send_event(&bfa->iocfc, IOCFC_E_STOP);
} }
...@@ -1674,7 +1674,6 @@ bfa_iocfc_disable(struct bfa_s *bfa) ...@@ -1674,7 +1674,6 @@ bfa_iocfc_disable(struct bfa_s *bfa)
bfa_plog_str(bfa->plog, BFA_PL_MID_HAL, BFA_PL_EID_MISC, 0, bfa_plog_str(bfa->plog, BFA_PL_MID_HAL, BFA_PL_EID_MISC, 0,
"IOC Disable"); "IOC Disable");
bfa->queue_process = BFA_FALSE;
bfa_fsm_send_event(&bfa->iocfc, IOCFC_E_DISABLE); bfa_fsm_send_event(&bfa->iocfc, IOCFC_E_DISABLE);
} }
......
...@@ -45,6 +45,7 @@ enum { ...@@ -45,6 +45,7 @@ enum {
BFA_MFG_TYPE_PROWLER_C = 1710, /* Prowler CNA only cards */ BFA_MFG_TYPE_PROWLER_C = 1710, /* Prowler CNA only cards */
BFA_MFG_TYPE_PROWLER_D = 1860, /* Prowler Dual cards */ BFA_MFG_TYPE_PROWLER_D = 1860, /* Prowler Dual cards */
BFA_MFG_TYPE_CHINOOK = 1867, /* Chinook cards */ BFA_MFG_TYPE_CHINOOK = 1867, /* Chinook cards */
BFA_MFG_TYPE_CHINOOK2 = 1869, /*!< Chinook2 cards */
BFA_MFG_TYPE_INVALID = 0, /* Invalid card type */ BFA_MFG_TYPE_INVALID = 0, /* Invalid card type */
}; };
...@@ -59,7 +60,8 @@ enum { ...@@ -59,7 +60,8 @@ enum {
(type) == BFA_MFG_TYPE_ASTRA || \ (type) == BFA_MFG_TYPE_ASTRA || \
(type) == BFA_MFG_TYPE_LIGHTNING_P0 || \ (type) == BFA_MFG_TYPE_LIGHTNING_P0 || \
(type) == BFA_MFG_TYPE_LIGHTNING || \ (type) == BFA_MFG_TYPE_LIGHTNING || \
(type) == BFA_MFG_TYPE_CHINOOK)) (type) == BFA_MFG_TYPE_CHINOOK || \
(type) == BFA_MFG_TYPE_CHINOOK2))
/* /*
* Check if the card having old wwn/mac handling * Check if the card having old wwn/mac handling
...@@ -185,6 +187,8 @@ enum bfa_status { ...@@ -185,6 +187,8 @@ enum bfa_status {
BFA_STATUS_FAA_DISABLED = 198, /* FAA is already disabled */ BFA_STATUS_FAA_DISABLED = 198, /* FAA is already disabled */
BFA_STATUS_FAA_ACQUIRED = 199, /* FAA is already acquired */ BFA_STATUS_FAA_ACQUIRED = 199, /* FAA is already acquired */
BFA_STATUS_FAA_ACQ_ADDR = 200, /* Acquiring addr */ BFA_STATUS_FAA_ACQ_ADDR = 200, /* Acquiring addr */
BFA_STATUS_BBCR_FC_ONLY = 201, /*!< BBCredit Recovery is supported for *
* FC mode only */
BFA_STATUS_ERROR_TRUNK_ENABLED = 203, /* Trunk enabled on adapter */ BFA_STATUS_ERROR_TRUNK_ENABLED = 203, /* Trunk enabled on adapter */
BFA_STATUS_MAX_ENTRY_REACHED = 212, /* MAX entry reached */ BFA_STATUS_MAX_ENTRY_REACHED = 212, /* MAX entry reached */
BFA_STATUS_TOPOLOGY_LOOP = 230, /* Topology is set to Loop */ BFA_STATUS_TOPOLOGY_LOOP = 230, /* Topology is set to Loop */
...@@ -197,7 +201,34 @@ enum bfa_status { ...@@ -197,7 +201,34 @@ enum bfa_status {
BFA_STATUS_DPORT_DISABLED = 236, /* D-port mode is already disabled */ BFA_STATUS_DPORT_DISABLED = 236, /* D-port mode is already disabled */
BFA_STATUS_CMD_NOTSUPP_MEZZ = 239, /* Cmd not supported for MEZZ card */ BFA_STATUS_CMD_NOTSUPP_MEZZ = 239, /* Cmd not supported for MEZZ card */
BFA_STATUS_FRU_NOT_PRESENT = 240, /* fru module not present */ BFA_STATUS_FRU_NOT_PRESENT = 240, /* fru module not present */
BFA_STATUS_DPORT_NO_SFP = 243, /* SFP is not present.\n D-port will be
* enabled but it will be operational
* only after inserting a valid SFP. */
BFA_STATUS_DPORT_ERR = 245, /* D-port mode is enabled */ BFA_STATUS_DPORT_ERR = 245, /* D-port mode is enabled */
BFA_STATUS_DPORT_ENOSYS = 254, /* Switch has no D_Port functionality */
BFA_STATUS_DPORT_CANT_PERF = 255, /* Switch port is not D_Port capable
* or D_Port is disabled */
BFA_STATUS_DPORT_LOGICALERR = 256, /* Switch D_Port fail */
BFA_STATUS_DPORT_SWBUSY = 257, /* Switch port busy */
BFA_STATUS_ERR_BBCR_SPEED_UNSUPPORT = 258, /*!< BB credit recovery is
* supported at max port speed alone */
BFA_STATUS_ERROR_BBCR_ENABLED = 259, /*!< BB credit recovery
* is enabled */
BFA_STATUS_INVALID_BBSCN = 260, /*!< Invalid BBSCN value.
* Valid range is [1-15] */
BFA_STATUS_DDPORT_ERR = 261, /* Dynamic D_Port mode is active.\n To
* exit dynamic mode, disable D_Port on
* the remote port */
BFA_STATUS_DPORT_SFPWRAP_ERR = 262, /* Clear e/o_wrap fail, check or
* replace SFP */
BFA_STATUS_BBCR_CFG_NO_CHANGE = 265, /*!< BBCR is operational.
* Disable BBCR and try this operation again. */
BFA_STATUS_DPORT_SW_NOTREADY = 268, /* Remote port is not ready to
* start dport test. Check remote
* port status. */
BFA_STATUS_DPORT_INV_SFP = 271, /* Invalid SFP for D-PORT mode. */
BFA_STATUS_DPORT_CMD_NOTSUPP = 273, /* Dport is not supported by
* remote port */
BFA_STATUS_MAX_VAL /* Unknown error code */ BFA_STATUS_MAX_VAL /* Unknown error code */
}; };
#define bfa_status_t enum bfa_status #define bfa_status_t enum bfa_status
...@@ -234,6 +265,7 @@ enum { ...@@ -234,6 +265,7 @@ enum {
BFA_ADAPTER_MFG_NAME_LEN = 8, /* manufacturer name length */ BFA_ADAPTER_MFG_NAME_LEN = 8, /* manufacturer name length */
BFA_ADAPTER_SYM_NAME_LEN = 64, /* adapter symbolic name length */ BFA_ADAPTER_SYM_NAME_LEN = 64, /* adapter symbolic name length */
BFA_ADAPTER_OS_TYPE_LEN = 64, /* adapter os type length */ BFA_ADAPTER_OS_TYPE_LEN = 64, /* adapter os type length */
BFA_ADAPTER_UUID_LEN = 16, /* adapter uuid length */
}; };
struct bfa_adapter_attr_s { struct bfa_adapter_attr_s {
...@@ -267,6 +299,7 @@ struct bfa_adapter_attr_s { ...@@ -267,6 +299,7 @@ struct bfa_adapter_attr_s {
u8 mfg_month; /* manufacturing month */ u8 mfg_month; /* manufacturing month */
u16 mfg_year; /* manufacturing year */ u16 mfg_year; /* manufacturing year */
u16 rsvd; u16 rsvd;
u8 uuid[BFA_ADAPTER_UUID_LEN];
}; };
/* /*
...@@ -380,7 +413,8 @@ struct bfa_ioc_attr_s { ...@@ -380,7 +413,8 @@ struct bfa_ioc_attr_s {
u8 port_mode; /* bfa_mode_s */ u8 port_mode; /* bfa_mode_s */
u8 cap_bm; /* capability */ u8 cap_bm; /* capability */
u8 port_mode_cfg; /* bfa_mode_s */ u8 port_mode_cfg; /* bfa_mode_s */
u8 rsvd[4]; /* 64bit align */ u8 def_fn; /* 1 if default fn */
u8 rsvd[3]; /* 64bit align */
}; };
/* /*
...@@ -516,17 +550,6 @@ struct bfa_ioc_aen_data_s { ...@@ -516,17 +550,6 @@ struct bfa_ioc_aen_data_s {
mac_t mac; mac_t mac;
}; };
/*
* D-port states
*
*/
enum bfa_dport_state {
BFA_DPORT_ST_DISABLED = 0, /* D-port is Disabled */
BFA_DPORT_ST_DISABLING = 1, /* D-port is Disabling */
BFA_DPORT_ST_ENABLING = 2, /* D-port is Enabling */
BFA_DPORT_ST_ENABLED = 3, /* D-port is Enabled */
};
/* /*
* ---------------------- mfg definitions ------------ * ---------------------- mfg definitions ------------
*/ */
...@@ -614,6 +637,7 @@ enum { ...@@ -614,6 +637,7 @@ enum {
BFA_PCI_DEVICE_ID_CT = 0x14, BFA_PCI_DEVICE_ID_CT = 0x14,
BFA_PCI_DEVICE_ID_CT_FC = 0x21, BFA_PCI_DEVICE_ID_CT_FC = 0x21,
BFA_PCI_DEVICE_ID_CT2 = 0x22, BFA_PCI_DEVICE_ID_CT2 = 0x22,
BFA_PCI_DEVICE_ID_CT2_QUAD = 0x23,
}; };
#define bfa_asic_id_cb(__d) \ #define bfa_asic_id_cb(__d) \
...@@ -622,7 +646,9 @@ enum { ...@@ -622,7 +646,9 @@ enum {
#define bfa_asic_id_ct(__d) \ #define bfa_asic_id_ct(__d) \
((__d) == BFA_PCI_DEVICE_ID_CT || \ ((__d) == BFA_PCI_DEVICE_ID_CT || \
(__d) == BFA_PCI_DEVICE_ID_CT_FC) (__d) == BFA_PCI_DEVICE_ID_CT_FC)
#define bfa_asic_id_ct2(__d) ((__d) == BFA_PCI_DEVICE_ID_CT2) #define bfa_asic_id_ct2(__d) \
((__d) == BFA_PCI_DEVICE_ID_CT2 || \
(__d) == BFA_PCI_DEVICE_ID_CT2_QUAD)
#define bfa_asic_id_ctc(__d) \ #define bfa_asic_id_ctc(__d) \
(bfa_asic_id_ct(__d) || bfa_asic_id_ct2(__d)) (bfa_asic_id_ct(__d) || bfa_asic_id_ct2(__d))
...@@ -1126,6 +1152,7 @@ struct bfa_flash_attr_s { ...@@ -1126,6 +1152,7 @@ struct bfa_flash_attr_s {
#define LB_PATTERN_DEFAULT 0xB5B5B5B5 #define LB_PATTERN_DEFAULT 0xB5B5B5B5
#define QTEST_CNT_DEFAULT 10 #define QTEST_CNT_DEFAULT 10
#define QTEST_PAT_DEFAULT LB_PATTERN_DEFAULT #define QTEST_PAT_DEFAULT LB_PATTERN_DEFAULT
#define DPORT_ENABLE_LOOPCNT_DEFAULT (1024 * 1024)
struct bfa_diag_memtest_s { struct bfa_diag_memtest_s {
u8 algo; u8 algo;
...@@ -1154,6 +1181,54 @@ struct bfa_diag_loopback_result_s { ...@@ -1154,6 +1181,54 @@ struct bfa_diag_loopback_result_s {
u8 rsvd[3]; u8 rsvd[3];
}; };
enum bfa_diag_dport_test_status {
DPORT_TEST_ST_IDLE = 0, /* the test has not started yet. */
DPORT_TEST_ST_FINAL = 1, /* the test done successfully */
DPORT_TEST_ST_SKIP = 2, /* the test skipped */
DPORT_TEST_ST_FAIL = 3, /* the test failed */
DPORT_TEST_ST_INPRG = 4, /* the testing is in progress */
DPORT_TEST_ST_RESPONDER = 5, /* test triggered from remote port */
DPORT_TEST_ST_STOPPED = 6, /* the test stopped by user. */
DPORT_TEST_ST_MAX
};
enum bfa_diag_dport_test_type {
DPORT_TEST_ELOOP = 0,
DPORT_TEST_OLOOP = 1,
DPORT_TEST_ROLOOP = 2,
DPORT_TEST_LINK = 3,
DPORT_TEST_MAX
};
enum bfa_diag_dport_test_opmode {
BFA_DPORT_OPMODE_AUTO = 0,
BFA_DPORT_OPMODE_MANU = 1,
};
struct bfa_diag_dport_subtest_result_s {
u8 status; /* bfa_diag_dport_test_status */
u8 rsvd[7]; /* 64bit align */
u64 start_time; /* timestamp */
};
struct bfa_diag_dport_result_s {
wwn_t rp_pwwn; /* switch port wwn */
wwn_t rp_nwwn; /* switch node wwn */
u64 start_time; /* user/sw start time */
u64 end_time; /* timestamp */
u8 status; /* bfa_diag_dport_test_status */
u8 mode; /* bfa_diag_dport_test_opmode */
u8 rsvd; /* 64bit align */
u8 speed; /* link speed for buf_reqd */
u16 buffer_required;
u16 frmsz; /* frame size for buf_reqd */
u32 lpcnt; /* Frame count */
u32 pat; /* Pattern */
u32 roundtrip_latency; /* in nano sec */
u32 est_cable_distance; /* in meter */
struct bfa_diag_dport_subtest_result_s subtest[DPORT_TEST_MAX];
};
struct bfa_diag_ledtest_s { struct bfa_diag_ledtest_s {
u32 cmd; /* bfa_led_op_t */ u32 cmd; /* bfa_led_op_t */
u32 color; /* bfa_led_color_t */ u32 color; /* bfa_led_color_t */
......
...@@ -105,6 +105,9 @@ struct bfa_fw_ioim_stats_s { ...@@ -105,6 +105,9 @@ struct bfa_fw_ioim_stats_s {
* an error condition*/ * an error condition*/
u32 wait_for_si; /* FW wait for SI */ u32 wait_for_si; /* FW wait for SI */
u32 rec_rsp_inval; /* REC rsp invalid */ u32 rec_rsp_inval; /* REC rsp invalid */
u32 rec_rsp_xchg_comp; /* REC rsp xchg complete */
u32 rec_rsp_rd_si_ownd; /* REC rsp read si owned */
u32 seqr_io_abort; /* target does not know cmd so abort */ u32 seqr_io_abort; /* target does not know cmd so abort */
u32 seqr_io_retry; /* SEQR failed so retry IO */ u32 seqr_io_retry; /* SEQR failed so retry IO */
...@@ -257,8 +260,6 @@ struct bfa_fw_port_lksm_stats_s { ...@@ -257,8 +260,6 @@ struct bfa_fw_port_lksm_stats_s {
u32 nos_tx; /* No. of times NOS tx started */ u32 nos_tx; /* No. of times NOS tx started */
u32 hwsm_lrr_rx; /* No. of times LRR rx-ed by HWSM */ u32 hwsm_lrr_rx; /* No. of times LRR rx-ed by HWSM */
u32 hwsm_lr_rx; /* No. of times LR rx-ed by HWSM */ u32 hwsm_lr_rx; /* No. of times LR rx-ed by HWSM */
u32 bbsc_lr; /* LKSM LR tx for credit recovery */
u32 rsvd;
}; };
struct bfa_fw_port_snsm_stats_s { struct bfa_fw_port_snsm_stats_s {
...@@ -409,7 +410,7 @@ struct bfa_fw_trunk_stats_s { ...@@ -409,7 +410,7 @@ struct bfa_fw_trunk_stats_s {
u32 rsvd; /* padding for 64 bit alignment */ u32 rsvd; /* padding for 64 bit alignment */
}; };
struct bfa_fw_advsm_stats_s { struct bfa_fw_aport_stats_s {
u32 flogi_sent; /* Flogi sent */ u32 flogi_sent; /* Flogi sent */
u32 flogi_acc_recvd; /* Flogi Acc received */ u32 flogi_acc_recvd; /* Flogi Acc received */
u32 flogi_rjt_recvd; /* Flogi rejects received */ u32 flogi_rjt_recvd; /* Flogi rejects received */
...@@ -419,6 +420,12 @@ struct bfa_fw_advsm_stats_s { ...@@ -419,6 +420,12 @@ struct bfa_fw_advsm_stats_s {
u32 elp_accepted; /* ELP Accepted */ u32 elp_accepted; /* ELP Accepted */
u32 elp_rejected; /* ELP rejected */ u32 elp_rejected; /* ELP rejected */
u32 elp_dropped; /* ELP dropped */ u32 elp_dropped; /* ELP dropped */
u32 bbcr_lr_count; /*!< BBCR Link Resets */
u32 frame_lost_intrs; /*!< BBCR Frame loss intrs */
u32 rrdy_lost_intrs; /*!< BBCR Rrdy loss intrs */
u32 rsvd;
}; };
/* /*
...@@ -478,6 +485,14 @@ struct bfa_fw_ct_mod_stats_s { ...@@ -478,6 +485,14 @@ struct bfa_fw_ct_mod_stats_s {
u32 rsvd; /* 64bit align */ u32 rsvd; /* 64bit align */
}; };
/*
* RDS mod stats
*/
struct bfa_fw_rds_stats_s {
u32 no_fid_drop_err; /* RDS no fid drop error */
u32 rsvd; /* 64bit align */
};
/* /*
* IOC firmware stats * IOC firmware stats
*/ */
...@@ -489,10 +504,11 @@ struct bfa_fw_stats_s { ...@@ -489,10 +504,11 @@ struct bfa_fw_stats_s {
struct bfa_fw_fcxchg_stats_s fcxchg_stats; struct bfa_fw_fcxchg_stats_s fcxchg_stats;
struct bfa_fw_lps_stats_s lps_stats; struct bfa_fw_lps_stats_s lps_stats;
struct bfa_fw_trunk_stats_s trunk_stats; struct bfa_fw_trunk_stats_s trunk_stats;
struct bfa_fw_advsm_stats_s advsm_stats; struct bfa_fw_aport_stats_s aport_stats;
struct bfa_fw_mac_mod_stats_s macmod_stats; struct bfa_fw_mac_mod_stats_s macmod_stats;
struct bfa_fw_ct_mod_stats_s ctmod_stats; struct bfa_fw_ct_mod_stats_s ctmod_stats;
struct bfa_fw_eth_sndrcv_stats_s ethsndrcv_stats; struct bfa_fw_eth_sndrcv_stats_s ethsndrcv_stats;
struct bfa_fw_rds_stats_s rds_stats;
}; };
#define BFA_IOCFC_PATHTOV_MAX 60 #define BFA_IOCFC_PATHTOV_MAX 60
...@@ -545,6 +561,27 @@ struct bfa_qos_attr_s { ...@@ -545,6 +561,27 @@ struct bfa_qos_attr_s {
struct bfa_qos_bw_s qos_bw_op; /* QOS bw operational */ struct bfa_qos_bw_s qos_bw_op; /* QOS bw operational */
}; };
enum bfa_bbcr_state {
BFA_BBCR_DISABLED, /*!< BBCR is disable */
BFA_BBCR_ONLINE, /*!< BBCR is online */
BFA_BBCR_OFFLINE, /*!< BBCR is offline */
};
enum bfa_bbcr_err_reason {
BFA_BBCR_ERR_REASON_NONE, /*!< Unknown */
BFA_BBCR_ERR_REASON_SPEED_UNSUP, /*!< Port speed < max sup_speed */
BFA_BBCR_ERR_REASON_PEER_UNSUP, /*!< BBCR is disable on peer port */
BFA_BBCR_ERR_REASON_NON_BRCD_SW, /*!< Connected to non BRCD switch */
BFA_BBCR_ERR_REASON_FLOGI_RJT, /*!< Login rejected by the switch */
};
struct bfa_bbcr_attr_s {
u8 state;
u8 peer_bb_scn;
u8 reason;
u8 rsvd;
};
/* /*
* These fields should be displayed only from the CLI. * These fields should be displayed only from the CLI.
* There will be a separate BFAL API (get_qos_vc_attr ?) * There will be a separate BFAL API (get_qos_vc_attr ?)
...@@ -736,6 +773,7 @@ enum bfa_port_states { ...@@ -736,6 +773,7 @@ enum bfa_port_states {
BFA_PORT_ST_TOGGLING_QWAIT = 14, BFA_PORT_ST_TOGGLING_QWAIT = 14,
BFA_PORT_ST_FAA_MISCONFIG = 15, BFA_PORT_ST_FAA_MISCONFIG = 15,
BFA_PORT_ST_DPORT = 16, BFA_PORT_ST_DPORT = 16,
BFA_PORT_ST_DDPORT = 17,
BFA_PORT_ST_MAX_STATE, BFA_PORT_ST_MAX_STATE,
}; };
...@@ -857,6 +895,15 @@ enum bfa_lunmask_state_s { ...@@ -857,6 +895,15 @@ enum bfa_lunmask_state_s {
BFA_LUNMASK_UNINITIALIZED = 0xff, BFA_LUNMASK_UNINITIALIZED = 0xff,
}; };
/**
* FEC states
*/
enum bfa_fec_state_s {
BFA_FEC_ONLINE = 1, /*!< FEC is online */
BFA_FEC_OFFLINE = 2, /*!< FEC is offline */
BFA_FEC_OFFLINE_NOT_16G = 3, /*!< FEC is offline (speed not 16Gig) */
};
#pragma pack(1) #pragma pack(1)
/* /*
* LUN mask configuration * LUN mask configuration
...@@ -892,6 +939,9 @@ struct bfa_defs_fcpim_throttle_s { ...@@ -892,6 +939,9 @@ struct bfa_defs_fcpim_throttle_s {
u16 rsvd; u16 rsvd;
}; };
#define BFA_BB_SCN_DEF 3
#define BFA_BB_SCN_MAX 0x0F
/* /*
* Physical port configuration * Physical port configuration
*/ */
...@@ -907,8 +957,8 @@ struct bfa_port_cfg_s { ...@@ -907,8 +957,8 @@ struct bfa_port_cfg_s {
u8 tx_bbcredit; /* transmit buffer credits */ u8 tx_bbcredit; /* transmit buffer credits */
u8 ratelimit; /* ratelimit enabled or not */ u8 ratelimit; /* ratelimit enabled or not */
u8 trl_def_speed; /* ratelimit default speed */ u8 trl_def_speed; /* ratelimit default speed */
u8 bb_scn; /* BB_SCN value from FLOGI Exchg */ u8 bb_cr_enabled; /*!< Config state of BB_SCN */
u8 bb_scn_state; /* Config state of BB_SCN */ u8 bb_scn; /*!< BB_SCN value for FLOGI Exchg */
u8 faa_state; /* FAA enabled/disabled */ u8 faa_state; /* FAA enabled/disabled */
u8 rsvd1; u8 rsvd1;
u16 path_tov; /* device path timeout */ u16 path_tov; /* device path timeout */
...@@ -950,6 +1000,7 @@ struct bfa_port_attr_s { ...@@ -950,6 +1000,7 @@ struct bfa_port_attr_s {
bfa_boolean_t link_e2e_beacon; /* link beacon is on */ bfa_boolean_t link_e2e_beacon; /* link beacon is on */
bfa_boolean_t bbsc_op_status; /* fc credit recovery oper bfa_boolean_t bbsc_op_status; /* fc credit recovery oper
* state */ * state */
enum bfa_fec_state_s fec_state; /*!< current FEC state */
/* /*
* Dynamic field - info from FCS * Dynamic field - info from FCS
...@@ -961,7 +1012,7 @@ struct bfa_port_attr_s { ...@@ -961,7 +1012,7 @@ struct bfa_port_attr_s {
/* FCoE specific */ /* FCoE specific */
u16 fcoe_vlan; u16 fcoe_vlan;
u8 rsvd1[6]; u8 rsvd1[2];
}; };
/* /*
...@@ -1048,10 +1099,12 @@ struct bfa_port_link_s { ...@@ -1048,10 +1099,12 @@ struct bfa_port_link_s {
u8 speed; /* Link speed (1/2/4/8 G) */ u8 speed; /* Link speed (1/2/4/8 G) */
u32 linkstate_opt; /* Linkstate optional data (debug) */ u32 linkstate_opt; /* Linkstate optional data (debug) */
u8 trunked; /* Trunked or not (1 or 0) */ u8 trunked; /* Trunked or not (1 or 0) */
u8 resvd[7]; u8 fec_state; /*!< State of FEC */
u8 resvd[6];
struct bfa_qos_attr_s qos_attr; /* QoS Attributes */ struct bfa_qos_attr_s qos_attr; /* QoS Attributes */
union { union {
struct bfa_fcport_loop_info_s loop_info; struct bfa_fcport_loop_info_s loop_info;
struct bfa_bbcr_attr_s bbcr_attr;
union { union {
struct bfa_qos_vc_attr_s qos_vc_attr; struct bfa_qos_vc_attr_s qos_vc_attr;
/* VC info from ELP */ /* VC info from ELP */
...@@ -1215,9 +1268,11 @@ struct bfa_port_fc_stats_s { ...@@ -1215,9 +1268,11 @@ struct bfa_port_fc_stats_s {
u64 bad_os_count; /* Invalid ordered sets */ u64 bad_os_count; /* Invalid ordered sets */
u64 err_enc_out; /* Encoding err nonframe_8b10b */ u64 err_enc_out; /* Encoding err nonframe_8b10b */
u64 err_enc; /* Encoding err frame_8b10b */ u64 err_enc; /* Encoding err frame_8b10b */
u64 bbsc_frames_lost; /* Credit Recovery-Frames Lost */ u64 bbcr_frames_lost; /*!< BBCR Frames Lost */
u64 bbsc_credits_lost; /* Credit Recovery-Credits Lost */ u64 bbcr_rrdys_lost; /*!< BBCR RRDYs Lost */
u64 bbsc_link_resets; /* Credit Recovery-Link Resets */ u64 bbcr_link_resets; /*!< BBCR Link Resets */
u64 bbcr_frame_lost_intrs; /*!< BBCR Frame loss intrs */
u64 bbcr_rrdy_lost_intrs; /*!< BBCR Rrdy loss intrs */
u64 loop_timeouts; /* Loop timeouts */ u64 loop_timeouts; /* Loop timeouts */
}; };
......
This diff is collapsed.
...@@ -2882,7 +2882,7 @@ bfa_ioim_good_comp_isr(struct bfa_s *bfa, struct bfi_msg_s *m) ...@@ -2882,7 +2882,7 @@ bfa_ioim_good_comp_isr(struct bfa_s *bfa, struct bfi_msg_s *m)
iotag = be16_to_cpu(rsp->io_tag); iotag = be16_to_cpu(rsp->io_tag);
ioim = BFA_IOIM_FROM_TAG(fcpim, iotag); ioim = BFA_IOIM_FROM_TAG(fcpim, iotag);
WARN_ON(BFA_IOIM_TAG_2_ID(ioim->iotag) != iotag); WARN_ON(ioim->iotag != iotag);
bfa_ioim_cb_profile_comp(fcpim, ioim); bfa_ioim_cb_profile_comp(fcpim, ioim);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
#ifdef BFA_DRIVER_VERSION #ifdef BFA_DRIVER_VERSION
#define BFAD_DRIVER_VERSION BFA_DRIVER_VERSION #define BFAD_DRIVER_VERSION BFA_DRIVER_VERSION
#else #else
#define BFAD_DRIVER_VERSION "3.1.2.1" #define BFAD_DRIVER_VERSION "3.2.21.1"
#endif #endif
#define BFAD_PROTO_NAME FCPI_NAME #define BFAD_PROTO_NAME FCPI_NAME
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment