Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eae6b58f authored by Ron Mercer's avatar Ron Mercer Committed by David S. Miller
Browse files

qlge: Add firmware support for insert/remove SFP.

parent 38d40815
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -200,6 +200,36 @@ exit:
	ql_write32(qdev, CSR, CSR_CMD_CLR_R2PCI_INT);
}

static int ql_sfp_in(struct ql_adapter *qdev, struct mbox_params *mbcp)
{
	int status;

	mbcp->out_count = 5;

	status = ql_get_mb_sts(qdev, mbcp);
	if (status)
		QPRINTK(qdev, DRV, ERR, "SFP in AEN broken!\n");
	else
		QPRINTK(qdev, DRV, ERR, "SFP insertion detected.\n");

	return status;
}

static int ql_sfp_out(struct ql_adapter *qdev, struct mbox_params *mbcp)
{
	int status;

	mbcp->out_count = 1;

	status = ql_get_mb_sts(qdev, mbcp);
	if (status)
		QPRINTK(qdev, DRV, ERR, "SFP out AEN broken!\n");
	else
		QPRINTK(qdev, DRV, ERR, "SFP removal detected.\n");

	return status;
}

static void ql_init_fw_done(struct ql_adapter *qdev, struct mbox_params *mbcp)
{
	mbcp->out_count = 2;
@@ -284,6 +314,14 @@ static int ql_mpi_handler(struct ql_adapter *qdev, struct mbox_params *mbcp)
		ql_init_fw_done(qdev, mbcp);
		break;

	case AEN_AEN_SFP_IN:
		ql_sfp_in(qdev, mbcp);
		break;

	case AEN_AEN_SFP_OUT:
		ql_sfp_out(qdev, mbcp);
		break;

	case AEN_FW_INIT_FAIL:
	case AEN_SYS_ERR:
		ql_queue_fw_error(qdev);