| .. | .. | 
|---|
 | 1 | +/* SPDX-License-Identifier: GPL-2.0-or-later */  | 
|---|
| 1 | 2 |  /* | 
|---|
| 2 | 3 |   *  Copyright 2003-2005 Red Hat, Inc.  All rights reserved. | 
|---|
| 3 | 4 |   *  Copyright 2003-2005 Jeff Garzik | 
|---|
| 4 | 5 |   * | 
|---|
| 5 |  | - *  | 
|---|
| 6 |  | - *  This program is free software; you can redistribute it and/or modify  | 
|---|
| 7 |  | - *  it under the terms of the GNU General Public License as published by  | 
|---|
| 8 |  | - *  the Free Software Foundation; either version 2, or (at your option)  | 
|---|
| 9 |  | - *  any later version.  | 
|---|
| 10 |  | - *  | 
|---|
| 11 |  | - *  This program is distributed in the hope that it will be useful,  | 
|---|
| 12 |  | - *  but WITHOUT ANY WARRANTY; without even the implied warranty of  | 
|---|
| 13 |  | - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  | 
|---|
| 14 |  | - *  GNU General Public License for more details.  | 
|---|
| 15 |  | - *  | 
|---|
| 16 |  | - *  You should have received a copy of the GNU General Public License  | 
|---|
| 17 |  | - *  along with this program; see the file COPYING.  If not, write to  | 
|---|
| 18 |  | - *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  | 
|---|
| 19 |  | - *  | 
|---|
| 20 |  | - *  | 
|---|
| 21 | 6 |   *  libata documentation is available via 'make {ps|pdf}docs', | 
|---|
| 22 | 7 |   *  as Documentation/driver-api/libata.rst | 
|---|
| 23 |  | - *  | 
|---|
| 24 | 8 |   */ | 
|---|
| 25 | 9 |   | 
|---|
| 26 | 10 |  #ifndef __LINUX_LIBATA_H__ | 
|---|
| .. | .. | 
|---|
| 73 | 57 |  #define DPRINTK(fmt, args...) | 
|---|
| 74 | 58 |  #define VPRINTK(fmt, args...) | 
|---|
| 75 | 59 |  #endif	/* ATA_DEBUG */ | 
|---|
| 76 |  | -  | 
|---|
| 77 |  | -#define BPRINTK(fmt, args...) if (ap->flags & ATA_FLAG_DEBUGMSG) printk(KERN_ERR "%s: " fmt, __func__, ## args)  | 
|---|
| 78 | 60 |   | 
|---|
| 79 | 61 |  #define ata_print_version_once(dev, version)			\ | 
|---|
| 80 | 62 |  ({								\ | 
|---|
| .. | .. | 
|---|
| 136 | 118 |   | 
|---|
| 137 | 119 |  	ATA_SHT_EMULATED	= 1, | 
|---|
| 138 | 120 |  	ATA_SHT_THIS_ID		= -1, | 
|---|
| 139 |  | -	ATA_SHT_USE_CLUSTERING	= 1,  | 
|---|
| 140 | 121 |   | 
|---|
| 141 | 122 |  	/* struct ata_taskfile flags */ | 
|---|
| 142 | 123 |  	ATA_TFLAG_LBA48		= (1 << 0), /* enable 48-bit LBA and "HOB" */ | 
|---|
| .. | .. | 
|---|
| 194 | 175 |  	ATA_DEV_NONE		= 11,	/* no device */ | 
|---|
| 195 | 176 |   | 
|---|
| 196 | 177 |  	/* struct ata_link flags */ | 
|---|
 | 178 | +	/* NOTE: struct ata_force_param currently stores lflags in u16 */  | 
|---|
| 197 | 179 |  	ATA_LFLAG_NO_HRST	= (1 << 1), /* avoid hardreset */ | 
|---|
| 198 | 180 |  	ATA_LFLAG_NO_SRST	= (1 << 2), /* avoid softreset */ | 
|---|
| 199 | 181 |  	ATA_LFLAG_ASSUME_ATA	= (1 << 3), /* assume ATA class */ | 
|---|
| .. | .. | 
|---|
| 205 | 187 |  	ATA_LFLAG_NO_LPM	= (1 << 8), /* disable LPM on this link */ | 
|---|
| 206 | 188 |  	ATA_LFLAG_RST_ONCE	= (1 << 9), /* limit recovery to one reset */ | 
|---|
| 207 | 189 |  	ATA_LFLAG_CHANGED	= (1 << 10), /* LPM state changed on this link */ | 
|---|
| 208 |  | -	ATA_LFLAG_NO_DB_DELAY	= (1 << 11), /* no debounce delay on link resume */  | 
|---|
 | 190 | +	ATA_LFLAG_NO_DEBOUNCE_DELAY = (1 << 11), /* no debounce delay on link resume */  | 
|---|
| 209 | 191 |   | 
|---|
| 210 | 192 |  	/* struct ata_port flags */ | 
|---|
| 211 | 193 |  	ATA_FLAG_SLAVE_POSS	= (1 << 0), /* host supports slave dev */ | 
|---|
| .. | .. | 
|---|
| 278 | 260 |  	ATA_HOST_PARALLEL_SCAN	= (1 << 2),	/* Ports on this host can be scanned in parallel */ | 
|---|
| 279 | 261 |  	ATA_HOST_IGNORE_ATA	= (1 << 3),	/* Ignore ATA devices on this host. */ | 
|---|
| 280 | 262 |   | 
|---|
 | 263 | +	ATA_HOST_NO_PART	= (1 << 4), /* Host does not support partial */  | 
|---|
 | 264 | +	ATA_HOST_NO_SSC		= (1 << 5), /* Host does not support slumber */  | 
|---|
 | 265 | +	ATA_HOST_NO_DEVSLP	= (1 << 6), /* Host does not support devslp */  | 
|---|
 | 266 | +  | 
|---|
| 281 | 267 |  	/* bits 24:31 of host->flags are reserved for LLD specific flags */ | 
|---|
| 282 | 268 |   | 
|---|
| 283 | 269 |  	/* various lengths of time */ | 
|---|
| .. | .. | 
|---|
| 311 | 297 |  	 * advised to wait only for the following duration before | 
|---|
| 312 | 298 |  	 * doing SRST. | 
|---|
| 313 | 299 |  	 */ | 
|---|
| 314 |  | -	ATA_TMOUT_PMP_SRST_WAIT	= 5000,  | 
|---|
 | 300 | +	ATA_TMOUT_PMP_SRST_WAIT	= 10000,  | 
|---|
| 315 | 301 |   | 
|---|
| 316 | 302 |  	/* When the LPM policy is set to ATA_LPM_MAX_POWER, there might | 
|---|
| 317 | 303 |  	 * be a spurious PHY event, so ignore the first PHY event that | 
|---|
| .. | .. | 
|---|
| 551 | 537 |  			      unsigned long deadline); | 
|---|
| 552 | 538 |  typedef void (*ata_postreset_fn_t)(struct ata_link *link, unsigned int *classes); | 
|---|
| 553 | 539 |   | 
|---|
| 554 |  | -extern struct device_attribute dev_attr_link_power_management_policy;  | 
|---|
| 555 | 540 |  extern struct device_attribute dev_attr_unload_heads; | 
|---|
 | 541 | +#ifdef CONFIG_SATA_HOST  | 
|---|
 | 542 | +extern struct device_attribute dev_attr_link_power_management_policy;  | 
|---|
| 556 | 543 |  extern struct device_attribute dev_attr_ncq_prio_enable; | 
|---|
| 557 | 544 |  extern struct device_attribute dev_attr_em_message_type; | 
|---|
| 558 | 545 |  extern struct device_attribute dev_attr_em_message; | 
|---|
| 559 | 546 |  extern struct device_attribute dev_attr_sw_activity; | 
|---|
 | 547 | +#endif  | 
|---|
| 560 | 548 |   | 
|---|
| 561 | 549 |  enum sw_activity { | 
|---|
| 562 | 550 |  	OFF, | 
|---|
| .. | .. | 
|---|
| 628 | 616 |  	struct task_struct	*eh_owner; | 
|---|
| 629 | 617 |   | 
|---|
| 630 | 618 |  	struct ata_port		*simplex_claimed;	/* channel owning the DMA */ | 
|---|
| 631 |  | -	struct ata_port		*ports[0];  | 
|---|
 | 619 | +	struct ata_port		*ports[];  | 
|---|
| 632 | 620 |  }; | 
|---|
| 633 | 621 |   | 
|---|
| 634 | 622 |  struct ata_queued_cmd { | 
|---|
| .. | .. | 
|---|
| 1042 | 1030 |  /* | 
|---|
| 1043 | 1031 |   * Core layer - drivers/ata/libata-core.c | 
|---|
| 1044 | 1032 |   */ | 
|---|
| 1045 |  | -extern const unsigned long sata_deb_timing_normal[];  | 
|---|
| 1046 |  | -extern const unsigned long sata_deb_timing_hotplug[];  | 
|---|
| 1047 |  | -extern const unsigned long sata_deb_timing_long[];  | 
|---|
| 1048 |  | -  | 
|---|
| 1049 | 1033 |  extern struct ata_port_operations ata_dummy_port_ops; | 
|---|
| 1050 | 1034 |  extern const struct ata_port_info ata_dummy_port_info; | 
|---|
| 1051 | 1035 |   | 
|---|
| .. | .. | 
|---|
| 1083 | 1067 |  	       (tf->command == ATA_CMD_WRITE_MULTI_FUA_EXT); | 
|---|
| 1084 | 1068 |  } | 
|---|
| 1085 | 1069 |   | 
|---|
| 1086 |  | -static inline const unsigned long *  | 
|---|
| 1087 |  | -sata_ehc_deb_timing(struct ata_eh_context *ehc)  | 
|---|
| 1088 |  | -{  | 
|---|
| 1089 |  | -	if (ehc->i.flags & ATA_EHI_HOTPLUGGED)  | 
|---|
| 1090 |  | -		return sata_deb_timing_hotplug;  | 
|---|
| 1091 |  | -	else  | 
|---|
| 1092 |  | -		return sata_deb_timing_normal;  | 
|---|
| 1093 |  | -}  | 
|---|
| 1094 |  | -  | 
|---|
| 1095 | 1070 |  static inline int ata_port_is_dummy(struct ata_port *ap) | 
|---|
| 1096 | 1071 |  { | 
|---|
| 1097 | 1072 |  	return ap->ops == &ata_dummy_port_ops; | 
|---|
| 1098 | 1073 |  } | 
|---|
| 1099 | 1074 |   | 
|---|
| 1100 |  | -extern int sata_set_spd(struct ata_link *link);  | 
|---|
| 1101 | 1075 |  extern int ata_std_prereset(struct ata_link *link, unsigned long deadline); | 
|---|
| 1102 | 1076 |  extern int ata_wait_after_reset(struct ata_link *link, unsigned long deadline, | 
|---|
| 1103 | 1077 |  				int (*check_ready)(struct ata_link *link)); | 
|---|
| 1104 |  | -extern int sata_link_debounce(struct ata_link *link,  | 
|---|
| 1105 |  | -			const unsigned long *params, unsigned long deadline);  | 
|---|
| 1106 |  | -extern int sata_link_resume(struct ata_link *link, const unsigned long *params,  | 
|---|
| 1107 |  | -			    unsigned long deadline);  | 
|---|
| 1108 |  | -extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,  | 
|---|
| 1109 |  | -			     bool spm_wakeup);  | 
|---|
| 1110 |  | -extern int sata_link_hardreset(struct ata_link *link,  | 
|---|
| 1111 |  | -			const unsigned long *timing, unsigned long deadline,  | 
|---|
| 1112 |  | -			bool *online, int (*check_ready)(struct ata_link *));  | 
|---|
| 1113 | 1078 |  extern int sata_std_hardreset(struct ata_link *link, unsigned int *class, | 
|---|
| 1114 | 1079 |  			      unsigned long deadline); | 
|---|
| 1115 | 1080 |  extern void ata_std_postreset(struct ata_link *link, unsigned int *classes); | 
|---|
| .. | .. | 
|---|
| 1117 | 1082 |  extern struct ata_host *ata_host_alloc(struct device *dev, int max_ports); | 
|---|
| 1118 | 1083 |  extern struct ata_host *ata_host_alloc_pinfo(struct device *dev, | 
|---|
| 1119 | 1084 |  			const struct ata_port_info * const * ppi, int n_ports); | 
|---|
| 1120 |  | -extern int ata_slave_link_init(struct ata_port *ap);  | 
|---|
| 1121 | 1085 |  extern void ata_host_get(struct ata_host *host); | 
|---|
| 1122 | 1086 |  extern void ata_host_put(struct ata_host *host); | 
|---|
| 1123 | 1087 |  extern int ata_host_start(struct ata_host *host); | 
|---|
| .. | .. | 
|---|
| 1129 | 1093 |  extern void ata_host_detach(struct ata_host *host); | 
|---|
| 1130 | 1094 |  extern void ata_host_init(struct ata_host *, struct device *, struct ata_port_operations *); | 
|---|
| 1131 | 1095 |  extern int ata_scsi_detect(struct scsi_host_template *sht); | 
|---|
| 1132 |  | -extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);  | 
|---|
 | 1096 | +extern int ata_scsi_ioctl(struct scsi_device *dev, unsigned int cmd,  | 
|---|
 | 1097 | +			  void __user *arg);  | 
|---|
 | 1098 | +#ifdef CONFIG_COMPAT  | 
|---|
 | 1099 | +#define ATA_SCSI_COMPAT_IOCTL .compat_ioctl = ata_scsi_ioctl,  | 
|---|
 | 1100 | +#else  | 
|---|
 | 1101 | +#define ATA_SCSI_COMPAT_IOCTL /* empty */  | 
|---|
 | 1102 | +#endif  | 
|---|
| 1133 | 1103 |  extern int ata_scsi_queuecmd(struct Scsi_Host *h, struct scsi_cmnd *cmd); | 
|---|
 | 1104 | +#if IS_REACHABLE(CONFIG_ATA)  | 
|---|
 | 1105 | +bool ata_scsi_dma_need_drain(struct request *rq);  | 
|---|
 | 1106 | +#else  | 
|---|
 | 1107 | +#define ata_scsi_dma_need_drain NULL  | 
|---|
 | 1108 | +#endif  | 
|---|
| 1134 | 1109 |  extern int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *dev, | 
|---|
| 1135 |  | -			    int cmd, void __user *arg);  | 
|---|
| 1136 |  | -extern void ata_sas_port_destroy(struct ata_port *);  | 
|---|
| 1137 |  | -extern struct ata_port *ata_sas_port_alloc(struct ata_host *,  | 
|---|
| 1138 |  | -					   struct ata_port_info *, struct Scsi_Host *);  | 
|---|
| 1139 |  | -extern void ata_sas_async_probe(struct ata_port *ap);  | 
|---|
| 1140 |  | -extern int ata_sas_sync_probe(struct ata_port *ap);  | 
|---|
| 1141 |  | -extern int ata_sas_port_init(struct ata_port *);  | 
|---|
| 1142 |  | -extern int ata_sas_port_start(struct ata_port *ap);  | 
|---|
| 1143 |  | -extern int ata_sas_tport_add(struct device *parent, struct ata_port *ap);  | 
|---|
| 1144 |  | -extern void ata_sas_tport_delete(struct ata_port *ap);  | 
|---|
| 1145 |  | -extern void ata_sas_port_stop(struct ata_port *ap);  | 
|---|
| 1146 |  | -extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *);  | 
|---|
| 1147 |  | -extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap);  | 
|---|
| 1148 |  | -extern int sata_scr_valid(struct ata_link *link);  | 
|---|
| 1149 |  | -extern int sata_scr_read(struct ata_link *link, int reg, u32 *val);  | 
|---|
| 1150 |  | -extern int sata_scr_write(struct ata_link *link, int reg, u32 val);  | 
|---|
| 1151 |  | -extern int sata_scr_write_flush(struct ata_link *link, int reg, u32 val);  | 
|---|
 | 1110 | +			    unsigned int cmd, void __user *arg);  | 
|---|
| 1152 | 1111 |  extern bool ata_link_online(struct ata_link *link); | 
|---|
| 1153 | 1112 |  extern bool ata_link_offline(struct ata_link *link); | 
|---|
| 1154 | 1113 |  #ifdef CONFIG_PM | 
|---|
| .. | .. | 
|---|
| 1169 | 1128 |  extern u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask, | 
|---|
| 1170 | 1129 |  			u32 val, unsigned long interval, unsigned long timeout); | 
|---|
| 1171 | 1130 |  extern int atapi_cmd_type(u8 opcode); | 
|---|
| 1172 |  | -extern void ata_tf_to_fis(const struct ata_taskfile *tf,  | 
|---|
| 1173 |  | -			  u8 pmp, int is_cmd, u8 *fis);  | 
|---|
| 1174 |  | -extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf);  | 
|---|
| 1175 | 1131 |  extern unsigned long ata_pack_xfermask(unsigned long pio_mask, | 
|---|
| 1176 | 1132 |  			unsigned long mwdma_mask, unsigned long udma_mask); | 
|---|
| 1177 | 1133 |  extern void ata_unpack_xfermask(unsigned long xfer_mask, | 
|---|
| .. | .. | 
|---|
| 1195 | 1151 |  extern unsigned int ata_do_dev_read_id(struct ata_device *dev, | 
|---|
| 1196 | 1152 |  					struct ata_taskfile *tf, u16 *id); | 
|---|
| 1197 | 1153 |  extern void ata_qc_complete(struct ata_queued_cmd *qc); | 
|---|
| 1198 |  | -extern int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active);  | 
|---|
| 1199 | 1154 |  extern u64 ata_qc_get_active(struct ata_port *ap); | 
|---|
| 1200 | 1155 |  extern void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd); | 
|---|
| 1201 | 1156 |  extern int ata_std_bios_param(struct scsi_device *sdev, | 
|---|
| .. | .. | 
|---|
| 1212 | 1167 |  extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev); | 
|---|
| 1213 | 1168 |  extern void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap); | 
|---|
| 1214 | 1169 |  extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap, struct list_head *eh_q); | 
|---|
 | 1170 | +  | 
|---|
 | 1171 | +/*  | 
|---|
 | 1172 | + * SATA specific code - drivers/ata/libata-sata.c  | 
|---|
 | 1173 | + */  | 
|---|
 | 1174 | +#ifdef CONFIG_SATA_HOST  | 
|---|
 | 1175 | +extern const unsigned long sata_deb_timing_normal[];  | 
|---|
 | 1176 | +extern const unsigned long sata_deb_timing_hotplug[];  | 
|---|
 | 1177 | +extern const unsigned long sata_deb_timing_long[];  | 
|---|
 | 1178 | +  | 
|---|
 | 1179 | +static inline const unsigned long *  | 
|---|
 | 1180 | +sata_ehc_deb_timing(struct ata_eh_context *ehc)  | 
|---|
 | 1181 | +{  | 
|---|
 | 1182 | +	if (ehc->i.flags & ATA_EHI_HOTPLUGGED)  | 
|---|
 | 1183 | +		return sata_deb_timing_hotplug;  | 
|---|
 | 1184 | +	else  | 
|---|
 | 1185 | +		return sata_deb_timing_normal;  | 
|---|
 | 1186 | +}  | 
|---|
 | 1187 | +  | 
|---|
 | 1188 | +extern int sata_scr_valid(struct ata_link *link);  | 
|---|
 | 1189 | +extern int sata_scr_read(struct ata_link *link, int reg, u32 *val);  | 
|---|
 | 1190 | +extern int sata_scr_write(struct ata_link *link, int reg, u32 val);  | 
|---|
 | 1191 | +extern int sata_scr_write_flush(struct ata_link *link, int reg, u32 val);  | 
|---|
 | 1192 | +extern int sata_set_spd(struct ata_link *link);  | 
|---|
 | 1193 | +extern int sata_link_hardreset(struct ata_link *link,  | 
|---|
 | 1194 | +			const unsigned long *timing, unsigned long deadline,  | 
|---|
 | 1195 | +			bool *online, int (*check_ready)(struct ata_link *));  | 
|---|
 | 1196 | +extern int sata_link_resume(struct ata_link *link, const unsigned long *params,  | 
|---|
 | 1197 | +			    unsigned long deadline);  | 
|---|
 | 1198 | +extern void ata_eh_analyze_ncq_error(struct ata_link *link);  | 
|---|
 | 1199 | +#else  | 
|---|
 | 1200 | +static inline const unsigned long *  | 
|---|
 | 1201 | +sata_ehc_deb_timing(struct ata_eh_context *ehc)  | 
|---|
 | 1202 | +{  | 
|---|
 | 1203 | +	return NULL;  | 
|---|
 | 1204 | +}  | 
|---|
 | 1205 | +static inline int sata_scr_valid(struct ata_link *link) { return 0; }  | 
|---|
 | 1206 | +static inline int sata_scr_read(struct ata_link *link, int reg, u32 *val)  | 
|---|
 | 1207 | +{  | 
|---|
 | 1208 | +	return -EOPNOTSUPP;  | 
|---|
 | 1209 | +}  | 
|---|
 | 1210 | +static inline int sata_scr_write(struct ata_link *link, int reg, u32 val)  | 
|---|
 | 1211 | +{  | 
|---|
 | 1212 | +	return -EOPNOTSUPP;  | 
|---|
 | 1213 | +}  | 
|---|
 | 1214 | +static inline int sata_scr_write_flush(struct ata_link *link, int reg, u32 val)  | 
|---|
 | 1215 | +{  | 
|---|
 | 1216 | +	return -EOPNOTSUPP;  | 
|---|
 | 1217 | +}  | 
|---|
 | 1218 | +static inline int sata_set_spd(struct ata_link *link) { return -EOPNOTSUPP; }  | 
|---|
 | 1219 | +static inline int sata_link_hardreset(struct ata_link *link,  | 
|---|
 | 1220 | +				      const unsigned long *timing,  | 
|---|
 | 1221 | +				      unsigned long deadline,  | 
|---|
 | 1222 | +				      bool *online,  | 
|---|
 | 1223 | +				      int (*check_ready)(struct ata_link *))  | 
|---|
 | 1224 | +{  | 
|---|
 | 1225 | +	if (online)  | 
|---|
 | 1226 | +		*online = false;  | 
|---|
 | 1227 | +	return -EOPNOTSUPP;  | 
|---|
 | 1228 | +}  | 
|---|
 | 1229 | +static inline int sata_link_resume(struct ata_link *link,  | 
|---|
 | 1230 | +				   const unsigned long *params,  | 
|---|
 | 1231 | +				   unsigned long deadline)  | 
|---|
 | 1232 | +{  | 
|---|
 | 1233 | +	return -EOPNOTSUPP;  | 
|---|
 | 1234 | +}  | 
|---|
 | 1235 | +static inline void ata_eh_analyze_ncq_error(struct ata_link *link) { }  | 
|---|
 | 1236 | +#endif  | 
|---|
 | 1237 | +extern int sata_link_debounce(struct ata_link *link,  | 
|---|
 | 1238 | +			const unsigned long *params, unsigned long deadline);  | 
|---|
 | 1239 | +extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,  | 
|---|
 | 1240 | +			     bool spm_wakeup);  | 
|---|
 | 1241 | +extern int ata_slave_link_init(struct ata_port *ap);  | 
|---|
 | 1242 | +extern void ata_sas_port_destroy(struct ata_port *);  | 
|---|
 | 1243 | +extern struct ata_port *ata_sas_port_alloc(struct ata_host *,  | 
|---|
 | 1244 | +					   struct ata_port_info *, struct Scsi_Host *);  | 
|---|
 | 1245 | +extern void ata_sas_async_probe(struct ata_port *ap);  | 
|---|
 | 1246 | +extern int ata_sas_sync_probe(struct ata_port *ap);  | 
|---|
 | 1247 | +extern int ata_sas_port_init(struct ata_port *);  | 
|---|
 | 1248 | +extern int ata_sas_port_start(struct ata_port *ap);  | 
|---|
 | 1249 | +extern int ata_sas_tport_add(struct device *parent, struct ata_port *ap);  | 
|---|
 | 1250 | +extern void ata_sas_tport_delete(struct ata_port *ap);  | 
|---|
 | 1251 | +extern void ata_sas_port_stop(struct ata_port *ap);  | 
|---|
 | 1252 | +extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *);  | 
|---|
 | 1253 | +extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap);  | 
|---|
 | 1254 | +extern void ata_tf_to_fis(const struct ata_taskfile *tf,  | 
|---|
 | 1255 | +			  u8 pmp, int is_cmd, u8 *fis);  | 
|---|
 | 1256 | +extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf);  | 
|---|
 | 1257 | +extern int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active);  | 
|---|
| 1215 | 1258 |  extern bool sata_lpm_ignore_phy_events(struct ata_link *link); | 
|---|
 | 1259 | +extern int sata_async_notification(struct ata_port *ap);  | 
|---|
| 1216 | 1260 |   | 
|---|
| 1217 | 1261 |  extern int ata_cable_40wire(struct ata_port *ap); | 
|---|
| 1218 | 1262 |  extern int ata_cable_80wire(struct ata_port *ap); | 
|---|
| .. | .. | 
|---|
| 1222 | 1266 |   | 
|---|
| 1223 | 1267 |  /* Timing helpers */ | 
|---|
| 1224 | 1268 |  extern unsigned int ata_pio_need_iordy(const struct ata_device *); | 
|---|
| 1225 |  | -extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode);  | 
|---|
| 1226 |  | -extern int ata_timing_compute(struct ata_device *, unsigned short,  | 
|---|
| 1227 |  | -			      struct ata_timing *, int, int);  | 
|---|
| 1228 |  | -extern void ata_timing_merge(const struct ata_timing *,  | 
|---|
| 1229 |  | -			     const struct ata_timing *, struct ata_timing *,  | 
|---|
| 1230 |  | -			     unsigned int);  | 
|---|
| 1231 | 1269 |  extern u8 ata_timing_cycle2mode(unsigned int xfer_shift, int cycle); | 
|---|
| 1232 | 1270 |   | 
|---|
| 1233 | 1271 |  /* PCI */ | 
|---|
| .. | .. | 
|---|
| 1311 | 1349 |  extern int ata_link_abort(struct ata_link *link); | 
|---|
| 1312 | 1350 |  extern int ata_port_abort(struct ata_port *ap); | 
|---|
| 1313 | 1351 |  extern int ata_port_freeze(struct ata_port *ap); | 
|---|
| 1314 |  | -extern int sata_async_notification(struct ata_port *ap);  | 
|---|
| 1315 | 1352 |   | 
|---|
| 1316 | 1353 |  extern void ata_eh_freeze_port(struct ata_port *ap); | 
|---|
| 1317 | 1354 |  extern void ata_eh_thaw_port(struct ata_port *ap); | 
|---|
| 1318 | 1355 |   | 
|---|
| 1319 | 1356 |  extern void ata_eh_qc_complete(struct ata_queued_cmd *qc); | 
|---|
| 1320 | 1357 |  extern void ata_eh_qc_retry(struct ata_queued_cmd *qc); | 
|---|
| 1321 |  | -extern void ata_eh_analyze_ncq_error(struct ata_link *link);  | 
|---|
| 1322 | 1358 |   | 
|---|
| 1323 | 1359 |  extern void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset, | 
|---|
| 1324 | 1360 |  		      ata_reset_fn_t softreset, ata_reset_fn_t hardreset, | 
|---|
| .. | .. | 
|---|
| 1359 | 1395 |   * edge driver's module reference, otherwise the driver can be unloaded | 
|---|
| 1360 | 1396 |   * even if the scsi_device is being accessed. | 
|---|
| 1361 | 1397 |   */ | 
|---|
| 1362 |  | -#define ATA_BASE_SHT(drv_name)					\  | 
|---|
 | 1398 | +#define __ATA_BASE_SHT(drv_name)				\  | 
|---|
| 1363 | 1399 |  	.module			= THIS_MODULE,			\ | 
|---|
| 1364 | 1400 |  	.name			= drv_name,			\ | 
|---|
| 1365 | 1401 |  	.ioctl			= ata_scsi_ioctl,		\ | 
|---|
 | 1402 | +	ATA_SCSI_COMPAT_IOCTL					\  | 
|---|
| 1366 | 1403 |  	.queuecommand		= ata_scsi_queuecmd,		\ | 
|---|
 | 1404 | +	.dma_need_drain		= ata_scsi_dma_need_drain,	\  | 
|---|
| 1367 | 1405 |  	.can_queue		= ATA_DEF_QUEUE,		\ | 
|---|
| 1368 | 1406 |  	.tag_alloc_policy	= BLK_TAG_ALLOC_RR,		\ | 
|---|
| 1369 | 1407 |  	.this_id		= ATA_SHT_THIS_ID,		\ | 
|---|
| 1370 | 1408 |  	.emulated		= ATA_SHT_EMULATED,		\ | 
|---|
| 1371 |  | -	.use_clustering		= ATA_SHT_USE_CLUSTERING,	\  | 
|---|
| 1372 | 1409 |  	.proc_name		= drv_name,			\ | 
|---|
| 1373 | 1410 |  	.slave_configure	= ata_scsi_slave_config,	\ | 
|---|
| 1374 | 1411 |  	.slave_destroy		= ata_scsi_slave_destroy,	\ | 
|---|
| 1375 | 1412 |  	.bios_param		= ata_std_bios_param,		\ | 
|---|
| 1376 |  | -	.unlock_native_capacity	= ata_scsi_unlock_native_capacity, \  | 
|---|
 | 1413 | +	.unlock_native_capacity	= ata_scsi_unlock_native_capacity  | 
|---|
 | 1414 | +  | 
|---|
 | 1415 | +#define ATA_BASE_SHT(drv_name)					\  | 
|---|
 | 1416 | +	__ATA_BASE_SHT(drv_name),				\  | 
|---|
| 1377 | 1417 |  	.sdev_attrs		= ata_common_sdev_attrs | 
|---|
| 1378 | 1418 |   | 
|---|
 | 1419 | +#ifdef CONFIG_SATA_HOST  | 
|---|
 | 1420 | +extern struct device_attribute *ata_ncq_sdev_attrs[];  | 
|---|
 | 1421 | +  | 
|---|
| 1379 | 1422 |  #define ATA_NCQ_SHT(drv_name)					\ | 
|---|
| 1380 |  | -	ATA_BASE_SHT(drv_name),					\  | 
|---|
 | 1423 | +	__ATA_BASE_SHT(drv_name),				\  | 
|---|
 | 1424 | +	.sdev_attrs		= ata_ncq_sdev_attrs,		\  | 
|---|
| 1381 | 1425 |  	.change_queue_depth	= ata_scsi_change_queue_depth | 
|---|
 | 1426 | +#endif  | 
|---|
| 1382 | 1427 |   | 
|---|
| 1383 | 1428 |  /* | 
|---|
| 1384 | 1429 |   * PMP helpers | 
|---|
| .. | .. | 
|---|
| 1651 | 1696 |   */ | 
|---|
| 1652 | 1697 |  static inline int ata_ncq_enabled(struct ata_device *dev) | 
|---|
| 1653 | 1698 |  { | 
|---|
 | 1699 | +	if (!IS_ENABLED(CONFIG_SATA_HOST))  | 
|---|
 | 1700 | +		return 0;  | 
|---|
| 1654 | 1701 |  	return (dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ_OFF | | 
|---|
| 1655 | 1702 |  			      ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ; | 
|---|
| 1656 | 1703 |  } | 
|---|
| .. | .. | 
|---|
| 1820 | 1867 |  } | 
|---|
| 1821 | 1868 |   | 
|---|
| 1822 | 1869 |  /************************************************************************** | 
|---|
 | 1870 | + * PATA timings - drivers/ata/libata-pata-timings.c  | 
|---|
 | 1871 | + */  | 
|---|
 | 1872 | +extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode);  | 
|---|
 | 1873 | +extern int ata_timing_compute(struct ata_device *, unsigned short,  | 
|---|
 | 1874 | +			      struct ata_timing *, int, int);  | 
|---|
 | 1875 | +extern void ata_timing_merge(const struct ata_timing *,  | 
|---|
 | 1876 | +			     const struct ata_timing *, struct ata_timing *,  | 
|---|
 | 1877 | +			     unsigned int);  | 
|---|
 | 1878 | +  | 
|---|
 | 1879 | +/**************************************************************************  | 
|---|
| 1823 | 1880 |   * PMP - drivers/ata/libata-pmp.c | 
|---|
| 1824 | 1881 |   */ | 
|---|
| 1825 | 1882 |  #ifdef CONFIG_SATA_PMP | 
|---|