brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 9ced6b3 Raw
96 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * QLogic iSCSI HBA Driver4 * Copyright (c)  2003-2013 QLogic Corporation5 */6 7/*8 *9 * qla4xxx_lookup_ddb_by_fw_index10 *	This routine locates a device handle given the firmware device11 *	database index.	 If device doesn't exist, returns NULL.12 *13 * Input:14 *	ha - Pointer to host adapter structure.15 *	fw_ddb_index - Firmware's device database index16 *17 * Returns:18 *	Pointer to the corresponding internal device database structure19 */20static inline struct ddb_entry *21qla4xxx_lookup_ddb_by_fw_index(struct scsi_qla_host *ha, uint32_t fw_ddb_index)22{23	struct ddb_entry *ddb_entry = NULL;24 25	if ((fw_ddb_index < MAX_DDB_ENTRIES) &&26	    (ha->fw_ddb_index_map[fw_ddb_index] !=27		(struct ddb_entry *) INVALID_ENTRY)) {28		ddb_entry = ha->fw_ddb_index_map[fw_ddb_index];29	}30 31	DEBUG3(printk("scsi%d: %s: ddb [%d], ddb_entry = %p\n",32	    ha->host_no, __func__, fw_ddb_index, ddb_entry));33 34	return ddb_entry;35}36 37static inline void38__qla4xxx_enable_intrs(struct scsi_qla_host *ha)39{40	if (is_qla4022(ha) | is_qla4032(ha)) {41		writel(set_rmask(IMR_SCSI_INTR_ENABLE),42		       &ha->reg->u1.isp4022.intr_mask);43		readl(&ha->reg->u1.isp4022.intr_mask);44	} else {45		writel(set_rmask(CSR_SCSI_INTR_ENABLE), &ha->reg->ctrl_status);46		readl(&ha->reg->ctrl_status);47	}48	set_bit(AF_INTERRUPTS_ON, &ha->flags);49}50 51static inline void52__qla4xxx_disable_intrs(struct scsi_qla_host *ha)53{54	if (is_qla4022(ha) | is_qla4032(ha)) {55		writel(clr_rmask(IMR_SCSI_INTR_ENABLE),56		       &ha->reg->u1.isp4022.intr_mask);57		readl(&ha->reg->u1.isp4022.intr_mask);58	} else {59		writel(clr_rmask(CSR_SCSI_INTR_ENABLE), &ha->reg->ctrl_status);60		readl(&ha->reg->ctrl_status);61	}62	clear_bit(AF_INTERRUPTS_ON, &ha->flags);63}64 65static inline void66qla4xxx_enable_intrs(struct scsi_qla_host *ha)67{68	unsigned long flags;69 70	spin_lock_irqsave(&ha->hardware_lock, flags);71	__qla4xxx_enable_intrs(ha);72	spin_unlock_irqrestore(&ha->hardware_lock, flags);73}74 75static inline void76qla4xxx_disable_intrs(struct scsi_qla_host *ha)77{78	unsigned long flags;79 80	spin_lock_irqsave(&ha->hardware_lock, flags);81	__qla4xxx_disable_intrs(ha);82	spin_unlock_irqrestore(&ha->hardware_lock, flags);83}84 85static inline int qla4xxx_get_chap_type(struct ql4_chap_table *chap_entry)86{87	int type;88 89	if (chap_entry->flags & BIT_7)90		type = LOCAL_CHAP;91	else92		type = BIDI_CHAP;93 94	return type;95}96