^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * zfcp device driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * External function declarations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright IBM Corp. 2002, 2020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef ZFCP_EXT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define ZFCP_EXT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <scsi/fc/fc_els.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include "zfcp_def.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include "zfcp_fc.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) /* zfcp_aux.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) extern struct zfcp_port *zfcp_get_port_by_wwpn(struct zfcp_adapter *, u64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) extern struct zfcp_adapter *zfcp_adapter_enqueue(struct ccw_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) extern struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *, u64, u32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) extern void zfcp_sg_free_table(struct scatterlist *, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) extern int zfcp_sg_setup_table(struct scatterlist *, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) extern void zfcp_adapter_release(struct kref *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) extern void zfcp_adapter_unregister(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) /* zfcp_ccw.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) extern struct ccw_driver zfcp_ccw_driver;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) extern struct zfcp_adapter *zfcp_ccw_adapter_by_cdev(struct ccw_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) extern void zfcp_ccw_adapter_put(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) /* zfcp_dbf.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) extern int zfcp_dbf_adapter_register(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) extern void zfcp_dbf_adapter_unregister(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) extern void zfcp_dbf_rec_trig(char *, struct zfcp_adapter *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) struct zfcp_port *, struct scsi_device *, u8, u8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) extern void zfcp_dbf_rec_trig_lock(char *tag, struct zfcp_adapter *adapter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) struct zfcp_port *port,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) struct scsi_device *sdev, u8 want, u8 need);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) extern void zfcp_dbf_rec_run(char *, struct zfcp_erp_action *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) extern void zfcp_dbf_rec_run_lvl(int level, char *tag,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) struct zfcp_erp_action *erp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) extern void zfcp_dbf_rec_run_wka(char *, struct zfcp_fc_wka_port *, u64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) extern void zfcp_dbf_hba_fsf_uss(char *, struct zfcp_fsf_req *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) extern void zfcp_dbf_hba_fsf_res(char *, int, struct zfcp_fsf_req *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) extern void zfcp_dbf_hba_fsf_fces(char *tag, const struct zfcp_fsf_req *req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) u64 wwpn, u32 fc_security_old,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) u32 fc_security_new);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) extern void zfcp_dbf_hba_bit_err(char *, struct zfcp_fsf_req *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) extern void zfcp_dbf_hba_def_err(struct zfcp_adapter *, u64, u16, void **);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) extern void zfcp_dbf_hba_basic(char *, struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) extern void zfcp_dbf_san_req(char *, struct zfcp_fsf_req *, u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) extern void zfcp_dbf_san_res(char *, struct zfcp_fsf_req *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) extern void zfcp_dbf_san_in_els(char *, struct zfcp_fsf_req *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) extern void zfcp_dbf_scsi_common(char *tag, int level, struct scsi_device *sdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) struct scsi_cmnd *sc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) struct zfcp_fsf_req *fsf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) extern void zfcp_dbf_scsi_eh(char *tag, struct zfcp_adapter *adapter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) unsigned int scsi_id, int ret);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) /* zfcp_erp.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) extern void zfcp_erp_set_adapter_status(struct zfcp_adapter *, u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) extern void zfcp_erp_clear_adapter_status(struct zfcp_adapter *, u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) extern void zfcp_erp_port_forced_no_port_dbf(char *dbftag,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct zfcp_adapter *adapter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) u64 port_name, u32 port_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) extern void zfcp_erp_adapter_reopen(struct zfcp_adapter *, int, char *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) extern void zfcp_erp_adapter_shutdown(struct zfcp_adapter *, int, char *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) extern void zfcp_erp_set_port_status(struct zfcp_port *, u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) extern void zfcp_erp_clear_port_status(struct zfcp_port *, u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) extern void zfcp_erp_port_reopen(struct zfcp_port *port, int clear,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) char *dbftag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) extern void zfcp_erp_port_shutdown(struct zfcp_port *, int, char *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) extern void zfcp_erp_port_forced_reopen(struct zfcp_port *, int, char *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) extern void zfcp_erp_port_forced_reopen_all(struct zfcp_adapter *adapter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) int clear, char *dbftag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) extern void zfcp_erp_set_lun_status(struct scsi_device *, u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) extern void zfcp_erp_clear_lun_status(struct scsi_device *, u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) extern void zfcp_erp_lun_reopen(struct scsi_device *, int, char *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) extern void zfcp_erp_lun_shutdown(struct scsi_device *, int, char *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) extern void zfcp_erp_lun_shutdown_wait(struct scsi_device *, char *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) extern int zfcp_erp_thread_setup(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) extern void zfcp_erp_thread_kill(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) extern void zfcp_erp_wait(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) extern void zfcp_erp_notify(struct zfcp_erp_action *, unsigned long);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) extern void zfcp_erp_timeout_handler(struct timer_list *t);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) extern void zfcp_erp_adapter_reset_sync(struct zfcp_adapter *adapter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) char *dbftag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) /* zfcp_fc.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) extern struct kmem_cache *zfcp_fc_req_cache;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) extern void zfcp_fc_enqueue_event(struct zfcp_adapter *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) enum fc_host_event_code event_code, u32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) extern void zfcp_fc_post_event(struct work_struct *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) extern void zfcp_fc_scan_ports(struct work_struct *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) extern void zfcp_fc_incoming_els(struct zfcp_fsf_req *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) extern void zfcp_fc_port_did_lookup(struct work_struct *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) extern void zfcp_fc_trigger_did_lookup(struct zfcp_port *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) extern void zfcp_fc_plogi_evaluate(struct zfcp_port *, struct fc_els_flogi *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) extern void zfcp_fc_test_link(struct zfcp_port *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) extern void zfcp_fc_link_test_work(struct work_struct *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) extern void zfcp_fc_wka_ports_force_offline(struct zfcp_fc_wka_ports *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) extern int zfcp_fc_gs_setup(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) extern void zfcp_fc_gs_destroy(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) extern int zfcp_fc_exec_bsg_job(struct bsg_job *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) extern int zfcp_fc_timeout_bsg_job(struct bsg_job *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) extern void zfcp_fc_sym_name_update(struct work_struct *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) extern unsigned int zfcp_fc_port_scan_backoff(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) extern void zfcp_fc_conditional_port_scan(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) extern void zfcp_fc_inverse_conditional_port_scan(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) /* zfcp_fsf.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) extern struct kmem_cache *zfcp_fsf_qtcb_cache;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) extern int zfcp_fsf_open_port(struct zfcp_erp_action *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) extern int zfcp_fsf_open_wka_port(struct zfcp_fc_wka_port *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) extern int zfcp_fsf_close_wka_port(struct zfcp_fc_wka_port *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) extern int zfcp_fsf_close_port(struct zfcp_erp_action *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) extern int zfcp_fsf_close_physical_port(struct zfcp_erp_action *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) extern int zfcp_fsf_open_lun(struct zfcp_erp_action *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) extern int zfcp_fsf_close_lun(struct zfcp_erp_action *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) extern int zfcp_fsf_exchange_config_data(struct zfcp_erp_action *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) extern int zfcp_fsf_exchange_config_data_sync(struct zfcp_qdio *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) struct fsf_qtcb_bottom_config *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) extern int zfcp_fsf_exchange_port_data(struct zfcp_erp_action *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) extern int zfcp_fsf_exchange_port_data_sync(struct zfcp_qdio *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) struct fsf_qtcb_bottom_port *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) extern u32 zfcp_fsf_convert_portspeed(u32 fsf_speed);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) extern void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) extern int zfcp_fsf_status_read(struct zfcp_qdio *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) extern int zfcp_status_read_refill(struct zfcp_adapter *adapter);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) extern int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *, struct zfcp_fsf_ct_els *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) mempool_t *, unsigned int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) extern int zfcp_fsf_send_els(struct zfcp_adapter *, u32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) struct zfcp_fsf_ct_els *, unsigned int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) extern int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) extern void zfcp_fsf_req_free(struct zfcp_fsf_req *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) extern void zfcp_fsf_fc_host_link_down(struct zfcp_adapter *adapter);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) extern struct zfcp_fsf_req *zfcp_fsf_fcp_task_mgmt(struct scsi_device *sdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) u8 tm_flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_cmnd(struct scsi_cmnd *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) extern void zfcp_fsf_reqid_check(struct zfcp_qdio *, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) enum zfcp_fsf_print_fmt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) ZFCP_FSF_PRINT_FMT_LIST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) ZFCP_FSF_PRINT_FMT_SINGLEITEM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) extern ssize_t zfcp_fsf_scnprint_fc_security(char *buf, size_t size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) u32 fc_security,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) enum zfcp_fsf_print_fmt fmt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) /* zfcp_qdio.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) extern int zfcp_qdio_setup(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) extern void zfcp_qdio_destroy(struct zfcp_qdio *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) extern int zfcp_qdio_sbal_get(struct zfcp_qdio *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) extern int zfcp_qdio_send(struct zfcp_qdio *, struct zfcp_qdio_req *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) extern int zfcp_qdio_sbals_from_sg(struct zfcp_qdio *, struct zfcp_qdio_req *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) struct scatterlist *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) extern void zfcp_qdio_shost_update(struct zfcp_adapter *const adapter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) const struct zfcp_qdio *const qdio);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) extern int zfcp_qdio_open(struct zfcp_qdio *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) extern void zfcp_qdio_close(struct zfcp_qdio *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) extern void zfcp_qdio_siosl(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) /* zfcp_scsi.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) extern bool zfcp_experimental_dix;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) extern struct scsi_transport_template *zfcp_scsi_transport_template;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) extern int zfcp_scsi_adapter_register(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) extern void zfcp_scsi_adapter_unregister(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) extern struct fc_function_template zfcp_transport_functions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) extern void zfcp_scsi_rport_work(struct work_struct *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) extern void zfcp_scsi_schedule_rport_register(struct zfcp_port *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) extern void zfcp_scsi_schedule_rport_block(struct zfcp_port *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) extern void zfcp_scsi_schedule_rports_block(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) extern void zfcp_scsi_set_prot(struct zfcp_adapter *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) extern void zfcp_scsi_dif_sense_error(struct scsi_cmnd *, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) extern void zfcp_scsi_shost_update_config_data(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) struct zfcp_adapter *const adapter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) const struct fsf_qtcb_bottom_config *const bottom,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) const bool bottom_incomplete);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) extern void zfcp_scsi_shost_update_port_data(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) struct zfcp_adapter *const adapter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) const struct fsf_qtcb_bottom_port *const bottom);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) /* zfcp_sysfs.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) extern const struct attribute_group *zfcp_unit_attr_groups[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) extern struct attribute_group zfcp_sysfs_adapter_attrs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) extern const struct attribute_group *zfcp_port_attr_groups[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) extern struct mutex zfcp_sysfs_port_units_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) extern struct device_attribute *zfcp_sysfs_sdev_attrs[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) extern struct device_attribute *zfcp_sysfs_shost_attrs[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) extern const struct attribute_group zfcp_sysfs_diag_attr_group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) bool zfcp_sysfs_port_is_removing(const struct zfcp_port *const port);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) /* zfcp_unit.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) extern int zfcp_unit_add(struct zfcp_port *, u64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) extern int zfcp_unit_remove(struct zfcp_port *, u64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) extern struct zfcp_unit *zfcp_unit_find(struct zfcp_port *, u64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) extern struct scsi_device *zfcp_unit_sdev(struct zfcp_unit *unit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) extern void zfcp_unit_scsi_scan(struct zfcp_unit *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) extern void zfcp_unit_queue_scsi_scan(struct zfcp_port *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) extern unsigned int zfcp_unit_sdev_status(struct zfcp_unit *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #endif /* ZFCP_EXT_H */