Daniel Wagner 7d82e3
From: Quinn Tran <qutran@marvell.com>
Daniel Wagner 7d82e3
Date: Mon, 6 Jun 2022 21:46:24 -0700
Daniel Wagner 7d82e3
Subject: scsi: qla2xxx: edif: Remove old doorbell interface
Denis Kirjanov 718367
Patch-mainline: v5.20-rc1
Daniel Wagner 7d82e3
Git-commit: 1040e5f75ddf56fdd571a2a14b4d1a9e8ed846a9
Daniel Wagner 7d82e3
References: bsc#1201958
Daniel Wagner 7d82e3
Daniel Wagner 7d82e3
Recently driver has implemented a new doorbell mechanism via bsg.  The new
Daniel Wagner 7d82e3
doorbell tells driver the exact buffer size application has where driver
Daniel Wagner 7d82e3
can fill it up with events. The old doorbell guestimated application buffer
Daniel Wagner 7d82e3
size is 256.
Daniel Wagner 7d82e3
Daniel Wagner 7d82e3
Remove duplicate functionality, the application has moved on to the new
Daniel Wagner 7d82e3
doorbell interface.
Daniel Wagner 7d82e3
Daniel Wagner 7d82e3
Link: https://lore.kernel.org/r/20220607044627.19563-9-njavali@marvell.com
Daniel Wagner 7d82e3
Signed-off-by: Quinn Tran <qutran@marvell.com>
Daniel Wagner 7d82e3
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Daniel Wagner 7d82e3
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Daniel Wagner 7d82e3
Acked-by: Daniel Wagner <dwagner@suse.de>
Daniel Wagner 7d82e3
---
Daniel Wagner 7d82e3
 drivers/scsi/qla2xxx/qla_attr.c |    2 -
Daniel Wagner 7d82e3
 drivers/scsi/qla2xxx/qla_edif.c |   78 ----------------------------------------
Daniel Wagner 7d82e3
 drivers/scsi/qla2xxx/qla_gbl.h  |    1 
Daniel Wagner 7d82e3
 3 files changed, 81 deletions(-)
Daniel Wagner 7d82e3
Daniel Wagner 7d82e3
--- a/drivers/scsi/qla2xxx/qla_attr.c
Daniel Wagner 7d82e3
+++ b/drivers/scsi/qla2xxx/qla_attr.c
Daniel Wagner 7d82e3
@@ -2477,7 +2477,6 @@ static DEVICE_ATTR(port_speed, 0644, qla
Daniel Wagner 7d82e3
     qla2x00_port_speed_store);
Daniel Wagner 7d82e3
 static DEVICE_ATTR(port_no, 0444, qla2x00_port_no_show, NULL);
Daniel Wagner 7d82e3
 static DEVICE_ATTR(fw_attr, 0444, qla2x00_fw_attr_show, NULL);
Daniel Wagner 7d82e3
-static DEVICE_ATTR_RO(edif_doorbell);
Daniel Wagner 7d82e3
 
Daniel Wagner 7d82e3
 
Daniel Wagner 7d82e3
 struct device_attribute *qla2x00_host_attrs[] = {
Daniel Wagner 7d82e3
@@ -2523,7 +2522,6 @@ struct device_attribute *qla2x00_host_at
Daniel Wagner 7d82e3
 	&dev_attr_port_no,
Daniel Wagner 7d82e3
 	&dev_attr_fw_attr,
Daniel Wagner 7d82e3
 	&dev_attr_dport_diagnostics,
Daniel Wagner 7d82e3
-	&dev_attr_edif_doorbell,
Daniel Wagner 7d82e3
 	&dev_attr_mpi_pause,
Daniel Wagner 7d82e3
 	NULL, /* reserve for qlini_mode */
Daniel Wagner 7d82e3
 	NULL, /* reserve for ql2xiniexchg */
Daniel Wagner 7d82e3
--- a/drivers/scsi/qla2xxx/qla_edif.c
Daniel Wagner 7d82e3
+++ b/drivers/scsi/qla2xxx/qla_edif.c
Daniel Wagner 7d82e3
@@ -2265,84 +2265,6 @@ qla_edif_timer(scsi_qla_host_t *vha)
Daniel Wagner 7d82e3
 		qla_edif_dbell_bsg_done(vha);
Daniel Wagner 7d82e3
 }
Daniel Wagner 7d82e3
 
Daniel Wagner 7d82e3
-/*
Daniel Wagner 7d82e3
- * app uses separate thread to read this. It'll wait until the doorbell
Daniel Wagner 7d82e3
- * is rung by the driver or the max wait time has expired
Daniel Wagner 7d82e3
- */
Daniel Wagner 7d82e3
-ssize_t
Daniel Wagner 7d82e3
-edif_doorbell_show(struct device *dev, struct device_attribute *attr,
Daniel Wagner 7d82e3
-		char *buf)
Daniel Wagner 7d82e3
-{
Daniel Wagner 7d82e3
-	scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
Daniel Wagner 7d82e3
-	struct edb_node	*dbnode = NULL;
Daniel Wagner 7d82e3
-	struct edif_app_dbell *ap = (struct edif_app_dbell *)buf;
Daniel Wagner 7d82e3
-	uint32_t dat_siz, buf_size, sz;
Daniel Wagner 7d82e3
-
Daniel Wagner 7d82e3
-	/* TODO: app currently hardcoded to 256. Will transition to bsg */
Daniel Wagner 7d82e3
-	sz = 256;
Daniel Wagner 7d82e3
-
Daniel Wagner 7d82e3
-	/* stop new threads from waiting if we're not init'd */
Daniel Wagner 7d82e3
-	if (DBELL_INACTIVE(vha)) {
Daniel Wagner 7d82e3
-		ql_dbg(ql_dbg_edif + ql_dbg_verbose, vha, 0x09122,
Daniel Wagner 7d82e3
-		    "%s error - edif db not enabled\n", __func__);
Daniel Wagner 7d82e3
-		return 0;
Daniel Wagner 7d82e3
-	}
Daniel Wagner 7d82e3
-
Daniel Wagner 7d82e3
-	if (!vha->hw->flags.edif_enabled) {
Daniel Wagner 7d82e3
-		/* edif not enabled */
Daniel Wagner 7d82e3
-		ql_dbg(ql_dbg_edif + ql_dbg_verbose, vha, 0x09122,
Daniel Wagner 7d82e3
-		    "%s error - edif not enabled\n", __func__);
Daniel Wagner 7d82e3
-		return -1;
Daniel Wagner 7d82e3
-	}
Daniel Wagner 7d82e3
-
Daniel Wagner 7d82e3
-	buf_size = 0;
Daniel Wagner 7d82e3
-	while ((sz - buf_size) >= sizeof(struct edb_node)) {
Daniel Wagner 7d82e3
-		/* remove the next item from the doorbell list */
Daniel Wagner 7d82e3
-		dat_siz = 0;
Daniel Wagner 7d82e3
-		dbnode = qla_edb_getnext(vha);
Daniel Wagner 7d82e3
-		if (dbnode) {
Daniel Wagner 7d82e3
-			ap->event_code = dbnode->ntype;
Daniel Wagner 7d82e3
-			switch (dbnode->ntype) {
Daniel Wagner 7d82e3
-			case VND_CMD_AUTH_STATE_SESSION_SHUTDOWN:
Daniel Wagner 7d82e3
-			case VND_CMD_AUTH_STATE_NEEDED:
Daniel Wagner 7d82e3
-				ap->port_id = dbnode->u.plogi_did;
Daniel Wagner 7d82e3
-				dat_siz += sizeof(ap->port_id);
Daniel Wagner 7d82e3
-				break;
Daniel Wagner 7d82e3
-			case VND_CMD_AUTH_STATE_ELS_RCVD:
Daniel Wagner 7d82e3
-				ap->port_id = dbnode->u.els_sid;
Daniel Wagner 7d82e3
-				dat_siz += sizeof(ap->port_id);
Daniel Wagner 7d82e3
-				break;
Daniel Wagner 7d82e3
-			case VND_CMD_AUTH_STATE_SAUPDATE_COMPL:
Daniel Wagner 7d82e3
-				ap->port_id = dbnode->u.sa_aen.port_id;
Daniel Wagner 7d82e3
-				memcpy(ap->event_data, &dbnode->u,
Daniel Wagner 7d82e3
-						sizeof(struct edif_sa_update_aen));
Daniel Wagner 7d82e3
-				dat_siz += sizeof(struct edif_sa_update_aen);
Daniel Wagner 7d82e3
-				break;
Daniel Wagner 7d82e3
-			default:
Daniel Wagner 7d82e3
-				/* unknown node type, rtn unknown ntype */
Daniel Wagner 7d82e3
-				ap->event_code = VND_CMD_AUTH_STATE_UNDEF;
Daniel Wagner 7d82e3
-				memcpy(ap->event_data, &dbnode->ntype, 4);
Daniel Wagner 7d82e3
-				dat_siz += 4;
Daniel Wagner 7d82e3
-				break;
Daniel Wagner 7d82e3
-			}
Daniel Wagner 7d82e3
-
Daniel Wagner 7d82e3
-			ql_dbg(ql_dbg_edif, vha, 0x09102,
Daniel Wagner 7d82e3
-				"%s Doorbell consumed : type=%d %p\n",
Daniel Wagner 7d82e3
-				__func__, dbnode->ntype, dbnode);
Daniel Wagner 7d82e3
-			/* we're done with the db node, so free it up */
Daniel Wagner 7d82e3
-			kfree(dbnode);
Daniel Wagner 7d82e3
-		} else {
Daniel Wagner 7d82e3
-			break;
Daniel Wagner 7d82e3
-		}
Daniel Wagner 7d82e3
-
Daniel Wagner 7d82e3
-		ap->event_data_size = dat_siz;
Daniel Wagner 7d82e3
-		/* 8bytes = ap->event_code + ap->event_data_size */
Daniel Wagner 7d82e3
-		buf_size += dat_siz + 8;
Daniel Wagner 7d82e3
-		ap = (struct edif_app_dbell *)(buf + buf_size);
Daniel Wagner 7d82e3
-	}
Daniel Wagner 7d82e3
-	return buf_size;
Daniel Wagner 7d82e3
-}
Daniel Wagner 7d82e3
-
Daniel Wagner 7d82e3
 static void qla_noop_sp_done(srb_t *sp, int res)
Daniel Wagner 7d82e3
 {
Daniel Wagner 7d82e3
 	sp->fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
Daniel Wagner 7d82e3
--- a/drivers/scsi/qla2xxx/qla_gbl.h
Daniel Wagner 7d82e3
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
Daniel Wagner 7d82e3
@@ -994,7 +994,6 @@ fc_port_t *qla2x00_find_fcport_by_pid(sc
Daniel Wagner 7d82e3
 void qla_edb_eventcreate(scsi_qla_host_t *vha, uint32_t dbtype, uint32_t data, uint32_t data2,
Daniel Wagner 7d82e3
 		fc_port_t *fcport);
Daniel Wagner 7d82e3
 void qla_edb_stop(scsi_qla_host_t *vha);
Daniel Wagner 7d82e3
-ssize_t edif_doorbell_show(struct device *dev, struct device_attribute *attr, char *buf);
Daniel Wagner 7d82e3
 int32_t qla_edif_app_mgmt(struct bsg_job *bsg_job);
Daniel Wagner 7d82e3
 void qla_enode_init(scsi_qla_host_t *vha);
Daniel Wagner 7d82e3
 void qla_enode_stop(scsi_qla_host_t *vha);