drivers/s390/scsi/zfcp_sysfs.c

Source file repositories/reference/linux-study-clean/drivers/s390/scsi/zfcp_sysfs.c

File Facts

System
Linux kernel
Corpus path
drivers/s390/scsi/zfcp_sysfs.c
Extension
.c
Size
29022 bytes
Lines
936
Domain
Driver Families
Bucket
drivers/s390
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.

Dependency Surface

Detected Declarations

Annotated Snippet

if (!zfcp_diag_support_sfp(adapter)) {			       \
			rc = -EOPNOTSUPP;				       \
			goto out;					       \
		}							       \
									       \
		diag_hdr = &adapter->diagnostics->port_data.header;	       \
									       \
		rc = zfcp_diag_update_buffer_limited(			       \
			adapter, diag_hdr, zfcp_diag_update_port_data_buffer); \
		if (rc != 0)						       \
			goto out;					       \
									       \
		spin_lock_irqsave(&diag_hdr->access_lock, flags);	       \
		rc = sysfs_emit(					       \
			buf, _prtfmt "\n",				       \
			adapter->diagnostics->port_data.data._qtcb_member);    \
		spin_unlock_irqrestore(&diag_hdr->access_lock, flags);	       \
									       \
	out:								       \
		zfcp_ccw_adapter_put(adapter);				       \
		return rc;						       \
	}								       \
	static ZFCP_DEV_ATTR(adapter_diag_sfp, _name, 0400,		       \
			     zfcp_sysfs_adapter_diag_sfp_##_name##_show, NULL)

ZFCP_DEFINE_DIAG_SFP_ATTR(temperature, temperature, "%hd");
ZFCP_DEFINE_DIAG_SFP_ATTR(vcc, vcc, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(tx_bias, tx_bias, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(tx_power, tx_power, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(rx_power, rx_power, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(port_tx_type, sfp_flags.port_tx_type, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(optical_port, sfp_flags.optical_port, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(sfp_invalid, sfp_flags.sfp_invalid, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(connector_type, sfp_flags.connector_type, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(fec_active, sfp_flags.fec_active, "%hu");

static struct attribute *zfcp_sysfs_diag_attrs[] = {
	&dev_attr_adapter_diag_sfp_temperature.attr,
	&dev_attr_adapter_diag_sfp_vcc.attr,
	&dev_attr_adapter_diag_sfp_tx_bias.attr,
	&dev_attr_adapter_diag_sfp_tx_power.attr,
	&dev_attr_adapter_diag_sfp_rx_power.attr,
	&dev_attr_adapter_diag_sfp_port_tx_type.attr,
	&dev_attr_adapter_diag_sfp_optical_port.attr,
	&dev_attr_adapter_diag_sfp_sfp_invalid.attr,
	&dev_attr_adapter_diag_sfp_connector_type.attr,
	&dev_attr_adapter_diag_sfp_fec_active.attr,
	&dev_attr_adapter_diag_b2b_credit.attr,
	NULL,
};

static const struct attribute_group zfcp_sysfs_diag_attr_group = {
	.name = "diagnostics",
	.attrs = zfcp_sysfs_diag_attrs,
};

const struct attribute_group *zfcp_sysfs_adapter_attr_groups[] = {
	&zfcp_sysfs_adapter_attr_group,
	&zfcp_sysfs_diag_attr_group,
	NULL,
};

Annotation

Implementation Notes