|
iPXE
|
Cadence Gigabit Ethernet MAC (GEM) network driver. More...
#include <stdint.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <byteswap.h>#include <ipxe/netdevice.h>#include <ipxe/ethernet.h>#include <ipxe/if_ether.h>#include <ipxe/iobuf.h>#include <ipxe/timer.h>#include <ipxe/devtree.h>#include <ipxe/fdt.h>#include "cgem.h"Go to the source code of this file.
Functions | |
| FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
| static int | cgem_reset (struct cgem_nic *cgem) |
| Reset hardware. More... | |
| static int | cgem_mii_wait (struct cgem_nic *cgem) |
| Wait for MII operation to complete. More... | |
| static int | cgem_mii_read (struct mii_interface *mdio, unsigned int phy, unsigned int reg) |
| Read from MII register. More... | |
| static int | cgem_mii_write (struct mii_interface *mdio, unsigned int phy, unsigned int reg, unsigned int data) |
| Write to MII register. More... | |
| static int | cgem_init_phy (struct cgem_nic *cgem) |
| Initialise PHY. More... | |
| static int | cgem_check_link (struct net_device *netdev) |
| Check link state. More... | |
| static void | cgem_expired (struct retry_timer *timer, int over __unused) |
| Check link state periodically. More... | |
| static int | cgem_create_ring (struct cgem_nic *cgem, struct cgem_ring *ring) |
| Create descriptor ring. More... | |
| static void | cgem_destroy_ring (struct cgem_nic *cgem, struct cgem_ring *ring) |
| Destroy descriptor ring. More... | |
| static void | cgem_refill_rx (struct cgem_nic *cgem) |
| Refill receive descriptor ring. More... | |
| static int | cgem_open (struct net_device *netdev) |
| Open network device. More... | |
| static void | cgem_close (struct net_device *netdev) |
| Close network device. More... | |
| static int | cgem_transmit (struct net_device *netdev, struct io_buffer *iobuf) |
| Transmit packet. More... | |
| static void | cgem_poll_tx (struct net_device *netdev) |
| Poll for completed packets. More... | |
| static void | cgem_poll_rx (struct net_device *netdev) |
| Poll for received packets. More... | |
| static void | cgem_poll (struct net_device *netdev) |
| Poll for completed and received packets. More... | |
| static int | cgem_probe (struct dt_device *dt, unsigned int offset) |
| Probe devicetree device. More... | |
| static void | cgem_remove (struct dt_device *dt) |
| Remove devicetree device. More... | |
Variables | |
| static struct mii_operations | cgem_mii_operations |
| MII operations. More... | |
| static struct net_device_operations | cgem_operations |
| Cadence GEM network device operations. More... | |
| static const char * | cgem_ids [] |
| Cadence GEM compatible model identifiers. More... | |
| struct dt_driver cgem_driver | __dt_driver |
| Cadence GEM devicetree driver. More... | |
Cadence Gigabit Ethernet MAC (GEM) network driver.
Based primarily on the Zynq 7000 SoC Technical Reference Manual, available at the time of writing from:
https://docs.amd.com/r/en-US/ug585-zynq-7000-SoC-TRM
Definition in file cgem.c.
| FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
|
static |
Reset hardware.
| cgem | Cadence GEM device |
| rc | Return status code |
Definition at line 64 of file cgem.c.
References CGEM_DMACR, CGEM_DMACR_BLENGTH_MAX, CGEM_DMACR_RXBUF, CGEM_DMACR_RXSIZE_MAX, CGEM_DMACR_TXSIZE_MAX, CGEM_IDR, CGEM_IDR_ALL, CGEM_NWCTRL, CGEM_NWCTRL_MDEN, CGEM_NWCTRL_STATCLR, CGEM_RX_LEN, CGEM_RXQBASE, CGEM_TXQBASE, cgem_nic::regs, and writel().
Referenced by cgem_close(), cgem_probe(), and cgem_remove().
|
static |
Wait for MII operation to complete.
| cgem | Cadence GEM device |
| rc | Return status code |
Definition at line 110 of file cgem.c.
References CGEM_MII_MAX_WAIT_US, CGEM_NWSR, CGEM_NWSR_MII_IDLE, DBGC, ETIMEDOUT, cgem_nic::name, readl(), cgem_nic::regs, and udelay().
Referenced by cgem_mii_read(), and cgem_mii_write().
|
static |
Read from MII register.
| mdio | MII interface |
| phy | PHY address |
| reg | Register address |
| data | Data read, or negative error |
Definition at line 138 of file cgem.c.
References cgem_mii_wait(), CGEM_PHYMNTNC, CGEM_PHYMNTNC_ADDR, CGEM_PHYMNTNC_CLAUSE22, CGEM_PHYMNTNC_DATA_MASK, CGEM_PHYMNTNC_FIXED, CGEM_PHYMNTNC_OP_READ, CGEM_PHYMNTNC_REG, container_of, data, cgem_nic::mdio, rc, readl(), reg, cgem_nic::regs, and writel().
|
static |
Write to MII register.
| mdio | MII interface |
| phy | PHY address |
| reg | Register address |
| data | Data to write |
| rc | Return status code |
Definition at line 170 of file cgem.c.
References cgem_mii_wait(), CGEM_PHYMNTNC, CGEM_PHYMNTNC_ADDR, CGEM_PHYMNTNC_CLAUSE22, CGEM_PHYMNTNC_FIXED, CGEM_PHYMNTNC_OP_READ, CGEM_PHYMNTNC_REG, container_of, data, cgem_nic::mdio, rc, reg, cgem_nic::regs, and writel().
|
static |
Initialise PHY.
| cgem | Cadence GEM device |
| rc | Return status code |
Definition at line 207 of file cgem.c.
References DBGC, cgem_nic::mii, mii_find(), mii_reset(), cgem_nic::name, rc, and strerror().
Referenced by cgem_probe().
|
static |
Check link state.
| netdev | Network device |
Definition at line 232 of file cgem.c.
References DBGC, cgem_nic::mii, mii_check_link(), cgem_nic::name, netdev, net_device::priv, rc, and strerror().
Referenced by cgem_expired(), cgem_open(), and cgem_probe().
|
static |
Check link state periodically.
| retry | Link state check timer |
| over | Failure indicator |
Definition at line 252 of file cgem.c.
References cgem_check_link(), CGEM_LINK_INTERVAL, container_of, netdev, cgem_nic::netdev, and start_timer_fixed().
Referenced by cgem_probe().
Create descriptor ring.
| cgem | Cadence GEM device |
| ring | Descriptor ring |
| rc | Return status code |
Definition at line 277 of file cgem.c.
References CGEM_RX_ADDR_OWNED, CGEM_RX_ADDR_WRAP, CGEM_TX_FL_OWNED, CGEM_TX_FL_WRAP, cgem_ring::count, cpu_to_le32, DBGC, desc, cgem_ring::desc, cgem_nic::dma, dma(), dma_alloc(), ENOMEM, cgem_ring::len, cgem_ring::map, cgem_nic::name, cgem_ring::qbase, cgem_nic::regs, and writel().
Referenced by cgem_open().
Destroy descriptor ring.
| cgem | Cadence GEM device |
| ring | Descriptor ring |
Definition at line 312 of file cgem.c.
References cgem_ring::cons, cgem_ring::desc, dma_free(), cgem_ring::len, cgem_ring::map, NULL, cgem_ring::prod, cgem_ring::qbase, cgem_nic::regs, and writel().
Referenced by cgem_close(), and cgem_open().
|
static |
Refill receive descriptor ring.
| cgem | Cadence GEM device |
Definition at line 330 of file cgem.c.
References addr, alloc_rx_iob(), assert(), CGEM_NUM_RX_DESC, CGEM_RX_ADDR_WRAP, CGEM_RX_LEN, cgem_ring::cons, cpu_to_le32, io_buffer::data, DBGC2, cgem_ring::desc, cgem_nic::dma, iob_dma(), cgem_nic::name, NULL, cgem_ring::prod, cgem_nic::rx, rx, and cgem_nic::rx_iobuf.
Referenced by cgem_open(), and cgem_poll().
|
static |
Open network device.
| netdev | Network device |
| rc | Return status code |
Definition at line 373 of file cgem.c.
References cgem_check_link(), cgem_create_ring(), cgem_destroy_ring(), CGEM_LADDRH, CGEM_LADDRL, CGEM_LINK_INTERVAL, CGEM_NWCTRL, CGEM_NWCTRL_NORMAL, cgem_refill_rx(), ETH_ALEN, net_device::ll_addr, mac, memcpy(), netdev, net_device::priv, rc, cgem_nic::regs, cgem_nic::rx, start_timer_fixed(), cgem_nic::timer, cgem_nic::tx, and writel().
|
static |
Close network device.
| netdev | Network device |
Definition at line 417 of file cgem.c.
References cgem_destroy_ring(), CGEM_NUM_RX_DESC, cgem_reset(), free_rx_iob(), netdev, NULL, net_device::priv, cgem_nic::rx, cgem_nic::rx_iobuf, stop_timer(), cgem_nic::timer, and cgem_nic::tx.
|
static |
Transmit packet.
| netdev | Network device |
| iobuf | I/O buffer |
| rc | Return status code |
Definition at line 448 of file cgem.c.
References CGEM_NUM_TX_DESC, CGEM_NWCTRL, CGEM_NWCTRL_NORMAL, CGEM_NWCTRL_STARTTX, CGEM_TX_FL_LAST, CGEM_TX_FL_WRAP, cgem_ring::cons, cpu_to_le32, io_buffer::data, DBGC, DBGC2, cgem_ring::desc, cgem_nic::dma, ENOBUFS, ETH_ZLEN, flags, iob_dma(), iob_len(), iob_map_tx(), iob_pad(), cgem_nic::name, netdev, net_device::priv, cgem_ring::prod, rc, cgem_nic::regs, cgem_nic::tx, tx, wmb(), and writel().
|
static |
Poll for completed packets.
@V netdev Network device
Definition at line 499 of file cgem.c.
References CGEM_NUM_TX_DESC, CGEM_TX_FL_OWNED, cgem_ring::cons, cpu_to_le32, DBGC2, cgem_ring::desc, cgem_nic::name, netdev, netdev_tx_complete_next(), net_device::priv, cgem_ring::prod, cgem_nic::tx, and tx.
Referenced by cgem_poll().
|
static |
Poll for received packets.
| netdev | Network device |
Definition at line 528 of file cgem.c.
References CGEM_NUM_RX_DESC, CGEM_RX_ADDR_OWNED, CGEM_RX_FL_LEN, cgem_ring::cons, cpu_to_le32, DBGC2, cgem_ring::desc, flags, iob_put, le32_to_cpu, len, cgem_nic::name, netdev, netdev_rx(), NULL, net_device::priv, cgem_ring::prod, cgem_nic::rx, rx, and cgem_nic::rx_iobuf.
Referenced by cgem_poll().
|
static |
Poll for completed and received packets.
| netdev | Network device |
Definition at line 567 of file cgem.c.
References cgem_poll_rx(), cgem_poll_tx(), cgem_refill_rx(), netdev, and net_device::priv.
|
static |
Probe devicetree device.
| dt | Devicetree device |
| offset | Starting node offset |
| rc | Return status code |
Definition at line 602 of file cgem.c.
References alloc_etherdev(), cgem_check_link(), cgem_expired(), cgem_init_phy(), cgem_init_ring(), CGEM_LADDRH, CGEM_LADDRL, cgem_mii_operations, CGEM_NUM_RX_DESC, CGEM_NUM_TX_DESC, cgem_operations, CGEM_REG_IDX, CGEM_REG_LEN, cgem_reset(), CGEM_RXQBASE, CGEM_TXQBASE, DBGC, dt_device::dev, net_device::dev, dt_device::dma, cgem_nic::dma, dt_ioremap(), dt_set_drvdata(), ENODEV, ENOMEM, ETH_ALEN, fdt_mac(), iounmap(), net_device::ll_addr, mac, cgem_nic::mdio, mdio_init(), memcpy(), memset(), cgem_nic::mii, mii_init(), device::name, cgem_nic::name, netdev, cgem_nic::netdev, netdev_init(), netdev_nullify(), netdev_put(), offset, net_device::priv, rc, readl(), net_device::refcnt, register_netdev(), cgem_nic::regs, cgem_nic::rx, strerror(), sysfdt, cgem_nic::timer, cgem_nic::tx, and unregister_netdev().
|
static |
Remove devicetree device.
| dt | Devicetree device |
Definition at line 683 of file cgem.c.
References cgem_reset(), dt_get_drvdata(), iounmap(), netdev, netdev_nullify(), netdev_put(), net_device::priv, cgem_nic::regs, and unregister_netdev().
|
static |
MII operations.
Definition at line 189 of file cgem.c.
Referenced by cgem_probe().
|
static |
Cadence GEM network device operations.
Definition at line 581 of file cgem.c.
Referenced by cgem_probe().
|
static |
| struct dt_driver cgem_driver __dt_driver |
Cadence GEM devicetree driver.
1.8.15