drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c- Extension
.c- Size
- 36550 bytes
- Lines
- 1430
- 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
linux/slab.hlinux/interrupt.hlinux/swab.hlinux/dma-mapping.hnet/ip.hlinux/ipv6.hlinux/inetdevice.hlinux/sysfs.hlinux/log2.hlinux/hwmon.hlinux/hwmon-sysfs.hqlcnic.hqlcnic_hw.h
Detected Declarations
function Copyrightfunction qlcnicvf_config_ledfunction qlcnic_store_bridged_modefunction qlcnic_show_bridged_modefunction qlcnic_store_diag_modefunction qlcnic_show_diag_modefunction qlcnic_validate_beaconfunction qlcnic_83xx_store_beaconfunction qlcnic_82xx_store_beaconfunction qlcnic_store_beaconfunction qlcnic_show_beaconfunction qlcnic_sysfs_validate_crbfunction qlcnic_sysfs_read_crbfunction qlcnic_sysfs_write_crbfunction qlcnic_sysfs_validate_memfunction qlcnic_sysfs_read_memfunction qlcnic_sysfs_write_memfunction qlcnic_is_valid_nic_funcfunction validate_pm_configfunction qlcnic_sysfs_write_pm_configfunction qlcnic_sysfs_read_pm_configfunction validate_esw_configfunction qlcnic_sysfs_write_esw_configfunction qlcnic_sysfs_read_esw_configfunction validate_npar_configfunction qlcnic_sysfs_write_npar_configfunction qlcnic_sysfs_read_npar_configfunction qlcnic_sysfs_get_port_statsfunction qlcnic_sysfs_get_esw_statsfunction qlcnic_sysfs_clear_esw_statsfunction qlcnic_sysfs_clear_port_statsfunction qlcnic_sysfs_read_pci_configfunction qlcnic_83xx_sysfs_flash_read_handlerfunction qlcnic_83xx_sysfs_flash_bulk_writefunction qlcnic_83xx_sysfs_flash_writefunction qlcnic_83xx_sysfs_flash_write_handlerfunction qlcnic_hwmon_show_tempfunction qlcnic_register_hwmon_devfunction qlcnic_unregister_hwmon_devfunction qlcnic_create_sysfs_entriesfunction qlcnic_remove_sysfs_entriesfunction qlcnic_create_diag_entriesfunction qlcnic_remove_diag_entriesfunction qlcnic_82xx_add_sysfsfunction qlcnic_82xx_remove_sysfsfunction qlcnic_83xx_add_sysfsfunction qlcnic_83xx_remove_sysfs
Annotated Snippet
if (test_and_set_bit(__QLCNIC_LED_ENABLE, &adapter->state)) {
rtnl_unlock();
return -EBUSY;
}
}
if (h_beacon)
err = qlcnic_83xx_config_led(adapter, 1, h_beacon);
else
err = qlcnic_83xx_config_led(adapter, 0, !h_beacon);
if (!err)
ahw->beacon_state = h_beacon;
if (!ahw->beacon_state)
clear_bit(__QLCNIC_LED_ENABLE, &adapter->state);
rtnl_unlock();
return len;
}
static int qlcnic_82xx_store_beacon(struct qlcnic_adapter *adapter,
const char *buf, size_t len)
{
struct qlcnic_hardware_context *ahw = adapter->ahw;
int err, drv_sds_rings = adapter->drv_sds_rings;
u16 beacon;
u8 b_state, b_rate;
if (len != sizeof(u16))
return -EINVAL;
memcpy(&beacon, buf, sizeof(u16));
err = qlcnic_validate_beacon(adapter, beacon, &b_state, &b_rate);
if (err)
return err;
qlcnic_get_beacon_state(adapter);
if (ahw->beacon_state == b_state)
return len;
rtnl_lock();
if (!ahw->beacon_state) {
if (test_and_set_bit(__QLCNIC_LED_ENABLE, &adapter->state)) {
rtnl_unlock();
return -EBUSY;
}
}
if (test_bit(__QLCNIC_RESETTING, &adapter->state)) {
err = -EIO;
goto out;
}
if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) {
err = qlcnic_diag_alloc_res(adapter->netdev, QLCNIC_LED_TEST);
if (err)
goto out;
set_bit(__QLCNIC_DIAG_RES_ALLOC, &adapter->state);
}
err = qlcnic_config_led(adapter, b_state, b_rate);
if (!err) {
err = len;
ahw->beacon_state = b_state;
}
if (test_and_clear_bit(__QLCNIC_DIAG_RES_ALLOC, &adapter->state))
qlcnic_diag_free_res(adapter->netdev, drv_sds_rings);
out:
if (!ahw->beacon_state)
clear_bit(__QLCNIC_LED_ENABLE, &adapter->state);
rtnl_unlock();
return err;
}
static ssize_t qlcnic_store_beacon(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
int err = 0;
if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) {
dev_warn(dev,
"LED test not supported in non privileged mode\n");
return -EOPNOTSUPP;
}
Annotation
- Immediate include surface: `linux/slab.h`, `linux/interrupt.h`, `linux/swab.h`, `linux/dma-mapping.h`, `net/ip.h`, `linux/ipv6.h`, `linux/inetdevice.h`, `linux/sysfs.h`.
- Detected declarations: `function Copyright`, `function qlcnicvf_config_led`, `function qlcnic_store_bridged_mode`, `function qlcnic_show_bridged_mode`, `function qlcnic_store_diag_mode`, `function qlcnic_show_diag_mode`, `function qlcnic_validate_beacon`, `function qlcnic_83xx_store_beacon`, `function qlcnic_82xx_store_beacon`, `function qlcnic_store_beacon`.
- 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.