iPXE
|
#include <mii.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <byteswap.h>
#include <ipxe/pci.h>
#include <ipxe/iobuf.h>
#include <ipxe/timer.h>
#include <ipxe/malloc.h>
#include <ipxe/if_ether.h>
#include <ipxe/ethernet.h>
#include <ipxe/netdevice.h>
#include "tg3.h"
Go to the source code of this file.
Macros | |
#define | TG3_DEF_RX_MODE 0 |
#define | TG3_DEF_TX_MODE 0 |
#define | TG3_TX_RING_BYTES |
#define | TG3_RX_RCB_RING_BYTES(tp) (sizeof(struct tg3_rx_buffer_desc) * (TG3_RX_RET_MAX_SIZE_5705)) |
#define | TG3_RX_STD_RING_BYTES(tp) (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_MAX_SIZE_5700) |
#define | TG3_RX_STD_BUFF_RING_BYTES(tp) (sizeof(struct ring_info) * TG3_RX_STD_MAX_SIZE_5700) |
#define | TG3_RX_STD_RING_BYTES(tp) (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_MAX_SIZE_5700) |
#define | NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) |
#define | TG3_RX_STD_BUFF_RING_BYTES(tp) (sizeof(struct ring_info) * TG3_RX_STD_MAX_SIZE_5700) |
#define | TG3_RX_STD_RING_BYTES(tp) (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_MAX_SIZE_5700) |
#define | TEST_BUFFER_SIZE 0x2000 |
Functions | |
FILE_LICENCE (GPL2_ONLY) | |
static void | tg3_refill_prod_ring (struct tg3 *tp) |
void | tg3_rx_prodring_fini (struct tg3_rx_prodring_set *tpr) |
static void | tg3_free_consistent (struct tg3 *tp) |
int | tg3_alloc_consistent (struct tg3 *tp) |
static int | tg3_rx_prodring_alloc (struct tg3 __unused *tp, struct tg3_rx_prodring_set *tpr) |
static void | tg3_rx_iob_free (struct io_buffer *iobs[], int i) |
static void | tg3_rx_prodring_free (struct tg3_rx_prodring_set *tpr) |
int | tg3_init_rings (struct tg3 *tp) |
static int | tg3_open (struct net_device *dev) |
static u32 | tg3_tx_avail (struct tg3 *tp) |
static int | tg3_transmit (struct net_device *dev, struct io_buffer *iob) |
static void | tg3_tx_complete (struct net_device *dev) |
static int | tg3_alloc_rx_iob (struct tg3_rx_prodring_set *tpr, u32 dest_idx_unmasked) |
static void | tg3_rx_complete (struct net_device *dev) |
static void | tg3_poll (struct net_device *dev) |
static void | tg3_close (struct net_device *dev) |
static void | tg3_irq (struct net_device *dev, int enable) |
int | tg3_do_test_dma (struct tg3 *tp, u32 __unused *buf, dma_addr_t buf_dma, int size, int to_device) |
void | tg3_read_mem (struct tg3 *tp, u32 off, u32 *val) |
static int | tg3_test_dma (struct tg3 *tp) |
static int | tg3_init_one (struct pci_device *pdev) |
static void | tg3_remove_one (struct pci_device *pci) |
Variables | |
static struct net_device_operations | tg3_netdev_ops |
static struct pci_device_id | tg3_nics [] |
struct pci_driver tg3_pci_driver | __pci_driver |
#define TG3_TX_RING_BYTES |
#define TG3_RX_RCB_RING_BYTES | ( | tp | ) | (sizeof(struct tg3_rx_buffer_desc) * (TG3_RX_RET_MAX_SIZE_5705)) |
#define TG3_RX_STD_RING_BYTES | ( | tp | ) | (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_MAX_SIZE_5700) |
#define TG3_RX_STD_BUFF_RING_BYTES | ( | tp | ) | (sizeof(struct ring_info) * TG3_RX_STD_MAX_SIZE_5700) |
#define TG3_RX_STD_RING_BYTES | ( | tp | ) | (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_MAX_SIZE_5700) |
#define NEXT_TX | ( | N | ) | (((N) + 1) & (TG3_TX_RING_SIZE - 1)) |
#define TG3_RX_STD_BUFF_RING_BYTES | ( | tp | ) | (sizeof(struct ring_info) * TG3_RX_STD_MAX_SIZE_5700) |
#define TG3_RX_STD_RING_BYTES | ( | tp | ) | (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_MAX_SIZE_5700) |
FILE_LICENCE | ( | GPL2_ONLY | ) |
|
static |
Definition at line 400 of file tg3.c.
References DBGC, DBGC2, DBGCP, DBGP, NULL, tg3_rx_prodring_set::rx_iobufs, tg3_rx_prodring_set::rx_std_iob_cnt, tg3_rx_prodring_set::rx_std_prod_idx, tg3_alloc_rx_iob(), TG3_DEF_RX_RING_PENDING, TG3_RX_STD_MAX_SIZE_5700, TG3_RX_STD_PROD_IDX_REG, tp, and tw32_rx_mbox.
Referenced by tg3_open(), and tg3_rx_complete().
void tg3_rx_prodring_fini | ( | struct tg3_rx_prodring_set * | tpr | ) |
Definition at line 41 of file tg3.c.
References DBGP, free_phys(), NULL, tg3_rx_prodring_set::rx_std, TG3_RX_STD_RING_BYTES, and tp.
Referenced by tg3_free_consistent().
|
static |
Definition at line 54 of file tg3.c.
References DBGP, free, free_phys(), NULL, TG3_HW_STATUS_SIZE, tg3_rx_prodring_fini(), TG3_RX_RCB_RING_BYTES, TG3_TX_RING_BYTES, and tp.
Referenced by tg3_alloc_consistent(), and tg3_close().
int tg3_alloc_consistent | ( | struct tg3 * | tp | ) |
Definition at line 84 of file tg3.c.
References DBGC, DBGP, ENOMEM, tg3_hw_status::idx, malloc_phys(), memset(), tg3_hw_status::rx_producer, tg3_rx_prodring_set::rx_std, tg3_rx_prodring_set::rx_std_mapping, TG3_DMA_ALIGNMENT, tg3_free_consistent(), TG3_HW_STATUS_SIZE, TG3_RX_RCB_RING_BYTES, TG3_RX_STD_RING_BYTES, TG3_TX_RING_BYTES, TG3_TX_RING_SIZE, tp, virt_to_bus(), and zalloc().
Referenced by tg3_open().
|
static |
Definition at line 151 of file tg3.c.
References DBGP, tg3_rx_prodring_set::rx_std, tg3_rx_prodring_set::rx_std_cons_idx, tg3_rx_prodring_set::rx_std_prod_idx, rxd, RXD_FLAG_END, RXD_FLAGS_SHIFT, RXD_LEN_SHIFT, RXD_OPAQUE_INDEX_SHIFT, RXD_OPAQUE_RING_STD, TG3_RX_STD_DMA_SZ, and TG3_RX_STD_MAX_SIZE_5700.
Referenced by tg3_init_rings().
|
static |
Definition at line 178 of file tg3.c.
References DBGP, free_iob(), and NULL.
Referenced by tg3_rx_prodring_free().
|
static |
Definition at line 188 of file tg3.c.
References DBGP, tg3_rx_prodring_set::rx_iobufs, TG3_DEF_RX_RING_PENDING, and tg3_rx_iob_free().
Referenced by tg3_close(), and tg3_init_rings().
int tg3_init_rings | ( | struct tg3 * | tp | ) |
tg3_free_rings(tp);
Definition at line 203 of file tg3.c.
References DBGC, DBGP, ENOMEM, memset(), TG3_HW_STATUS_SIZE, tg3_rx_prodring_alloc(), tg3_rx_prodring_free(), TG3_RX_RCB_RING_BYTES, TG3_TX_RING_BYTES, and tp.
Referenced by tg3_reset_hw().
|
static |
Definition at line 233 of file tg3.c.
References __tg3_set_mac_addr(), DBGC, DBGP, tg3::dev, net_device::priv, tg3_rx_prodring_set::rx_std_iob_cnt, strerror(), tg3_alloc_consistent(), tg3_init_hw(), tg3_refill_prod_ring(), tg3_set_power_state_0(), and tp.
Definition at line 260 of file tg3.c.
References barrier, DBGP, TG3_DEF_TX_RING_PENDING, TG3_TX_RING_SIZE, and tp.
Referenced by tg3_transmit().
|
static |
Definition at line 299 of file tg3.c.
References io_buffer::data, DBGC, DBGP, tg3::dev, ENOBUFS, ETH_ZLEN, iob_len(), iob_pad(), len, mb(), NEXT_TX, net_device::priv, tg3_set_txd(), tg3_tx_avail(), tp, tw32_tx_mbox, TXD_FLAG_END, and virt_to_bus().
|
static |
Definition at line 333 of file tg3.c.
References DBGC2, DBGP, tg3::dev, iob_len(), netdev_tx_complete(), NEXT_TX, net_device::priv, and tp.
Referenced by tg3_poll().
|
static |
Definition at line 368 of file tg3.c.
References alloc_iob(), io_buffer::data, DBGP, desc, ENOMEM, NULL, tg3_rx_prodring_set::rx_iobufs, tg3_rx_prodring_set::rx_std, TG3_DEF_RX_RING_PENDING, TG3_RX_STD_DMA_SZ, TG3_RX_STD_MAX_SIZE_5700, and virt_to_bus().
Referenced by tg3_refill_prod_ring().
|
static |
Definition at line 427 of file tg3.c.
References assert(), DBGC, DBGC2, DBGP, desc, tg3::dev, EINVAL, ETH_FCS_LEN, iob_put, len, netdev_rx(), netdev_rx_err(), NULL, net_device::priv, tg3_rx_prodring_set::rx_iobufs, tg3_rx_prodring_set::rx_std_iob_cnt, RXD_ERR_MASK, RXD_ERR_ODD_NIBBLE_RCVD_MII, RXD_LEN_MASK, RXD_LEN_SHIFT, RXD_OPAQUE_INDEX_MASK, TG3_DEF_RX_RING_PENDING, tg3_refill_prod_ring(), TG3_RX_RET_MAX_SIZE_5705, tp, and tw32_rx_mbox.
Referenced by tg3_poll().
|
static |
Definition at line 478 of file tg3.c.
References DBGP, tg3::dev, mb(), net_device::priv, SD_STATUS_UPDATED, tg3_poll_link(), tg3_rx_complete(), tg3_tx_complete(), and tp.
|
static |
Definition at line 496 of file tg3.c.
References DBGP, tg3::dev, net_device::priv, tg3_flag_clear, tg3_free_consistent(), tg3_halt(), tg3_rx_prodring_free(), and tp.
|
static |
Definition at line 511 of file tg3.c.
References DBGP, tg3::dev, net_device::priv, tg3_disable_ints(), tg3_enable_ints(), and tp.
int tg3_do_test_dma | ( | struct tg3 * | tp, |
u32 __unused * | buf, | ||
dma_addr_t | buf_dma, | ||
int | size, | ||
int | to_device | ||
) |
Definition at line 2594 of file tg3_hw.c.
References tg3_internal_buffer_desc::addr_hi, tg3_internal_buffer_desc::addr_lo, BUFMGR_MODE, tg3_internal_buffer_desc::cqid_sqid, DBGP, ENODEV, tg3_internal_buffer_desc::flags, FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, FTQ_RCVBD_COMP_FIFO_ENQDEQ, FTQ_RCVDATA_COMP_FIFO_ENQDEQ, FTQ_RESET, tg3_internal_buffer_desc::len, tg3_internal_buffer_desc::nic_mbuf, NIC_SRAM_DMA_DESC_POOL_BASE, pci_write_config_dword(), RDMAC_MODE, RDMAC_MODE_ENABLE, RDMAC_STATUS, size, TG3PCI_MEM_WIN_BASE_ADDR, TG3PCI_MEM_WIN_DATA, tp, tr32, tw32, tw32_f, udelay(), val, WDMAC_MODE, WDMAC_MODE_ENABLE, and WDMAC_STATUS.
Referenced by tg3_test_dma().
Definition at line 152 of file tg3_hw.c.
References ASIC_REV_5906, DBGP, GET_ASIC_REV, NIC_SRAM_STATS_BLK, NIC_SRAM_TX_BUFFER_DESC, pci_read_config_dword(), pci_write_config_dword(), TG3PCI_MEM_WIN_BASE_ADDR, TG3PCI_MEM_WIN_DATA, tp, and val.
Referenced by tg3_get_device_address(), tg3_get_eeprom_hw_cfg(), tg3_poll_fw(), and tg3_test_dma().
|
static |
Definition at line 537 of file tg3.c.
References ASIC_REV_5700, ASIC_REV_5701, ASIC_REV_5703, ASIC_REV_5704, ASIC_REV_5705, ASIC_REV_5714, ASIC_REV_5750, ASIC_REV_5780, DBGC, DBGC2, DBGP, DMA_RWCTRL_ASSERT_ALL_BE, DMA_RWCTRL_DIS_CACHE_ALIGNMENT, DMA_RWCTRL_ONE_DMA, DMA_RWCTRL_PCI_READ_CMD_SHIFT, DMA_RWCTRL_PCI_WRITE_CMD_SHIFT, DMA_RWCTRL_READ_WATER_SHIFT, DMA_RWCTRL_USE_MEM_READ_MULT, DMA_RWCTRL_WRITE_BNDRY_16, DMA_RWCTRL_WRITE_BNDRY_MASK, DMA_RWCTRL_WRITE_WATER_SHIFT, ENODEV, ENOMEM, free_phys(), GET_ASIC_REV, if(), le32_to_cpu, malloc_phys(), out, TEST_BUFFER_SIZE, TG3_DMA_ALIGNMENT, tg3_do_test_dma(), tg3_flag, tg3_read_mem(), tg3_switch_clocks(), TG3PCI_CLOCK_CTRL, TG3PCI_DMA_RW_CTRL, tp, tr32, tw32, u32, val, and virt_to_bus().
Referenced by tg3_init_one().
|
static |
Definition at line 716 of file tg3.c.
References adjust_pci_device(), alloc_etherdev(), DBGC, DBGP, pci_device::dev, net_device::dev, tg3::dev, ENOENT, ENOMEM, errno, GRC_MODE_BSWAP_DATA, GRC_MODE_BSWAP_NONFRM_DATA, GRC_MODE_WSWAP_DATA, GRC_MODE_WSWAP_NONFRM_DATA, HOSTCC_MODE, HOSTCC_MODE_ENABLE, HOSTCC_MODE_NOW, iounmap(), MAILBOX_INTERRUPT_0, MAILBOX_RCVRET_CON_IDX_0, MAILBOX_SNDHOST_PROD_IDX_0, MEMARB_MODE, MEMARB_MODE_ENABLE, MISC_HOST_CTRL_INDIR_ACCESS, MISC_HOST_CTRL_MASK_PCI_INT, MISC_HOST_CTRL_PCISTATE_RW, MISC_HOST_CTRL_WORD_SWAP, netdev_init(), netdev_put(), NULL, pci_bar_size(), pci_bar_start(), PCI_BASE_ADDRESS_0, pci_ioremap(), pci_read_config_word(), pci_set_drvdata(), PCI_SUBSYSTEM_ID, PCI_SUBSYSTEM_VENDOR_ID, tg3::pdev, net_device::priv, register_netdev(), TG3_64BIT_REG_LOW, TG3_DEF_RX_MODE, TG3_DEF_TX_MODE, tg3_get_device_address(), tg3_get_invariants(), tg3_halt(), tg3_init_bufmgr_config(), tg3_netdev_ops, tg3_setup_phy(), tg3_test_dma(), tp, tr32, tw32, WDMAC_MODE, and WDMAC_MODE_ENABLE.
|
static |
Definition at line 848 of file tg3.c.
References DBGP, netdev, netdev_nullify(), netdev_put(), pci_get_drvdata(), and unregister_netdev().
|
static |
Definition at line 524 of file tg3.c.
Referenced by tg3_init_one().
|
static |
struct pci_driver tg3_pci_driver __pci_driver |