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: Daode Huang <huangdaode@hisilicon.com> Reviewed-by: Yisen Zhuang <yisen.zhuang@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0b98ca2a45
commit
b917078c1c
2 changed files with 34 additions and 5 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Reference in a new issue