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

Commit b917078c authored by Daode Huang's avatar Daode Huang Committed by David S. Miller
Browse files

net: hns: Add ACPI support to check SFP present



The current code only supports DT to check SFP present.
This patch adds ACPI support as well.

Signed-off-by: default avatarDaode Huang <huangdaode@hisilicon.com>
Reviewed-by: default avatarYisen Zhuang <yisen.zhuang@huawei.com>
Signed-off-by: default avatarSalil Mehta <salil.mehta@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0b98ca2a
Loading
Loading
Loading
Loading
+7 −4
Original line number Original line Diff line number Diff line
@@ -82,9 +82,12 @@ void hns_mac_get_link_status(struct hns_mac_cb *mac_cb, u32 *link_status)
	else
	else
		*link_status = 0;
		*link_status = 0;


	ret = mac_cb->dsaf_dev->misc_op->get_sfp_prsnt(mac_cb, &sfp_prsnt);
	if (mac_cb->media_type == HNAE_MEDIA_TYPE_FIBER) {
		ret = mac_cb->dsaf_dev->misc_op->get_sfp_prsnt(mac_cb,
							       &sfp_prsnt);
		if (!ret)
		if (!ret)
			*link_status = *link_status && sfp_prsnt;
			*link_status = *link_status && sfp_prsnt;
	}


	mac_cb->link = *link_status;
	mac_cb->link = *link_status;
}
}
+27 −1
Original line number Original line Diff line number Diff line
@@ -461,6 +461,32 @@ int hns_mac_get_sfp_prsnt(struct hns_mac_cb *mac_cb, int *sfp_prsnt)
	return 0;
	return 0;
}
}


int hns_mac_get_sfp_prsnt_acpi(struct hns_mac_cb *mac_cb, int *sfp_prsnt)
{
	union acpi_object *obj;
	union acpi_object obj_args, argv4;

	obj_args.integer.type = ACPI_TYPE_INTEGER;
	obj_args.integer.value = mac_cb->mac_id;

	argv4.type = ACPI_TYPE_PACKAGE,
	argv4.package.count = 1,
	argv4.package.elements = &obj_args,

	obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev),
				hns_dsaf_acpi_dsm_uuid, 0,
				HNS_OP_GET_SFP_STAT_FUNC, &argv4);

	if (!obj || obj->type != ACPI_TYPE_INTEGER)
		return -ENODEV;

	*sfp_prsnt = obj->integer.value;

	ACPI_FREE(obj);

	return 0;
}

/**
/**
 * hns_mac_config_sds_loopback - set loop back for serdes
 * hns_mac_config_sds_loopback - set loop back for serdes
 * @mac_cb: mac control block
 * @mac_cb: mac control block
@@ -592,7 +618,7 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev)
		misc_op->hns_dsaf_roce_srst = hns_dsaf_roce_srst_acpi;
		misc_op->hns_dsaf_roce_srst = hns_dsaf_roce_srst_acpi;


		misc_op->get_phy_if = hns_mac_get_phy_if_acpi;
		misc_op->get_phy_if = hns_mac_get_phy_if_acpi;
		misc_op->get_sfp_prsnt = hns_mac_get_sfp_prsnt;
		misc_op->get_sfp_prsnt = hns_mac_get_sfp_prsnt_acpi;


		misc_op->cfg_serdes_loopback = hns_mac_config_sds_loopback_acpi;
		misc_op->cfg_serdes_loopback = hns_mac_config_sds_loopback_acpi;
	} else {
	} else {