iPXE
|
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ipxe/io.h>
#include <errno.h>
#include <unistd.h>
#include <byteswap.h>
#include <ipxe/pci.h>
#include <ipxe/if_ether.h>
#include <ipxe/ethernet.h>
#include <ipxe/iobuf.h>
#include <ipxe/netdevice.h>
#include <ipxe/malloc.h>
#include <mii.h>
#include "jme.h"
Go to the source code of this file.
Functions | |
FILE_LICENCE (GPL2_OR_LATER) | |
static int | jme_mdio_read (struct net_device *netdev, int phy, int reg) |
static void | jme_mdio_write (struct net_device *netdev, int phy, int reg, int val) |
static void | jme_reset_phy_processor (struct jme_adapter *jme) |
static void | jme_phy_init (struct jme_adapter *jme) |
static void | jme_set_phyfifoa (struct jme_adapter *jme) |
static void | jme_set_phyfifob (struct jme_adapter *jme) |
static void | jme_phy_off (struct jme_adapter *jme) |
static void | jme_restart_an (struct jme_adapter *jme) |
static void | jme_reset_ghc_speed (struct jme_adapter *jme) |
static void | jme_start_irq (struct jme_adapter *jme) |
static void | jme_stop_irq (struct jme_adapter *jme) |
static void | jme_setup_wakeup_frame (struct jme_adapter *jme, u32 *mask, u32 crc, int fnr) |
static void | jme_reset_mac_processor (struct jme_adapter *jme) |
static void | jme_free_tx_buffers (struct jme_adapter *jme) |
static void | jme_free_tx_resources (struct jme_adapter *jme) |
static int | jme_alloc_tx_resources (struct jme_adapter *jme) |
static void | jme_init_tx_ring (struct jme_adapter *jme) |
static void | jme_enable_tx_engine (struct jme_adapter *jme) |
static void | jme_disable_tx_engine (struct jme_adapter *jme) |
static void | jme_set_clean_rxdesc (struct jme_adapter *jme, int i) |
static int | jme_make_new_rx_buf (struct io_buffer **rxbip) |
static void | jme_free_rx_buf (struct jme_adapter *jme, int i) |
static void | jme_free_rx_resources (struct jme_adapter *jme) |
static int | jme_alloc_rx_resources (struct jme_adapter *jme) |
static void | jme_init_rx_ring (struct jme_adapter *jme) |
static void | jme_set_multi (struct jme_adapter *jme) |
static void | jme_enable_rx_engine (struct jme_adapter *jme) |
static void | jme_restart_rx_engine (struct jme_adapter *jme) |
static void | jme_disable_rx_engine (struct jme_adapter *jme) |
static void | jme_refill_rx_ring (struct jme_adapter *jme, int curhole) |
static void | jme_alloc_and_feed_iob (struct jme_adapter *jme, int idx) |
static void | jme_process_receive (struct jme_adapter *jme) |
static void | jme_set_custom_macaddr (struct net_device *netdev) |
static int | jme_open (struct net_device *netdev) |
Open NIC. More... | |
static void | jme_close (struct net_device *netdev) |
Close NIC. More... | |
static int | jme_alloc_txdesc (struct jme_adapter *jme) |
static void | jme_fill_tx_desc (struct jme_adapter *jme, struct io_buffer *iob, int idx) |
static int | jme_transmit (struct net_device *netdev, struct io_buffer *iobuf) |
Transmit packet. More... | |
static int | jme_check_link (struct net_device *netdev, int testonly) |
static void | jme_link_change (struct net_device *netdev) |
static void | jme_tx_clean (struct jme_adapter *jme) |
static void | jme_poll (struct net_device *netdev) |
Poll for received packets. More... | |
static void | jme_irq (struct net_device *netdev, int enable) |
Enable/disable interrupts. More... | |
static void | jme_check_hw_ver (struct jme_adapter *jme) |
static int | jme_reload_eeprom (struct jme_adapter *jme) |
static void | jme_load_macaddr (struct net_device *netdev) |
static int | jme_probe (struct pci_device *pci) |
Probe PCI device. More... | |
static void | jme_remove (struct pci_device *pci) |
Remove PCI device. More... | |
Variables | |
static struct net_device_operations | jme_operations |
JME net device operations. More... | |
static struct pci_device_id | jm_nics [] |
struct pci_driver jme_driver | __pci_driver |
FILE_LICENCE | ( | GPL2_OR_LATER | ) |
|
static |
Definition at line 41 of file jme.c.
References DBG, JME_PHY_TIMEOUT, JME_SMI, jread32(), jwrite32(), MII_BMSR, netdev, net_device::priv, reg, SMI_DATA_MASK, SMI_DATA_SHIFT, SMI_OP_REQ, smi_phy_addr(), smi_reg_addr(), udelay(), and val.
Referenced by jme_phy_init(), jme_probe(), jme_reset_phy_processor(), and jme_restart_an().
|
static |
Definition at line 70 of file jme.c.
References DBG, JME_PHY_TIMEOUT, JME_SMI, jread32(), jwrite32(), netdev, net_device::priv, reg, SMI_DATA_MASK, SMI_DATA_SHIFT, SMI_OP_REQ, SMI_OP_WRITE, smi_phy_addr(), smi_reg_addr(), udelay(), val, and wmb().
Referenced by jme_phy_init(), jme_phy_off(), jme_probe(), jme_reset_phy_processor(), jme_restart_an(), jme_set_phyfifoa(), and jme_set_phyfifob().
|
static |
Definition at line 94 of file jme.c.
References ADVERTISE_1000FULL, ADVERTISE_1000HALF, ADVERTISE_ALL, ADVERTISE_PAUSE_ASYM, ADVERTISE_PAUSE_CAP, BMCR_RESET, mii_if_info::dev, pci_device::device, jme_mdio_read(), jme_mdio_write(), MII_ADVERTISE, MII_BMCR, MII_CTRL1000, jme_adapter::mii_if, PCI_DEVICE_ID_JMICRON_JMC250, jme_adapter::pdev, mii_if_info::phy_id, and val.
Referenced by jme_open().
|
static |
Definition at line 121 of file jme.c.
References mii_if_info::dev, jme_mdio_read(), jme_mdio_write(), jme_adapter::mii_if, and mii_if_info::phy_id.
Referenced by jme_probe().
|
static |
Definition at line 130 of file jme.c.
References mii_if_info::dev, jme_mdio_write(), jme_adapter::mii_if, and mii_if_info::phy_id.
Referenced by jme_check_link(), and jme_probe().
|
static |
Definition at line 136 of file jme.c.
References mii_if_info::dev, jme_mdio_write(), jme_adapter::mii_if, and mii_if_info::phy_id.
Referenced by jme_check_link().
|
static |
Definition at line 142 of file jme.c.
References BMCR_PDOWN, mii_if_info::dev, jme_mdio_write(), MII_BMCR, jme_adapter::mii_if, and mii_if_info::phy_id.
Referenced by jme_close(), and jme_probe().
|
static |
Definition at line 148 of file jme.c.
References BMCR_ANENABLE, BMCR_ANRESTART, mii_if_info::dev, jme_mdio_read(), jme_mdio_write(), MII_BMCR, jme_adapter::mii_if, and mii_if_info::phy_id.
Referenced by jme_open().
|
static |
Definition at line 158 of file jme.c.
References GHC_DPX, GHC_SPEED_1000M, JME_GHC, jwrite32(), and jme_adapter::reg_ghc.
Referenced by jme_link_change().
|
static |
Definition at line 165 of file jme.c.
References INTR_ENABLE, JME_IENS, and jwrite32().
Referenced by jme_irq().
|
static |
Definition at line 174 of file jme.c.
References INTR_ENABLE, JME_IENC, and jwrite32f().
Referenced by jme_irq().
|
static |
Definition at line 183 of file jme.c.
References JME_WFODP, JME_WFOI, jwrite32(), WAKEUP_FRAME_MASK_DWNR, WFOI_CRC_SEL, WFOI_FRAME_SEL, WFOI_MASK_SEL, WFOI_MASK_SHIFT, and wmb().
Referenced by jme_reset_mac_processor().
|
static |
Definition at line 210 of file jme.c.
References GHC_SWRST, GPREG0_DEFAULT, GPREG1_DEFAULT, JME_GHC, JME_GPREG0, JME_GPREG1, JME_RXDBA_HI, JME_RXDBA_LO, JME_RXMCHT_HI, JME_RXMCHT_LO, JME_RXNDA, JME_RXQDC, jme_setup_wakeup_frame(), JME_TXDBA_HI, JME_TXDBA_LO, JME_TXNDA, JME_TXQDC, jwrite32(), jme_adapter::reg_ghc, udelay(), WAKEUP_FRAME_MASK_DWNR, and WAKEUP_FRAME_NR.
Referenced by jme_close(), jme_link_change(), and jme_probe().
|
static |
Definition at line 238 of file jme.c.
References jme_ring::bufinf, mii_if_info::dev, ENOLINK, jme_adapter::mii_if, netdev_tx_complete_err(), NULL, jme_adapter::tx_ring_size, and jme_adapter::txring.
Referenced by jme_init_tx_ring().
|
static |
Definition at line 255 of file jme.c.
References jme_ring::bufinf, jme_ring::desc, jme_ring::dma, free, free_phys(), memset(), jme_ring::next_to_clean, jme_ring::next_to_use, jme_ring::nr_free, NULL, TX_DESC_SIZE, jme_adapter::tx_ring_size, and jme_adapter::txring.
Referenced by jme_alloc_tx_resources(), and jme_close().
|
static |
Definition at line 276 of file jme.c.
References jme_ring::bufinf, DBG, jme_ring::desc, jme_ring::dma, ENOMEM, jme_free_tx_resources(), malloc(), malloc_phys(), memset(), RING_DESC_ALIGN, TX_DESC_SIZE, jme_adapter::tx_ring_size, jme_adapter::txring, and virt_to_bus().
Referenced by jme_open().
|
static |
Definition at line 312 of file jme.c.
References jme_ring::desc, jme_free_tx_buffers(), memset(), jme_ring::next_to_clean, jme_ring::next_to_use, jme_ring::nr_free, TX_DESC_SIZE, jme_adapter::tx_ring_size, and jme_adapter::txring.
Referenced by jme_link_change().
|
static |
Definition at line 328 of file jme.c.
References jme_ring::dma, JME_TXCS, JME_TXDBA_HI, JME_TXDBA_LO, JME_TXNDA, JME_TXQDC, jwrite32(), jme_adapter::reg_txcs, jme_adapter::tx_ring_size, TXCS_DEFAULT, TXCS_ENABLE, TXCS_SELECT_QUEUE0, jme_adapter::txring, and wmb().
Referenced by jme_link_change().
|
static |
Definition at line 359 of file jme.c.
References DBG, JME_TX_DISABLE_TIMEOUT, JME_TXCS, jread32(), jwrite32(), mdelay(), jme_adapter::reg_txcs, rmb, TXCS_ENABLE, TXCS_SELECT_QUEUE0, val, and wmb().
Referenced by jme_link_change().
|
static |
Definition at line 383 of file jme.c.
References jme_ring::bufinf, cpu_to_le16, cpu_to_le32, io_buffer::data, jme_ring::desc, rxdesc::desc1, rxdesc::dw, RX_ALLOC_LEN, RXFLAG_INT, RXFLAG_OWN, jme_adapter::rxring, virt_to_bus(), and wmb().
Referenced by jme_init_rx_ring(), jme_process_receive(), and jme_refill_rx_ring().
|
static |
Definition at line 403 of file jme.c.
References alloc_iob(), DBG, ENOMEM, and RX_ALLOC_LEN.
Referenced by jme_alloc_rx_resources(), and jme_refill_rx_ring().
|
static |
Definition at line 421 of file jme.c.
References jme_ring::bufinf, free_iob(), NULL, and jme_adapter::rxring.
Referenced by jme_free_rx_resources().
|
static |
Definition at line 433 of file jme.c.
References jme_ring::bufinf, jme_ring::desc, jme_ring::dma, free, free_phys(), jme_free_rx_buf(), jme_ring::next_to_clean, jme_ring::next_to_fill, NULL, RX_DESC_SIZE, jme_adapter::rx_ring_size, and jme_adapter::rxring.
Referenced by jme_alloc_rx_resources(), jme_close(), and jme_open().
|
static |
Definition at line 455 of file jme.c.
References jme_ring::bufinf, DBG, jme_ring::desc, jme_ring::dma, ENOMEM, jme_free_rx_resources(), jme_make_new_rx_buf(), malloc(), malloc_phys(), memset(), RING_DESC_ALIGN, RX_DESC_SIZE, jme_adapter::rx_ring_size, jme_adapter::rxring, and virt_to_bus().
Referenced by jme_open().
|
static |
Definition at line 498 of file jme.c.
References jme_set_clean_rxdesc(), jme_ring::next_to_clean, jme_ring::next_to_fill, jme_adapter::rx_ring_size, and jme_adapter::rxring.
Referenced by jme_link_change().
|
static |
Definition at line 511 of file jme.c.
References JME_RXMCS, jwrite32(), jme_adapter::reg_rxmcs, RXMCS_ALLFRAME, RXMCS_BRDFRAME, and RXMCS_UNIFRAME.
Referenced by jme_enable_rx_engine().
|
static |
Definition at line 521 of file jme.c.
References jme_ring::dma, JME_RXCS, JME_RXDBA_HI, JME_RXDBA_LO, JME_RXNDA, JME_RXQDC, jme_set_multi(), jwrite32(), jme_adapter::reg_rxcs, jme_adapter::rx_ring_size, RXCS_ENABLE, RXCS_QST, RXCS_QUEUESEL_Q0, jme_adapter::rxring, and wmb().
Referenced by jme_link_change().
|
static |
Definition at line 558 of file jme.c.
References JME_RXCS, jwrite32(), jme_adapter::reg_rxcs, RXCS_ENABLE, RXCS_QST, and RXCS_QUEUESEL_Q0.
Referenced by jme_poll().
|
static |
Definition at line 570 of file jme.c.
References DBG, JME_RX_DISABLE_TIMEOUT, JME_RXCS, jread32(), jwrite32(), mdelay(), jme_adapter::reg_rxcs, rmb, RXCS_ENABLE, val, and wmb().
Referenced by jme_link_change().
|
static |
Definition at line 594 of file jme.c.
References jme_ring::bufinf, jme_make_new_rx_buf(), jme_set_clean_rxdesc(), limit, jme_ring::next_to_fill, jme_adapter::rx_ring_mask, jme_adapter::rx_ring_size, and jme_adapter::rxring.
Referenced by jme_alloc_and_feed_iob().
|
static |
Definition at line 616 of file jme.c.
References jme_ring::bufinf, jme_ring::desc, rxdesc::descwb, mii_if_info::dev, iob_put, jme_refill_rx_ring(), le16_to_cpu, jme_adapter::mii_if, netdev, netdev_rx(), NULL, and jme_adapter::rxring.
Referenced by jme_process_receive().
|
static |
Definition at line 635 of file jme.c.
References jme_ring::bufinf, cpu_to_le16, DBG, DBG2, jme_ring::desc, rxdesc::descwb, mii_if_info::dev, EINVAL, jme_alloc_and_feed_iob(), jme_set_clean_rxdesc(), limit, jme_adapter::mii_if, netdev, netdev_rx_err(), jme_ring::next_to_clean, NULL, rmb, jme_adapter::rx_ring_mask, jme_adapter::rx_ring_size, jme_adapter::rxring, RXWBDCNT_DCNT, RXWBDCNT_WBCPL, RXWBERR_ALLERR, and RXWBFLAG_OWN.
Referenced by jme_poll().
|
static |
Definition at line 679 of file jme.c.
References addr, JME_RXUMA_HI, JME_RXUMA_LO, jwrite32(), net_device::ll_addr, netdev, net_device::priv, and val.
Referenced by jme_open().
|
static |
Open NIC.
netdev | Net device |
rc | Return status code |
Definition at line 702 of file jme.c.
References DBG, jme_alloc_rx_resources(), jme_alloc_tx_resources(), jme_free_rx_resources(), jme_reset_phy_processor(), jme_restart_an(), jme_set_custom_macaddr(), netdev, net_device::priv, and rc.
|
static |
Close NIC.
netdev | Net device |
Definition at line 743 of file jme.c.
References jme_free_rx_resources(), jme_free_tx_resources(), jme_phy_off(), jme_reset_mac_processor(), netdev, netdev_link_down(), jme_adapter::phylink, and net_device::priv.
|
static |
Definition at line 756 of file jme.c.
References jme_ring::next_to_use, jme_ring::nr_free, jme_adapter::tx_ring_mask, and jme_adapter::txring.
Referenced by jme_transmit().
|
static |
Definition at line 771 of file jme.c.
References jme_ring::bufinf, cpu_to_le16, cpu_to_le32, io_buffer::data, DBG2, jme_ring::desc, txdesc::desc1, txdesc::dw, iob_len(), len, TXFLAG_INT, TXFLAG_OWN, jme_adapter::txring, virt_to_bus(), and wmb().
Referenced by jme_transmit().
|
static |
Transmit packet.
netdev | Network device |
iobuf | I/O buffer |
rc | Return status code |
Definition at line 814 of file jme.c.
References DBG, DBG2, EOVERFLOW, jme_alloc_txdesc(), jme_fill_tx_desc(), JME_TXCS, jwrite32(), netdev, net_device::priv, jme_adapter::reg_txcs, TXCS_ENABLE, TXCS_QUEUE0S, and TXCS_SELECT_QUEUE0.
|
static |
Definition at line 840 of file jme.c.
References jme_adapter::chiprev, DBG, pci_device::device, GHC_DPX, GHC_SPEED, GHC_SPEED_1000M, GHC_SPEED_100M, GHC_SPEED_10M, GHC_TO_CLK_GPHY, GHC_TO_CLK_PCIE, GHC_TXMAC_CLK_GPHY, GHC_TXMAC_CLK_PCIE, GPREG1_DEFAULT, GPREG1_HALFMODEPATCH, GPREG1_RSSPATCH, is_buggy250(), JME_GHC, JME_GPREG1, JME_PHY_LINK, jme_set_phyfifoa(), jme_set_phyfifob(), JME_SPDRSV_TIMEOUT, JME_TXMCS, JME_TXTRHD, jread32(), jwrite32(), netdev, netdev_link_down(), netdev_link_up(), out, jme_adapter::pdev, PHY_LINK_DUPLEX, PHY_LINK_MDI_STAT, PHY_LINK_SPEED_1000M, PHY_LINK_SPEED_100M, PHY_LINK_SPEED_10M, PHY_LINK_SPEED_MASK, PHY_LINK_SPEEDDPU_RESOLVED, PHY_LINK_UP, jme_adapter::phylink, net_device::priv, rc, jme_adapter::reg_ghc, TXMCS_BACKOFF, TXMCS_CARRIERSENSE, TXMCS_COLLISION, TXMCS_DEFAULT, TXTRHD_TXP, TXTRHD_TXP_SHIFT, TXTRHD_TXPEN, TXTRHD_TXREN, TXTRHD_TXRL, TXTRHD_TXRL_SHIFT, and udelay().
Referenced by jme_link_change().
|
static |
Definition at line 951 of file jme.c.
References jme_check_link(), jme_disable_rx_engine(), jme_disable_tx_engine(), jme_enable_rx_engine(), jme_enable_tx_engine(), jme_init_rx_ring(), jme_init_tx_ring(), jme_reset_ghc_speed(), jme_reset_mac_processor(), netdev, netdev_link_down(), netdev_link_ok(), and net_device::priv.
Referenced by jme_poll().
|
static |
Definition at line 981 of file jme.c.
References jme_ring::bufinf, io_buffer::data, DBG2, jme_ring::desc, txdesc::descwb, mii_if_info::dev, EIO, txdesc::flags, iob_len(), max, jme_adapter::mii_if, netdev, netdev_tx_complete(), netdev_tx_complete_err(), jme_ring::next_to_clean, jme_ring::nr_free, NULL, jme_adapter::tx_ring_mask, jme_adapter::tx_ring_size, jme_adapter::txring, TXWBFLAG_ALLERR, TXWBFLAG_OWN, and virt_to_bus().
Referenced by jme_poll().
|
static |
Poll for received packets.
netdev | Network device |
Definition at line 1024 of file jme.c.
References DBG2, INTR_ENABLE, INTR_LINKCH, INTR_RX0, INTR_RX0EMP, INTR_SWINTR, INTR_TX0, JME_IEVE, jme_link_change(), jme_process_receive(), jme_restart_rx_engine(), jme_tx_clean(), jread32(), jwrite32(), netdev, net_device::priv, and typeof().
|
static |
Enable/disable interrupts.
netdev | Network device |
enable | Interrupts should be enabled |
Definition at line 1092 of file jme.c.
References DBG, jme_start_irq(), jme_stop_irq(), netdev, and net_device::priv.
|
static |
Definition at line 1113 of file jme.c.
References jme_adapter::chiprev, CM_CHIPREV_MASK, CM_CHIPREV_SHIFT, CM_FPGAVER_MASK, CM_FPGAVER_SHIFT, jme_adapter::fpgaver, JME_CHIPMODE, and jread32().
Referenced by jme_probe().
|
static |
Definition at line 1124 of file jme.c.
References DBG, EIO, JME_EEPROM_RELOAD_TIMEOUT, JME_SMBCSR, jread32(), jwrite32(), mdelay(), SMBCSR_CNACK, SMBCSR_EEPROMD, SMBCSR_RELOAD, and val.
Referenced by jme_probe().
|
static |
Definition at line 1154 of file jme.c.
References net_device::hw_addr, JME_RXUMA_HI, JME_RXUMA_LO, jread32(), memcpy(), netdev, net_device::priv, and val.
Referenced by jme_probe().
|
static |
Probe PCI device.
pci | PCI device |
id | PCI ID |
rc | Return status code |
Definition at line 1179 of file jme.c.
References adjust_pci_device(), alloc_etherdev(), DBG, mii_if_info::dev, pci_device::dev, net_device::dev, pci_device::device, ENOMEM, iounmap(), jme_check_hw_ver(), jme_load_macaddr(), jme_mdio_read(), jme_mdio_write(), jme_operations, jme_phy_init(), jme_phy_off(), JME_REGS_SIZE, jme_reload_eeprom(), jme_reset_mac_processor(), jme_set_phyfifoa(), mii_if_info::mdio_read, mii_if_info::mdio_write, pci_device::membase, jme_adapter::mii_if, MRRS_128B, MRRS_256B, netdev, netdev_init(), netdev_nullify(), netdev_put(), PCI_DCSR_MRRS, PCI_DCSR_MRRS_MASK, PCI_DEVICE_ID_JMICRON_JMC250, pci_ioremap(), pci_read_config_byte(), pci_set_drvdata(), jme_adapter::pdev, mii_if_info::phy_id, jme_adapter::phylink, net_device::priv, rc, jme_adapter::reg_ghc, jme_adapter::reg_rxcs, jme_adapter::reg_rxmcs, jme_adapter::reg_txcs, register_netdev(), jme_adapter::regs, jme_adapter::rx_ring_mask, jme_adapter::rx_ring_size, RXCS_DEFAULT, RXMCS_DEFAULT, mii_if_info::supports_gmii, jme_adapter::tx_ring_mask, jme_adapter::tx_ring_size, TXCS_DEFAULT, TXCS_DMASIZE_128B, TXCS_DMASIZE_256B, and TXCS_DMASIZE_512B.
|
static |
Remove PCI device.
pci | PCI device |
Definition at line 1287 of file jme.c.
References iounmap(), netdev, netdev_nullify(), netdev_put(), pci_get_drvdata(), net_device::priv, jme_adapter::regs, and unregister_netdev().
|
static |
JME net device operations.
Definition at line 1104 of file jme.c.
Referenced by jme_probe().
|
static |
struct pci_driver jme_driver __pci_driver |