drivers/net/ethernet/sun/sunhme.h
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/sun/sunhme.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/sun/sunhme.h- Extension
.h- Size
- 27015 bytes
- Lines
- 511
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/pci.h
Detected Declarations
struct happy_meal_rxdstruct happy_meal_txdstruct hmeal_init_blockstruct quattrostruct happy_mealstruct quattroenum happy_transceiverenum happy_timer_state
Annotated Snippet
struct happy_meal_rxd {
hme32 rx_flags;
hme32 rx_addr;
};
#define RXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */
#define RXFLAG_OVERFLOW 0x40000000 /* 1 = buffer overflow */
#define RXFLAG_SIZE 0x3fff0000 /* Size of the buffer */
#define RXFLAG_CSUM 0x0000ffff /* HW computed checksum */
struct happy_meal_txd {
hme32 tx_flags;
hme32 tx_addr;
};
#define TXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */
#define TXFLAG_SOP 0x40000000 /* 1 = start of packet */
#define TXFLAG_EOP 0x20000000 /* 1 = end of packet */
#define TXFLAG_CSENABLE 0x10000000 /* 1 = enable hw-checksums */
#define TXFLAG_CSLOCATION 0x0ff00000 /* Where to stick the csum */
#define TXFLAG_CSBUFBEGIN 0x000fc000 /* Where to begin checksum */
#define TXFLAG_SIZE 0x00003fff /* Size of the packet */
#define TX_RING_SIZE 32 /* Must be >16 and <255, multiple of 16 */
#define RX_RING_SIZE 32 /* see ERX_CFG_SIZE* for possible values */
#if (TX_RING_SIZE < 16 || TX_RING_SIZE > 256 || (TX_RING_SIZE % 16) != 0)
#error TX_RING_SIZE holds illegal value
#endif
#define TX_RING_MAXSIZE 256
#define RX_RING_MAXSIZE 256
/* We use a 14 byte offset for checksum computation. */
#if (RX_RING_SIZE == 32)
#define ERX_CFG_DEFAULT(off) (ERX_CFG_DMAENABLE|((off)<<3)|ERX_CFG_SIZE32|((14/2)<<16))
#else
#if (RX_RING_SIZE == 64)
#define ERX_CFG_DEFAULT(off) (ERX_CFG_DMAENABLE|((off)<<3)|ERX_CFG_SIZE64|((14/2)<<16))
#else
#if (RX_RING_SIZE == 128)
#define ERX_CFG_DEFAULT(off) (ERX_CFG_DMAENABLE|((off)<<3)|ERX_CFG_SIZE128|((14/2)<<16))
#else
#if (RX_RING_SIZE == 256)
#define ERX_CFG_DEFAULT(off) (ERX_CFG_DMAENABLE|((off)<<3)|ERX_CFG_SIZE256|((14/2)<<16))
#else
#error RX_RING_SIZE holds illegal value
#endif
#endif
#endif
#endif
#define NEXT_RX(num) (((num) + 1) & (RX_RING_SIZE - 1))
#define NEXT_TX(num) (((num) + 1) & (TX_RING_SIZE - 1))
#define PREV_RX(num) (((num) - 1) & (RX_RING_SIZE - 1))
#define PREV_TX(num) (((num) - 1) & (TX_RING_SIZE - 1))
#define TX_BUFFS_AVAIL(hp) \
(((hp)->tx_old <= (hp)->tx_new) ? \
(hp)->tx_old + (TX_RING_SIZE - 1) - (hp)->tx_new : \
(hp)->tx_old - (hp)->tx_new - 1)
#define RX_OFFSET 2
#define RX_BUF_ALLOC_SIZE (1546 + RX_OFFSET + 64)
#define RX_COPY_THRESHOLD 256
struct hmeal_init_block {
struct happy_meal_rxd happy_meal_rxd[RX_RING_MAXSIZE];
struct happy_meal_txd happy_meal_txd[TX_RING_MAXSIZE];
};
#define hblock_offset(mem, elem) \
((__u32)((unsigned long)(&(((struct hmeal_init_block *)0)->mem[elem]))))
/* Now software state stuff. */
enum happy_transceiver {
external = 0,
internal = 1,
none = 2,
};
/* Timer state engine. */
enum happy_timer_state {
arbwait = 0, /* Waiting for auto negotiation to complete. */
lupwait = 1, /* Auto-neg complete, awaiting link-up status. */
ltrywait = 2, /* Forcing try of all modes, from fastest to slowest. */
asleep = 3, /* Time inactive. */
};
Annotation
- Immediate include surface: `linux/pci.h`.
- Detected declarations: `struct happy_meal_rxd`, `struct happy_meal_txd`, `struct hmeal_init_block`, `struct quattro`, `struct happy_meal`, `struct quattro`, `enum happy_transceiver`, `enum happy_timer_state`.
- 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.