drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c- Extension
.c- Size
- 46190 bytes
- Lines
- 2050
- 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/bitrev.hlinux/completion.hlinux/crc32.hlinux/ethtool.hlinux/ip.hlinux/phy.hlinux/udp.hnet/pkt_cls.hnet/pkt_sched.hnet/tcp.hnet/udp.hnet/tc_act/tc_gact.hstmmac.h
Detected Declarations
struct stmmachdrstruct stmmac_packet_attrsstruct stmmac_test_privfunction stmmac_test_loopback_validatefunction __stmmac_test_loopbackfunction stmmac_test_mac_loopbackfunction stmmac_test_phy_loopbackfunction stmmac_test_mmcfunction stmmac_test_eeefunction stmmac_filter_checkfunction stmmac_hash_checkfunction stmmac_perfect_checkfunction stmmac_test_hfiltfunction stmmac_test_pfiltfunction stmmac_test_mcfiltfunction stmmac_test_ucfiltfunction stmmac_test_flowctrl_validatefunction stmmac_test_flowctrlfunction stmmac_test_rssfunction stmmac_test_vlan_validatefunction __stmmac_test_vlanfiltfunction stmmac_test_vlanfiltfunction stmmac_test_vlanfilt_perfectfunction __stmmac_test_dvlanfiltfunction stmmac_test_dvlanfiltfunction stmmac_test_dvlanfilt_perfectfunction stmmac_test_rxpfunction stmmac_test_rxpfunction stmmac_test_desc_saifunction stmmac_test_desc_sarfunction stmmac_test_reg_saifunction stmmac_test_reg_sarfunction stmmac_test_vlanoff_commonfunction stmmac_test_vlanofffunction stmmac_test_svlanofffunction __stmmac_test_l3filtfunction __stmmac_test_l3filtfunction stmmac_test_l3filt_dafunction stmmac_test_l3filt_safunction __stmmac_test_l4filtfunction __stmmac_test_l4filtfunction stmmac_test_l4filt_da_tcpfunction stmmac_test_l4filt_sa_tcpfunction stmmac_test_l4filt_da_udpfunction stmmac_test_l4filt_sa_udpfunction stmmac_test_arp_validatefunction stmmac_test_arpoffloadfunction __stmmac_test_jumbo
Annotated Snippet
struct stmmachdr {
__be32 version;
__be64 magic;
u8 id;
} __packed;
#define STMMAC_TEST_PKT_SIZE (sizeof(struct ethhdr) + sizeof(struct iphdr) + \
sizeof(struct stmmachdr))
#define STMMAC_TEST_PKT_MAGIC 0xdeadcafecafedeadULL
#define STMMAC_LB_TIMEOUT msecs_to_jiffies(200)
struct stmmac_packet_attrs {
int vlan;
int vlan_id_in;
int vlan_id_out;
unsigned char *src;
const unsigned char *dst;
u32 ip_src;
u32 ip_dst;
int tcp;
int sport;
int dport;
u32 exp_hash;
int dont_wait;
int timeout;
int size;
int max_size;
int remove_sa;
u8 id;
int sarc;
u16 queue_mapping;
u64 timestamp;
};
static u8 stmmac_test_next_id;
static struct sk_buff *stmmac_test_get_udp_skb(struct stmmac_priv *priv,
struct stmmac_packet_attrs *attr)
{
struct sk_buff *skb = NULL;
struct udphdr *uhdr = NULL;
struct tcphdr *thdr = NULL;
struct stmmachdr *shdr;
struct ethhdr *ehdr;
struct iphdr *ihdr;
int iplen, size;
size = attr->size + STMMAC_TEST_PKT_SIZE;
if (attr->vlan) {
size += 4;
if (attr->vlan > 1)
size += 4;
}
if (attr->tcp)
size += sizeof(struct tcphdr);
else
size += sizeof(struct udphdr);
if (attr->max_size && (attr->max_size > size))
size = attr->max_size;
skb = netdev_alloc_skb(priv->dev, size);
if (!skb)
return NULL;
prefetchw(skb->data);
if (attr->vlan > 1)
ehdr = skb_push(skb, ETH_HLEN + 8);
else if (attr->vlan)
ehdr = skb_push(skb, ETH_HLEN + 4);
else if (attr->remove_sa)
ehdr = skb_push(skb, ETH_HLEN - 6);
else
ehdr = skb_push(skb, ETH_HLEN);
skb_reset_mac_header(skb);
skb_set_network_header(skb, skb->len);
ihdr = skb_put(skb, sizeof(*ihdr));
skb_set_transport_header(skb, skb->len);
if (attr->tcp)
thdr = skb_put(skb, sizeof(*thdr));
else
uhdr = skb_put(skb, sizeof(*uhdr));
if (!attr->remove_sa)
eth_zero_addr(ehdr->h_source);
eth_zero_addr(ehdr->h_dest);
Annotation
- Immediate include surface: `linux/bitrev.h`, `linux/completion.h`, `linux/crc32.h`, `linux/ethtool.h`, `linux/ip.h`, `linux/phy.h`, `linux/udp.h`, `net/pkt_cls.h`.
- Detected declarations: `struct stmmachdr`, `struct stmmac_packet_attrs`, `struct stmmac_test_priv`, `function stmmac_test_loopback_validate`, `function __stmmac_test_loopback`, `function stmmac_test_mac_loopback`, `function stmmac_test_phy_loopback`, `function stmmac_test_mmc`, `function stmmac_test_eee`, `function stmmac_filter_check`.
- 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.