Files
RedBear-OS/recipes/drivers/net/ixgbed/src/ixgbe.rs
T
vasilito b9874d0941 feat: USB storage read/write proof + full Red Bear OS tree sync
Add redbear-usb-storage-check in-guest binary that validates USB mass
storage read and write I/O: discovers /scheme/disk/ devices, writes a
test pattern to sector 2048, reads it back, verifies match, restores
original content. Updates test-usb-storage-qemu.sh with write-proof
verification step.

Includes all accumulated Red Bear OS work: kernel patches, relibc
patches, driver infrastructure, DRM/GPU, KDE recipes, firmware,
validation tooling, build system hardening, and documentation.
2026-05-03 23:03:24 +01:00

316 lines
10 KiB
Rust

#![allow(non_snake_case)]
#![allow(non_camel_case_types)]
#![allow(non_upper_case_globals)]
#![allow(clippy::unreadable_literal)]
pub const IXGBE_EIMC: u32 = 0x00888;
pub const IXGBE_CTRL: u32 = 0x00000;
pub const IXGBE_CTRL_LNK_RST: u32 = 0x00000008; /* Link Reset. Resets everything. */
pub const IXGBE_CTRL_RST: u32 = 0x04000000; /* Reset (SW) */
pub const IXGBE_CTRL_RST_MASK: u32 = IXGBE_CTRL_LNK_RST | IXGBE_CTRL_RST;
pub const IXGBE_EEC: u32 = 0x10010;
pub const IXGBE_EEC_ARD: u32 = 0x00000200; /* EEPROM Auto Read Done */
pub const IXGBE_RDRXCTL: u32 = 0x02F00;
pub const IXGBE_RDRXCTL_RESERVED_BITS: u32 = 1 << 25 | 1 << 26;
pub const IXGBE_RDRXCTL_DMAIDONE: u32 = 0x00000008; /* DMA init cycle done */
pub const IXGBE_AUTOC: u32 = 0x042A0;
pub const IXGBE_AUTOC_LMS_SHIFT: u32 = 13;
pub const IXGBE_AUTOC_LMS_MASK: u32 = 0x7 << IXGBE_AUTOC_LMS_SHIFT;
pub const IXGBE_AUTOC_LMS_10G_SERIAL: u32 = 0x3 << IXGBE_AUTOC_LMS_SHIFT;
pub const IXGBE_AUTOC_10G_PMA_PMD_MASK: u32 = 0x00000180;
pub const IXGBE_AUTOC_10G_PMA_PMD_SHIFT: u32 = 7;
pub const IXGBE_AUTOC_10G_XAUI: u32 = 0x0 << IXGBE_AUTOC_10G_PMA_PMD_SHIFT;
pub const IXGBE_AUTOC_AN_RESTART: u32 = 0x00001000;
pub const IXGBE_GPRC: u32 = 0x04074;
pub const IXGBE_GPTC: u32 = 0x04080;
pub const IXGBE_GORCL: u32 = 0x04088;
pub const IXGBE_GORCH: u32 = 0x0408C;
pub const IXGBE_GOTCL: u32 = 0x04090;
pub const IXGBE_GOTCH: u32 = 0x04094;
pub const IXGBE_RXCTRL: u32 = 0x03000;
pub const IXGBE_RXCTRL_RXEN: u32 = 0x00000001; /* Enable Receiver */
pub fn IXGBE_RXPBSIZE(i: u32) -> u32 {
0x03C00 + (i * 4)
}
pub const IXGBE_RXPBSIZE_128KB: u32 = 0x00020000; /* 128KB Packet Buffer */
pub const IXGBE_HLREG0: u32 = 0x04240;
pub const IXGBE_HLREG0_RXCRCSTRP: u32 = 0x00000002; /* bit 1 */
pub const IXGBE_RDRXCTL_CRCSTRIP: u32 = 0x00000002; /* CRC Strip */
pub const IXGBE_FCTRL: u32 = 0x05080;
pub const IXGBE_FCTRL_BAM: u32 = 0x00000400; /* Broadcast Accept Mode */
pub fn IXGBE_SRRCTL(i: u32) -> u32 {
if i <= 15 {
0x02100 + (i * 4)
} else if i < 64 {
0x01014 + (i * 0x40)
} else {
0x0D014 + ((i - 64) * 0x40)
}
}
pub const IXGBE_SRRCTL_DESCTYPE_MASK: u32 = 0x0E000000;
pub const IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF: u32 = 0x02000000;
pub const IXGBE_SRRCTL_DROP_EN: u32 = 0x10000000;
pub fn IXGBE_RDBAL(i: u32) -> u32 {
if i < 64 {
0x01000 + (i * 0x40)
} else {
0x0D000 + ((i - 64) * 0x40)
}
}
pub fn IXGBE_RDBAH(i: u32) -> u32 {
if i < 64 {
0x01004 + (i * 0x40)
} else {
0x0D004 + ((i - 64) * 0x40)
}
}
pub fn IXGBE_RDLEN(i: u32) -> u32 {
if i < 64 {
0x01008 + (i * 0x40)
} else {
0x0D008 + ((i - 64) * 0x40)
}
}
pub fn IXGBE_RDH(i: u32) -> u32 {
if i < 64 {
0x01010 + (i * 0x40)
} else {
0x0D010 + ((i - 64) * 0x40)
}
}
pub fn IXGBE_RDT(i: u32) -> u32 {
if i < 64 {
0x01018 + (i * 0x40)
} else {
0x0D018 + ((i - 64) * 0x40)
}
}
pub const IXGBE_CTRL_EXT: u32 = 0x00018;
pub const IXGBE_CTRL_EXT_NS_DIS: u32 = 0x00010000; /* No Snoop disable */
pub fn IXGBE_DCA_RXCTRL(i: u32) -> u32 {
if i <= 15 {
0x02200 + (i * 4)
} else if i < 64 {
0x0100C + (i * 0x40)
} else {
0x0D00C + ((i - 64) * 0x40)
}
}
pub const IXGBE_HLREG0_TXCRCEN: u32 = 0x00000001; /* bit 0 */
pub const IXGBE_HLREG0_TXPADEN: u32 = 0x00000400; /* bit 10 */
pub fn IXGBE_TXPBSIZE(i: u32) -> u32 {
0x0CC00 + (i * 4)
} /* 8 of these */
pub const IXGBE_TXPBSIZE_40KB: u32 = 0x0000A000; /* 40KB Packet Buffer */
pub const IXGBE_DTXMXSZRQ: u32 = 0x08100;
pub const IXGBE_RTTDCS: u32 = 0x04900;
pub const IXGBE_RTTDCS_ARBDIS: u32 = 0x00000040; /* DCB arbiter disable */
pub fn IXGBE_TDBAL(i: u32) -> u32 {
0x06000 + (i * 0x40)
} /* 32 of them (0-31)*/
pub fn IXGBE_TDBAH(i: u32) -> u32 {
0x06004 + (i * 0x40)
}
pub fn IXGBE_TDLEN(i: u32) -> u32 {
0x06008 + (i * 0x40)
}
pub fn IXGBE_TXDCTL(i: u32) -> u32 {
0x06028 + (i * 0x40)
}
pub const IXGBE_DMATXCTL: u32 = 0x04A80;
pub const IXGBE_DMATXCTL_TE: u32 = 0x1; /* Transmit Enable */
pub fn IXGBE_RXDCTL(i: u32) -> u32 {
if i < 64 {
0x01028 + (i * 0x40)
} else {
0x0D028 + ((i - 64) * 0x40)
}
}
pub const IXGBE_RXDCTL_ENABLE: u32 = 0x02000000; /* Ena specific Rx Queue */
pub const IXGBE_TXDCTL_ENABLE: u32 = 0x02000000; /* Ena specific Tx Queue */
pub fn IXGBE_TDH(i: u32) -> u32 {
0x06010 + (i * 0x40)
}
pub fn IXGBE_TDT(i: u32) -> u32 {
0x06018 + (i * 0x40)
}
pub const IXGBE_FCTRL_MPE: u32 = 0x00000100; /* Multicast Promiscuous Ena*/
pub const IXGBE_FCTRL_UPE: u32 = 0x00000200; /* Unicast Promiscuous Ena */
pub const IXGBE_LINKS: u32 = 0x042A4;
pub const IXGBE_LINKS_UP: u32 = 0x40000000;
pub const IXGBE_LINKS_SPEED_82599: u32 = 0x30000000;
pub const IXGBE_LINKS_SPEED_100_82599: u32 = 0x10000000;
pub const IXGBE_LINKS_SPEED_1G_82599: u32 = 0x20000000;
pub const IXGBE_LINKS_SPEED_10G_82599: u32 = 0x30000000;
pub fn IXGBE_RAL(i: u32) -> u32 {
if i <= 15 {
0x05400 + (i * 8)
} else {
0x0A200 + (i * 8)
}
}
pub fn IXGBE_RAH(i: u32) -> u32 {
if i <= 15 {
0x05404 + (i * 8)
} else {
0x0A204 + (i * 8)
}
}
pub const IXGBE_RXD_STAT_DD: u32 = 0x01; /* Descriptor Done */
pub const IXGBE_RXD_STAT_EOP: u32 = 0x02; /* End of Packet */
pub const IXGBE_RXDADV_STAT_DD: u32 = IXGBE_RXD_STAT_DD; /* Done */
pub const IXGBE_RXDADV_STAT_EOP: u32 = IXGBE_RXD_STAT_EOP; /* End of Packet */
pub const IXGBE_ADVTXD_PAYLEN_SHIFT: u32 = 14; /* Adv desc PAYLEN shift */
pub const IXGBE_TXD_CMD_EOP: u32 = 0x01000000; /* End of Packet */
pub const IXGBE_ADVTXD_DCMD_EOP: u32 = IXGBE_TXD_CMD_EOP; /* End of Packet */
pub const IXGBE_TXD_CMD_RS: u32 = 0x08000000; /* Report Status */
pub const IXGBE_ADVTXD_DCMD_RS: u32 = IXGBE_TXD_CMD_RS; /* Report Status */
pub const IXGBE_TXD_CMD_IFCS: u32 = 0x02000000; /* Insert FCS (Ethernet CRC) */
pub const IXGBE_ADVTXD_DCMD_IFCS: u32 = IXGBE_TXD_CMD_IFCS; /* Insert FCS */
pub const IXGBE_TXD_CMD_DEXT: u32 = 0x20000000; /* Desc extension (0 = legacy) */
pub const IXGBE_ADVTXD_DTYP_DATA: u32 = 0x00300000; /* Adv Data Descriptor */
pub const IXGBE_ADVTXD_DCMD_DEXT: u32 = IXGBE_TXD_CMD_DEXT; /* Desc ext 1=Adv */
pub const IXGBE_TXD_STAT_DD: u32 = 0x00000001; /* Descriptor Done */
pub const IXGBE_ADVTXD_STAT_DD: u32 = IXGBE_TXD_STAT_DD; /* Descriptor Done */
/* Interrupt Registers */
pub const IXGBE_EICR: u32 = 0x00800;
pub const IXGBE_EIAC: u32 = 0x00810;
pub const IXGBE_EIMS: u32 = 0x00880;
pub const IXGBE_IVAR_ALLOC_VAL: u32 = 0x80; /* Interrupt Allocation valid */
pub const IXGBE_EICR_RTX_QUEUE: u32 = 0x0000FFFF; /* RTx Queue Interrupt */
pub fn IXGBE_IVAR(i: u32) -> u32 {
0x00900 + (i * 4)
} /* 24 at 0x900-0x960 */
#[derive(Debug, Copy, Clone)]
#[repr(C, packed)]
pub struct ixgbe_adv_rx_desc_read {
pub pkt_addr: u64,
/* Packet buffer address */
pub hdr_addr: u64,
/* Header buffer address */
}
/* Receive Descriptor - Advanced */
#[derive(Debug, Copy, Clone)]
#[repr(C, packed)]
pub struct ixgbe_adv_rx_desc_wb_lower_lo_dword_hs_rss {
pub pkt_info: u16,
/* RSS, Pkt type */
pub hdr_info: u16,
/* Splithdr, hdrlen */
}
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub union ixgbe_adv_rx_desc_wb_lower_lo_dword {
pub data: u32,
pub hs_rss: ixgbe_adv_rx_desc_wb_lower_lo_dword_hs_rss,
}
#[derive(Debug, Copy, Clone)]
#[repr(C, packed)]
pub struct ixgbe_adv_rx_desc_wb_lower_hi_dword_csum_ip {
pub ip_id: u16,
/* IP id */
pub csum: u16,
/* Packet Checksum */
}
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub union ixgbe_adv_rx_desc_wb_lower_hi_dword {
pub rss: u32,
/* RSS Hash */
pub csum_ip: ixgbe_adv_rx_desc_wb_lower_hi_dword_csum_ip,
}
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub struct ixgbe_adv_rx_desc_wb_lower {
pub lo_dword: ixgbe_adv_rx_desc_wb_lower_lo_dword,
pub hi_dword: ixgbe_adv_rx_desc_wb_lower_hi_dword,
}
#[derive(Debug, Copy, Clone)]
#[repr(C, packed)]
pub struct ixgbe_adv_rx_desc_wb_upper {
pub status_error: u32,
/* ext status/error */
pub length: u16,
/* Packet length */
pub vlan: u16,
/* VLAN tag */
}
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub struct ixgbe_adv_rx_desc_wb {
pub lower: ixgbe_adv_rx_desc_wb_lower,
pub upper: ixgbe_adv_rx_desc_wb_upper,
}
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub union ixgbe_adv_rx_desc {
pub read: ixgbe_adv_rx_desc_read,
pub wb: ixgbe_adv_rx_desc_wb, /* writeback */
_union_align: [u64; 2],
}
/* Transmit Descriptor - Advanced */
#[derive(Debug, Copy, Clone)]
#[repr(C, packed)]
pub struct ixgbe_adv_tx_desc_read {
pub buffer_addr: u64,
/* Address of descriptor's data buf */
pub cmd_type_len: u32,
pub olinfo_status: u32,
}
#[derive(Debug, Copy, Clone)]
#[repr(C, packed)]
pub struct ixgbe_adv_tx_desc_wb {
pub rsvd: u64,
/* Reserved */
pub nxtseq_seed: u32,
pub status: u32,
}
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub union ixgbe_adv_tx_desc {
pub read: ixgbe_adv_tx_desc_read,
pub wb: ixgbe_adv_tx_desc_wb,
_union_align: [u64; 2],
}