aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/libata.h15
-rw-r--r--include/linux/pci_ids.h1
-rw-r--r--include/scsi/libsas.h20
-rw-r--r--include/scsi/sas_ata.h10
-rw-r--r--include/scsi/scsi_bsg_fc.h2
-rw-r--r--include/scsi/scsi_device.h4
-rw-r--r--include/scsi/scsi_devinfo.h1
-rw-r--r--include/scsi/scsi_host.h6
8 files changed, 50 insertions, 9 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 464e67c2e77a..77eeeda2b6e2 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -185,6 +185,7 @@ enum {
185 ATA_LFLAG_DISABLED = (1 << 6), /* link is disabled */ 185 ATA_LFLAG_DISABLED = (1 << 6), /* link is disabled */
186 ATA_LFLAG_SW_ACTIVITY = (1 << 7), /* keep activity stats */ 186 ATA_LFLAG_SW_ACTIVITY = (1 << 7), /* keep activity stats */
187 ATA_LFLAG_NO_LPM = (1 << 8), /* disable LPM on this link */ 187 ATA_LFLAG_NO_LPM = (1 << 8), /* disable LPM on this link */
188 ATA_LFLAG_RST_ONCE = (1 << 9), /* limit recovery to one reset */
188 189
189 /* struct ata_port flags */ 190 /* struct ata_port flags */
190 ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */ 191 ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */
@@ -990,8 +991,7 @@ extern int ata_host_activate(struct ata_host *host, int irq,
990 irq_handler_t irq_handler, unsigned long irq_flags, 991 irq_handler_t irq_handler, unsigned long irq_flags,
991 struct scsi_host_template *sht); 992 struct scsi_host_template *sht);
992extern void ata_host_detach(struct ata_host *host); 993extern void ata_host_detach(struct ata_host *host);
993extern void ata_host_init(struct ata_host *, struct device *, 994extern void ata_host_init(struct ata_host *, struct device *, struct ata_port_operations *);
994 unsigned long, struct ata_port_operations *);
995extern int ata_scsi_detect(struct scsi_host_template *sht); 995extern int ata_scsi_detect(struct scsi_host_template *sht);
996extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg); 996extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
997extern int ata_scsi_queuecmd(struct Scsi_Host *h, struct scsi_cmnd *cmd); 997extern int ata_scsi_queuecmd(struct Scsi_Host *h, struct scsi_cmnd *cmd);
@@ -1016,6 +1016,17 @@ extern bool ata_link_offline(struct ata_link *link);
1016#ifdef CONFIG_PM 1016#ifdef CONFIG_PM
1017extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg); 1017extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg);
1018extern void ata_host_resume(struct ata_host *host); 1018extern void ata_host_resume(struct ata_host *host);
1019extern int ata_sas_port_async_suspend(struct ata_port *ap, int *async);
1020extern int ata_sas_port_async_resume(struct ata_port *ap, int *async);
1021#else
1022static inline int ata_sas_port_async_suspend(struct ata_port *ap, int *async)
1023{
1024 return 0;
1025}
1026static inline int ata_sas_port_async_resume(struct ata_port *ap, int *async)
1027{
1028 return 0;
1029}
1019#endif 1030#endif
1020extern int ata_ratelimit(void); 1031extern int ata_ratelimit(void);
1021extern void ata_msleep(struct ata_port *ap, unsigned int msecs); 1032extern void ata_msleep(struct ata_port *ap, unsigned int msecs);
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 8d3c42719387..33880f6f4e51 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -753,6 +753,7 @@
753#define PCI_DEVICE_ID_HP_CISSD 0x3238 753#define PCI_DEVICE_ID_HP_CISSD 0x3238
754#define PCI_DEVICE_ID_HP_CISSE 0x323a 754#define PCI_DEVICE_ID_HP_CISSE 0x323a
755#define PCI_DEVICE_ID_HP_CISSF 0x323b 755#define PCI_DEVICE_ID_HP_CISSF 0x323b
756#define PCI_DEVICE_ID_HP_CISSH 0x323c
756#define PCI_DEVICE_ID_HP_ZX2_IOC 0x4031 757#define PCI_DEVICE_ID_HP_ZX2_IOC 0x4031
757 758
758#define PCI_VENDOR_ID_PCTECH 0x1042 759#define PCI_VENDOR_ID_PCTECH 0x1042
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
index ae33706afeb0..ef937b56f9b5 100644
--- a/include/scsi/libsas.h
+++ b/include/scsi/libsas.h
@@ -79,7 +79,8 @@ enum phy_event {
79 PHYE_OOB_DONE = 1, 79 PHYE_OOB_DONE = 1,
80 PHYE_OOB_ERROR = 2, 80 PHYE_OOB_ERROR = 2,
81 PHYE_SPINUP_HOLD = 3, /* hot plug SATA, no COMWAKE sent */ 81 PHYE_SPINUP_HOLD = 3, /* hot plug SATA, no COMWAKE sent */
82 PHY_NUM_EVENTS = 4, 82 PHYE_RESUME_TIMEOUT = 4,
83 PHY_NUM_EVENTS = 5,
83}; 84};
84 85
85enum discover_event { 86enum discover_event {
@@ -87,8 +88,10 @@ enum discover_event {
87 DISCE_REVALIDATE_DOMAIN = 1, 88 DISCE_REVALIDATE_DOMAIN = 1,
88 DISCE_PORT_GONE = 2, 89 DISCE_PORT_GONE = 2,
89 DISCE_PROBE = 3, 90 DISCE_PROBE = 3,
90 DISCE_DESTRUCT = 4, 91 DISCE_SUSPEND = 4,
91 DISC_NUM_EVENTS = 5, 92 DISCE_RESUME = 5,
93 DISCE_DESTRUCT = 6,
94 DISC_NUM_EVENTS = 7,
92}; 95};
93 96
94/* ---------- Expander Devices ---------- */ 97/* ---------- Expander Devices ---------- */
@@ -128,7 +131,7 @@ struct ex_phy {
128 u8 attached_sas_addr[SAS_ADDR_SIZE]; 131 u8 attached_sas_addr[SAS_ADDR_SIZE];
129 u8 attached_phy_id; 132 u8 attached_phy_id;
130 133
131 u8 phy_change_count; 134 int phy_change_count;
132 enum routing_attribute routing_attr; 135 enum routing_attribute routing_attr;
133 u8 virtual:1; 136 u8 virtual:1;
134 137
@@ -141,7 +144,7 @@ struct ex_phy {
141struct expander_device { 144struct expander_device {
142 struct list_head children; 145 struct list_head children;
143 146
144 u16 ex_change_count; 147 int ex_change_count;
145 u16 max_route_indexes; 148 u16 max_route_indexes;
146 u8 num_phys; 149 u8 num_phys;
147 150
@@ -169,6 +172,7 @@ struct sata_device {
169 enum ata_command_set command_set; 172 enum ata_command_set command_set;
170 struct smp_resp rps_resp; /* report_phy_sata_resp */ 173 struct smp_resp rps_resp; /* report_phy_sata_resp */
171 u8 port_no; /* port number, if this is a PM (Port) */ 174 u8 port_no; /* port number, if this is a PM (Port) */
175 int pm_result;
172 176
173 struct ata_port *ap; 177 struct ata_port *ap;
174 struct ata_host ata_host; 178 struct ata_host ata_host;
@@ -182,6 +186,7 @@ struct ssp_device {
182 186
183enum { 187enum {
184 SAS_DEV_GONE, 188 SAS_DEV_GONE,
189 SAS_DEV_FOUND, /* device notified to lldd */
185 SAS_DEV_DESTROY, 190 SAS_DEV_DESTROY,
186 SAS_DEV_EH_PENDING, 191 SAS_DEV_EH_PENDING,
187 SAS_DEV_LU_RESET, 192 SAS_DEV_LU_RESET,
@@ -273,6 +278,7 @@ struct asd_sas_port {
273 enum sas_linkrate linkrate; 278 enum sas_linkrate linkrate;
274 279
275 struct sas_work work; 280 struct sas_work work;
281 int suspended;
276 282
277/* public: */ 283/* public: */
278 int id; 284 int id;
@@ -321,6 +327,7 @@ struct asd_sas_phy {
321 unsigned long phy_events_pending; 327 unsigned long phy_events_pending;
322 328
323 int error; 329 int error;
330 int suspended;
324 331
325 struct sas_phy *phy; 332 struct sas_phy *phy;
326 333
@@ -687,6 +694,9 @@ struct sas_domain_function_template {
687 694
688extern int sas_register_ha(struct sas_ha_struct *); 695extern int sas_register_ha(struct sas_ha_struct *);
689extern int sas_unregister_ha(struct sas_ha_struct *); 696extern int sas_unregister_ha(struct sas_ha_struct *);
697extern void sas_prep_resume_ha(struct sas_ha_struct *sas_ha);
698extern void sas_resume_ha(struct sas_ha_struct *sas_ha);
699extern void sas_suspend_ha(struct sas_ha_struct *sas_ha);
690 700
691int sas_set_phy_speed(struct sas_phy *phy, 701int sas_set_phy_speed(struct sas_phy *phy,
692 struct sas_phy_linkrates *rates); 702 struct sas_phy_linkrates *rates);
diff --git a/include/scsi/sas_ata.h b/include/scsi/sas_ata.h
index 2dfbdaa0b34a..ff71a5654684 100644
--- a/include/scsi/sas_ata.h
+++ b/include/scsi/sas_ata.h
@@ -45,6 +45,8 @@ void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q,
45void sas_ata_schedule_reset(struct domain_device *dev); 45void sas_ata_schedule_reset(struct domain_device *dev);
46void sas_ata_wait_eh(struct domain_device *dev); 46void sas_ata_wait_eh(struct domain_device *dev);
47void sas_probe_sata(struct asd_sas_port *port); 47void sas_probe_sata(struct asd_sas_port *port);
48void sas_suspend_sata(struct asd_sas_port *port);
49void sas_resume_sata(struct asd_sas_port *port);
48void sas_ata_end_eh(struct ata_port *ap); 50void sas_ata_end_eh(struct ata_port *ap);
49#else 51#else
50 52
@@ -82,6 +84,14 @@ static inline void sas_probe_sata(struct asd_sas_port *port)
82{ 84{
83} 85}
84 86
87static inline void sas_suspend_sata(struct asd_sas_port *port)
88{
89}
90
91static inline void sas_resume_sata(struct asd_sas_port *port)
92{
93}
94
85static inline int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy) 95static inline int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy)
86{ 96{
87 return 0; 97 return 0;
diff --git a/include/scsi/scsi_bsg_fc.h b/include/scsi/scsi_bsg_fc.h
index 91a4e4ff9a9b..3031b900b087 100644
--- a/include/scsi/scsi_bsg_fc.h
+++ b/include/scsi/scsi_bsg_fc.h
@@ -26,8 +26,6 @@
26 * This file intended to be included by both kernel and user space 26 * This file intended to be included by both kernel and user space
27 */ 27 */
28 28
29#include <scsi/scsi.h>
30
31/* 29/*
32 * FC Transport SGIO v4 BSG Message Support 30 * FC Transport SGIO v4 BSG Message Support
33 */ 31 */
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 9895f69294fc..88fae8d20154 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -156,6 +156,7 @@ struct scsi_device {
156 unsigned is_visible:1; /* is the device visible in sysfs */ 156 unsigned is_visible:1; /* is the device visible in sysfs */
157 unsigned can_power_off:1; /* Device supports runtime power off */ 157 unsigned can_power_off:1; /* Device supports runtime power off */
158 unsigned wce_default_on:1; /* Cache is ON by default */ 158 unsigned wce_default_on:1; /* Cache is ON by default */
159 unsigned no_dif:1; /* T10 PI (DIF) should be disabled */
159 160
160 DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ 161 DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
161 struct list_head event_list; /* asserted events */ 162 struct list_head event_list; /* asserted events */
@@ -476,6 +477,9 @@ static inline int scsi_device_enclosure(struct scsi_device *sdev)
476 477
477static inline int scsi_device_protection(struct scsi_device *sdev) 478static inline int scsi_device_protection(struct scsi_device *sdev)
478{ 479{
480 if (sdev->no_dif)
481 return 0;
482
479 return sdev->scsi_level > SCSI_2 && sdev->inquiry[5] & (1<<0); 483 return sdev->scsi_level > SCSI_2 && sdev->inquiry[5] & (1<<0);
480} 484}
481 485
diff --git a/include/scsi/scsi_devinfo.h b/include/scsi/scsi_devinfo.h
index b4ddd3b18b4c..cc1f3e786ad7 100644
--- a/include/scsi/scsi_devinfo.h
+++ b/include/scsi/scsi_devinfo.h
@@ -30,4 +30,5 @@
30#define BLIST_RETRY_HWERROR 0x400000 /* retry HARDWARE_ERROR */ 30#define BLIST_RETRY_HWERROR 0x400000 /* retry HARDWARE_ERROR */
31#define BLIST_MAX_512 0x800000 /* maximum 512 sector cdb length */ 31#define BLIST_MAX_512 0x800000 /* maximum 512 sector cdb length */
32#define BLIST_ATTACH_PQ3 0x1000000 /* Scan: Attach to PQ3 devices */ 32#define BLIST_ATTACH_PQ3 0x1000000 /* Scan: Attach to PQ3 devices */
33#define BLIST_NO_DIF 0x2000000 /* Disable T10 PI (DIF) */
33#endif 34#endif
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 5f7d5b3b1c6e..49084807eb6b 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -873,6 +873,9 @@ static inline unsigned int scsi_host_dif_capable(struct Scsi_Host *shost, unsign
873 SHOST_DIF_TYPE2_PROTECTION, 873 SHOST_DIF_TYPE2_PROTECTION,
874 SHOST_DIF_TYPE3_PROTECTION }; 874 SHOST_DIF_TYPE3_PROTECTION };
875 875
876 if (target_type > SHOST_DIF_TYPE3_PROTECTION)
877 return 0;
878
876 return shost->prot_capabilities & cap[target_type] ? target_type : 0; 879 return shost->prot_capabilities & cap[target_type] ? target_type : 0;
877} 880}
878 881
@@ -884,6 +887,9 @@ static inline unsigned int scsi_host_dix_capable(struct Scsi_Host *shost, unsign
884 SHOST_DIX_TYPE2_PROTECTION, 887 SHOST_DIX_TYPE2_PROTECTION,
885 SHOST_DIX_TYPE3_PROTECTION }; 888 SHOST_DIX_TYPE3_PROTECTION };
886 889
890 if (target_type > SHOST_DIX_TYPE3_PROTECTION)
891 return 0;
892
887 return shost->prot_capabilities & cap[target_type]; 893 return shost->prot_capabilities & cap[target_type];
888#endif 894#endif
889 return 0; 895 return 0;