aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi/libsas.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-01-31 14:23:28 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-01-31 14:23:28 -0500
commit28bc6fb9596fe1e577d09fc17ee6e1bb051c6ba3 (patch)
tree6293b282a960720fc5008e3e5fa4d096d974b2f1 /include/scsi/libsas.h
parent0be600a5add76e8e8b9e1119f2a7426ff849aca8 (diff)
parenta2390348c19d0819d525d375414a7cfdacb51a68 (diff)
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI updates from James Bottomley: "This is mostly updates of the usual driver suspects: arcmsr, scsi_debug, mpt3sas, lpfc, cxlflash, qla2xxx, aacraid, megaraid_sas, hisi_sas. We also have a rework of the libsas hotplug handling to make it more robust, a slew of 32 bit time conversions and fixes, and a host of the usual minor updates and style changes. The biggest potential for regressions is the libsas hotplug changes, but so far they seem stable under testing" * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (313 commits) scsi: qla2xxx: Fix logo flag for qlt_free_session_done() scsi: arcmsr: avoid do_gettimeofday scsi: core: Add VENDOR_SPECIFIC sense code definitions scsi: qedi: Drop cqe response during connection recovery scsi: fas216: fix sense buffer initialization scsi: ibmvfc: Remove unneeded semicolons scsi: hisi_sas: fix a bug in hisi_sas_dev_gone() scsi: hisi_sas: directly attached disk LED feature for v2 hw scsi: hisi_sas: devicetree: bindings: add LED feature for v2 hw scsi: megaraid_sas: NVMe passthrough command support scsi: megaraid: use ktime_get_real for firmware time scsi: fnic: use 64-bit timestamps scsi: qedf: Fix error return code in __qedf_probe() scsi: devinfo: fix format of the device list scsi: qla2xxx: Update driver version to 10.00.00.05-k scsi: qla2xxx: Add XCB counters to debugfs scsi: qla2xxx: Fix queue ID for async abort with Multiqueue scsi: qla2xxx: Fix warning for code intentation in __qla24xx_handle_gpdb_event() scsi: qla2xxx: Fix warning during port_name debug print scsi: qla2xxx: Fix warning in qla2x00_async_iocb_timeout() ...
Diffstat (limited to 'include/scsi/libsas.h')
-rw-r--r--include/scsi/libsas.h30
1 files changed, 22 insertions, 8 deletions
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
index 6df6fe0c2198..225ab7783dfd 100644
--- a/include/scsi/libsas.h
+++ b/include/scsi/libsas.h
@@ -75,16 +75,15 @@ enum phy_event {
75 PHYE_OOB_ERROR, 75 PHYE_OOB_ERROR,
76 PHYE_SPINUP_HOLD, /* hot plug SATA, no COMWAKE sent */ 76 PHYE_SPINUP_HOLD, /* hot plug SATA, no COMWAKE sent */
77 PHYE_RESUME_TIMEOUT, 77 PHYE_RESUME_TIMEOUT,
78 PHYE_SHUTDOWN,
78 PHY_NUM_EVENTS, 79 PHY_NUM_EVENTS,
79}; 80};
80 81
81enum discover_event { 82enum discover_event {
82 DISCE_DISCOVER_DOMAIN = 0U, 83 DISCE_DISCOVER_DOMAIN = 0U,
83 DISCE_REVALIDATE_DOMAIN, 84 DISCE_REVALIDATE_DOMAIN,
84 DISCE_PROBE,
85 DISCE_SUSPEND, 85 DISCE_SUSPEND,
86 DISCE_RESUME, 86 DISCE_RESUME,
87 DISCE_DESTRUCT,
88 DISC_NUM_EVENTS, 87 DISC_NUM_EVENTS,
89}; 88};
90 89
@@ -261,6 +260,7 @@ struct asd_sas_port {
261 struct list_head dev_list; 260 struct list_head dev_list;
262 struct list_head disco_list; 261 struct list_head disco_list;
263 struct list_head destroy_list; 262 struct list_head destroy_list;
263 struct list_head sas_port_del_list;
264 enum sas_linkrate linkrate; 264 enum sas_linkrate linkrate;
265 265
266 struct sas_work work; 266 struct sas_work work;
@@ -292,6 +292,7 @@ struct asd_sas_port {
292struct asd_sas_event { 292struct asd_sas_event {
293 struct sas_work work; 293 struct sas_work work;
294 struct asd_sas_phy *phy; 294 struct asd_sas_phy *phy;
295 int event;
295}; 296};
296 297
297static inline struct asd_sas_event *to_asd_sas_event(struct work_struct *work) 298static inline struct asd_sas_event *to_asd_sas_event(struct work_struct *work)
@@ -301,17 +302,24 @@ static inline struct asd_sas_event *to_asd_sas_event(struct work_struct *work)
301 return ev; 302 return ev;
302} 303}
303 304
305static inline void INIT_SAS_EVENT(struct asd_sas_event *ev,
306 void (*fn)(struct work_struct *),
307 struct asd_sas_phy *phy, int event)
308{
309 INIT_SAS_WORK(&ev->work, fn);
310 ev->phy = phy;
311 ev->event = event;
312}
313
314#define SAS_PHY_SHUTDOWN_THRES 1024
315
304/* The phy pretty much is controlled by the LLDD. 316/* The phy pretty much is controlled by the LLDD.
305 * The class only reads those fields. 317 * The class only reads those fields.
306 */ 318 */
307struct asd_sas_phy { 319struct asd_sas_phy {
308/* private: */ 320/* private: */
309 struct asd_sas_event port_events[PORT_NUM_EVENTS]; 321 atomic_t event_nr;
310 struct asd_sas_event phy_events[PHY_NUM_EVENTS]; 322 int in_shutdown;
311
312 unsigned long port_events_pending;
313 unsigned long phy_events_pending;
314
315 int error; 323 int error;
316 int suspended; 324 int suspended;
317 325
@@ -380,6 +388,9 @@ struct sas_ha_struct {
380 struct device *dev; /* should be set */ 388 struct device *dev; /* should be set */
381 struct module *lldd_module; /* should be set */ 389 struct module *lldd_module; /* should be set */
382 390
391 struct workqueue_struct *event_q;
392 struct workqueue_struct *disco_q;
393
383 u8 *sas_addr; /* must be set */ 394 u8 *sas_addr; /* must be set */
384 u8 hashed_sas_addr[HASHED_SAS_ADDR_SIZE]; 395 u8 hashed_sas_addr[HASHED_SAS_ADDR_SIZE];
385 396
@@ -399,6 +410,8 @@ struct sas_ha_struct {
399 410
400 struct list_head eh_done_q; /* complete via scsi_eh_flush_done_q */ 411 struct list_head eh_done_q; /* complete via scsi_eh_flush_done_q */
401 struct list_head eh_ata_q; /* scmds to promote from sas to ata eh */ 412 struct list_head eh_ata_q; /* scmds to promote from sas to ata eh */
413
414 int event_thres;
402}; 415};
403 416
404#define SHOST_TO_SAS_HA(_shost) (*(struct sas_ha_struct **)(_shost)->hostdata) 417#define SHOST_TO_SAS_HA(_shost) (*(struct sas_ha_struct **)(_shost)->hostdata)
@@ -670,6 +683,7 @@ extern int sas_bios_param(struct scsi_device *,
670 sector_t capacity, int *hsc); 683 sector_t capacity, int *hsc);
671extern struct scsi_transport_template * 684extern struct scsi_transport_template *
672sas_domain_attach_transport(struct sas_domain_function_template *); 685sas_domain_attach_transport(struct sas_domain_function_template *);
686extern struct device_attribute dev_attr_phy_event_threshold;
673 687
674int sas_discover_root_expander(struct domain_device *); 688int sas_discover_root_expander(struct domain_device *);
675 689