drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c- Extension
.c- Size
- 17657 bytes
- Lines
- 705
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
hns_dsaf_mac.hhns_dsaf_misc.hhns_dsaf_ppe.hhns_dsaf_reg.h
Detected Declarations
enum _dsm_op_indexenum _dsm_rst_typefunction dsaf_write_subfunction dsaf_read_subfunction hns_dsaf_acpi_ledctrl_by_portfunction hns_dsaf_acpi_locate_ledctrl_by_portfunction hns_cpld_set_ledfunction hns_cpld_set_led_acpifunction cpld_led_resetfunction cpld_led_reset_acpifunction cpld_set_led_idfunction cpld_set_led_id_acpifunction hns_dsaf_acpi_srst_by_portfunction hns_dsaf_rstfunction hns_dsaf_rst_acpifunction hns_dsaf_xge_srst_by_portfunction hns_dsaf_xge_srst_by_port_acpifunction hns_dsaf_ge_srst_by_portfunction hns_dsaf_ge_srst_by_port_acpifunction hns_ppe_srst_by_portfunction hns_ppe_srst_by_port_acpifunction hns_ppe_com_srstfunction hns_mac_get_phy_iffunction hns_mac_get_phy_if_acpifunction hns_mac_get_sfp_prsntfunction hns_mac_get_sfp_prsnt_acpifunction hns_mac_config_sds_loopbackfunction hns_mac_config_sds_loopback_acpi
Annotated Snippet
if (value != mac_cb->cpld_led_value) {
dsaf_write_syscon(mac_cb->cpld_ctrl,
mac_cb->cpld_ctrl_reg, value);
mac_cb->cpld_led_value = value;
}
} else {
value = (mac_cb->cpld_led_value) & (0x1 << DSAF_LED_ANCHOR_B);
dsaf_write_syscon(mac_cb->cpld_ctrl,
mac_cb->cpld_ctrl_reg, value);
mac_cb->cpld_led_value = value;
}
}
static void hns_cpld_set_led_acpi(struct hns_mac_cb *mac_cb, int link_status,
u16 speed, int data)
{
if (!mac_cb) {
pr_err("cpld_led_set mac_cb is null!\n");
return;
}
hns_dsaf_acpi_ledctrl_by_port(mac_cb, HNS_OP_LED_SET_FUNC,
link_status, mac_cb->mac_id, data);
}
static void cpld_led_reset(struct hns_mac_cb *mac_cb)
{
if (!mac_cb || !mac_cb->cpld_ctrl)
return;
dsaf_write_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg,
CPLD_LED_DEFAULT_VALUE);
mac_cb->cpld_led_value = CPLD_LED_DEFAULT_VALUE;
}
static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb)
{
if (!mac_cb) {
pr_err("cpld_led_reset mac_cb is null!\n");
return;
}
if (mac_cb->media_type != HNAE_MEDIA_TYPE_FIBER)
return;
hns_dsaf_acpi_ledctrl_by_port(mac_cb, HNS_OP_LED_SET_FUNC,
0, mac_cb->mac_id, 0);
}
static int cpld_set_led_id(struct hns_mac_cb *mac_cb,
enum hnae_led_state status)
{
u32 val = 0;
int ret;
if (!mac_cb->cpld_ctrl)
return 0;
switch (status) {
case HNAE_LED_ACTIVE:
ret = dsaf_read_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg,
&val);
if (ret)
return ret;
dsaf_set_bit(val, DSAF_LED_ANCHOR_B, CPLD_LED_ON_VALUE);
dsaf_write_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg,
val);
mac_cb->cpld_led_value = val;
break;
case HNAE_LED_INACTIVE:
dsaf_set_bit(mac_cb->cpld_led_value, DSAF_LED_ANCHOR_B,
CPLD_LED_DEFAULT_VALUE);
dsaf_write_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg,
mac_cb->cpld_led_value);
break;
default:
dev_err(mac_cb->dev, "invalid led state: %d!", status);
return -EINVAL;
}
return 0;
}
static int cpld_set_led_id_acpi(struct hns_mac_cb *mac_cb,
enum hnae_led_state status)
{
switch (status) {
case HNAE_LED_ACTIVE:
hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb,
Annotation
- Immediate include surface: `hns_dsaf_mac.h`, `hns_dsaf_misc.h`, `hns_dsaf_ppe.h`, `hns_dsaf_reg.h`.
- Detected declarations: `enum _dsm_op_index`, `enum _dsm_rst_type`, `function dsaf_write_sub`, `function dsaf_read_sub`, `function hns_dsaf_acpi_ledctrl_by_port`, `function hns_dsaf_acpi_locate_ledctrl_by_port`, `function hns_cpld_set_led`, `function hns_cpld_set_led_acpi`, `function cpld_led_reset`, `function cpld_led_reset_acpi`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.