mirror of
https://github.com/qemu/qemu.git
synced 2026-02-04 02:24:51 +00:00
i82596: Implement enhanced TX/RX with packet queuing and filtering
In this patch I have added the following: - Rewrote transmit path with CSMA/CD collision handling and retry logic - Implemented flexible TX buffer descriptor (TBD) chain processing - Rewrote receive path with packet filtering and monitor mode support - Added RX packet queue for handling resource exhaustion - Implemented queue flush timer and management - Added RX state machine with proper state transitions - Implemented packet filtering (unicast, broadcast, multicast, promiscuous) - Added SCB RU_START enhancement to find usable RFDs - Implemented dump command support - Added bus throttle timer loading (LOAD_THROTTLE/LOAD_START commands) - Enhanced signal_ca with proper initialization sequence - Finally, adding self-test functionality Note: With this patch, and the previous ones in the patch series, we are able to achive proper 82596 NIC emulation. Signed-off-by: Soumyajyotii Ssarkar <soumyajyotisarkar23@gmail.com> Tested-by: Helge Deller <deller@gmx.de> Tested-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
committed by
Helge Deller
parent
cbf62eef84
commit
fec69f17be
1932
hw/net/i82596.c
1932
hw/net/i82596.c
File diff suppressed because it is too large
Load Diff
@@ -421,10 +421,27 @@ lasi_82596_mem_writew(uint64_t addr, uint32_t val) "addr=0x%"PRIx64" val=0x%04x"
|
||||
i82596_s_reset(void *s) "%p Reset chip"
|
||||
i82596_transmit(uint32_t size, uint32_t addr) "size %u from addr 0x%04x"
|
||||
i82596_receive_analysis(const char *s) "%s"
|
||||
i82596_receive_packet(size_t sz) "len=%zu"
|
||||
i82596_receive_queue_full(void) "Packet queue full, dropping packet"
|
||||
i82596_receive_suspended(void) "RX unit suspended, queueing packet"
|
||||
i82596_rx_state_change(uint8_t old_state, uint8_t new_state) "RX state changed from %d to %d"
|
||||
i82596_new_mac(const char *id_with_mac) "New MAC for: %s"
|
||||
i82596_set_multicast(uint16_t count) "Added %d multicast entries"
|
||||
i82596_channel_attention(void *s) "%p: Received CHANNEL ATTENTION"
|
||||
i82596_scb_command(uint8_t cuc, uint8_t ruc) "SCB command CUC=0x%02x RUC=0x%02x"
|
||||
i82596_dump(uint32_t addr) "Dump command to addr 0x%08x"
|
||||
i82596_flush_queue(int count) "Flushing %d packets from queue"
|
||||
i82596_tx_tfd(uint64_t addr, uint16_t status, uint16_t cmd, uint32_t link, uint32_t tbd) "TFD @0x%"PRIx64": status=0x%04x cmd=0x%04x link=0x%08x tbd=0x%08x"
|
||||
i82596_tx_tbd(uint64_t addr, uint16_t size, uint32_t buf) "TBD @0x%"PRIx64": size=%d buf=0x%08x"
|
||||
i82596_rx_rfd(uint64_t addr, uint16_t status, uint16_t cmd, uint32_t link, uint32_t rbd) "RFD @0x%"PRIx64": status=0x%04x cmd=0x%04x link=0x%08x rbd=0x%08x"
|
||||
i82596_rx_rbd(uint64_t addr, uint16_t count, uint32_t buf, uint16_t size) "RBD @0x%"PRIx64": count=%d buf=0x%08x size=%d"
|
||||
i82596_receive_packet(const uint8_t *buf, size_t size) "RX packet %p size %zu"
|
||||
i82596_rx_short_frame(size_t size) "RX: Frame too short (%zu bytes)"
|
||||
i82596_rx_rfd_update(uint32_t addr, uint32_t next_rfd) "RX: Updating RFD 0x%08x to point to 0x%08x"
|
||||
i82596_rx_out_of_rbds(void) "RX: Out of RBDs mid-frame"
|
||||
i82596_rx_incomplete(size_t copied, size_t total) "RX: Incomplete copy (%zu/%zu bytes)"
|
||||
i82596_rx_complete(uint32_t crc, uint32_t align, uint32_t resource) "RX: Complete (errors: CRC=%d align=%d res=%d)"
|
||||
i82596_receive_iov(size_t size, int iovcnt) "RX IOV: %zu bytes in %d vectors"
|
||||
i82596_ca_init(uint32_t scb, uint8_t mode, uint32_t base) "CA: Init - SCB=0x%08x mode=%d base=0x%08x"
|
||||
i82596_ioport_write(uint32_t addr, uint32_t val) "IO write addr=0x%08x val=0x%08x"
|
||||
|
||||
# imx_fec.c
|
||||
imx_phy_read_num(int phy, int configured) "read request from unconfigured phy %d (configured %d)"
|
||||
|
||||
Reference in New Issue
Block a user