#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/moduleparam.h>
#include <linux/sched.h>
#include <linux/ctype.h>
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/iopoll.h>
#include <linux/in.h>
#include <linux/of.h>
#include <linux/of_net.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/delay.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/errno.h>
#include <linux/platform_device.h>
#include <linux/mii.h>
#include <linux/ethtool.h>
#include <linux/crc32.h>
#include <linux/pgtable.h>
#include <linux/clk.h>
#define DRV_NAME …
#define DRV_VERSION …
#define DRV_RELDATE …
struct eth_regs { … };
#define ETH_INT_FC_EN …
#define ETH_INT_FC_ITS …
#define ETH_INT_FC_RIP …
#define ETH_INT_FC_JAM …
#define ETH_INT_FC_OVR …
#define ETH_INT_FC_UND …
#define ETH_INT_FC_IOC …
#define ETH_FIFI_TT_TTH_BIT …
#define ETH_FIFO_TT_TTH …
#define ETH_ARC_PRO …
#define ETH_ARC_AM …
#define ETH_ARC_AFM …
#define ETH_ARC_AB …
#define ETH_SAL_BYTE_5 …
#define ETH_SAL_BYTE_4 …
#define ETH_SAL_BYTE_3 …
#define ETH_SAL_BYTE_2 …
#define ETH_SAH_BYTE1 …
#define ETH_SAH_BYTE0 …
#define ETH_GPF_PTV …
#define ETH_PFS_PFD …
#define ETH_CFSA0_CFSA4 …
#define ETH_CFSA0_CFSA5 …
#define ETH_CFSA1_CFSA2 …
#define ETH_CFSA1_CFSA3 …
#define ETH_CFSA1_CFSA0 …
#define ETH_CFSA1_CFSA1 …
#define ETH_MAC1_RE …
#define ETH_MAC1_PAF …
#define ETH_MAC1_RFC …
#define ETH_MAC1_TFC …
#define ETH_MAC1_LB …
#define ETH_MAC1_MR …
#define ETH_MAC2_FD …
#define ETH_MAC2_FLC …
#define ETH_MAC2_HFE …
#define ETH_MAC2_DC …
#define ETH_MAC2_CEN …
#define ETH_MAC2_PE …
#define ETH_MAC2_VPE …
#define ETH_MAC2_APE …
#define ETH_MAC2_PPE …
#define ETH_MAC2_LPE …
#define ETH_MAC2_NB …
#define ETH_MAC2_BP …
#define ETH_MAC2_ED …
#define ETH_IPGT …
#define ETH_IPGR_IPGR2 …
#define ETH_IPGR_IPGR1 …
#define ETH_CLRT_MAX_RET …
#define ETH_CLRT_COL_WIN …
#define ETH_MAXF …
#define ETH_TEST_REG …
#define ETH_MCP_DIV …
#define ETH_MII_CFG_RSVD …
#define ETH_MII_CMD_RD …
#define ETH_MII_CMD_SCN …
#define ETH_MII_REG_ADDR …
#define ETH_MII_PHY_ADDR …
#define ETH_MII_WTD_DATA …
#define ETH_MII_RDD_DATA …
#define ETH_MII_IND_BSY …
#define ETH_MII_IND_SCN …
#define ETH_MII_IND_NV …
#define ETH_RX_FD …
#define ETH_RX_LD …
#define ETH_RX_ROK …
#define ETH_RX_FM …
#define ETH_RX_MP …
#define ETH_RX_BP …
#define ETH_RX_VLT …
#define ETH_RX_CF …
#define ETH_RX_OVR …
#define ETH_RX_CRC …
#define ETH_RX_CV …
#define ETH_RX_DB …
#define ETH_RX_LE …
#define ETH_RX_LOR …
#define ETH_RX_CES …
#define ETH_RX_LEN_BIT …
#define ETH_RX_LEN …
#define ETH_TX_FD …
#define ETH_TX_LD …
#define ETH_TX_OEN …
#define ETH_TX_PEN …
#define ETH_TX_CEN …
#define ETH_TX_HEN …
#define ETH_TX_TOK …
#define ETH_TX_MP …
#define ETH_TX_BP …
#define ETH_TX_UND …
#define ETH_TX_OF …
#define ETH_TX_ED …
#define ETH_TX_EC …
#define ETH_TX_LC …
#define ETH_TX_TD …
#define ETH_TX_CRC …
#define ETH_TX_LE …
#define ETH_TX_CC …
struct dma_desc { … };
#define DMA_DESC_COUNT_BIT …
#define DMA_DESC_COUNT_MSK …
#define DMA_DESC_DS_BIT …
#define DMA_DESC_DS_MSK …
#define DMA_DESC_DEV_CMD_BIT …
#define DMA_DESC_DEV_CMD_MSK …
#define DMA_DESC_COF …
#define DMA_DESC_COD …
#define DMA_DESC_IOF …
#define DMA_DESC_IOD …
#define DMA_DESC_TERM …
#define DMA_DESC_DONE …
#define DMA_DESC_FINI …
struct dma_reg { … };
#define DMA_CHAN_RUN_BIT …
#define DMA_CHAN_DONE_BIT …
#define DMA_CHAN_MODE_BIT …
#define DMA_CHAN_MODE_MSK …
#define DMA_CHAN_MODE_AUTO …
#define DMA_CHAN_MODE_BURST …
#define DMA_CHAN_MODE_XFRT …
#define DMA_CHAN_MODE_RSVD …
#define DMA_CHAN_ACT_BIT …
#define DMA_STAT_FINI …
#define DMA_STAT_DONE …
#define DMA_STAT_CHAIN …
#define DMA_STAT_ERR …
#define DMA_STAT_HALT …
#define STATION_ADDRESS_HIGH(dev) …
#define STATION_ADDRESS_LOW(dev) …
#define MII_CLOCK …
#define KORINA_NUM_RDS …
#define KORINA_NUM_TDS …
#define KORINA_RBSIZE …
#define KORINA_RDS_MASK …
#define KORINA_TDS_MASK …
#define RD_RING_SIZE …
#define TD_RING_SIZE …
#define TX_TIMEOUT …
enum chain_status { … };
#define DMA_COUNT(count) …
#define IS_DMA_FINISHED(X) …
#define IS_DMA_DONE(X) …
#define RCVPKT_LENGTH(X) …
struct korina_private { … };
static dma_addr_t korina_tx_dma(struct korina_private *lp, int idx)
{ … }
static dma_addr_t korina_rx_dma(struct korina_private *lp, int idx)
{ … }
static inline void korina_abort_dma(struct net_device *dev,
struct dma_reg *ch)
{ … }
static void korina_abort_tx(struct net_device *dev)
{ … }
static void korina_abort_rx(struct net_device *dev)
{ … }
static netdev_tx_t korina_send_packet(struct sk_buff *skb,
struct net_device *dev)
{ … }
static int korina_mdio_wait(struct korina_private *lp)
{ … }
static int korina_mdio_read(struct net_device *dev, int phy, int reg)
{ … }
static void korina_mdio_write(struct net_device *dev, int phy, int reg, int val)
{ … }
static irqreturn_t korina_rx_dma_interrupt(int irq, void *dev_id)
{ … }
static int korina_rx(struct net_device *dev, int limit)
{ … }
static int korina_poll(struct napi_struct *napi, int budget)
{ … }
static void korina_multicast_list(struct net_device *dev)
{ … }
static void korina_tx(struct net_device *dev)
{ … }
static irqreturn_t
korina_tx_dma_interrupt(int irq, void *dev_id)
{ … }
static void korina_check_media(struct net_device *dev, unsigned int init_media)
{ … }
static void korina_poll_media(struct timer_list *t)
{ … }
static void korina_set_carrier(struct mii_if_info *mii)
{ … }
static int korina_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
{ … }
static void netdev_get_drvinfo(struct net_device *dev,
struct ethtool_drvinfo *info)
{ … }
static int netdev_get_link_ksettings(struct net_device *dev,
struct ethtool_link_ksettings *cmd)
{ … }
static int netdev_set_link_ksettings(struct net_device *dev,
const struct ethtool_link_ksettings *cmd)
{ … }
static u32 netdev_get_link(struct net_device *dev)
{ … }
static const struct ethtool_ops netdev_ethtool_ops = …;
static int korina_alloc_ring(struct net_device *dev)
{ … }
static void korina_free_ring(struct net_device *dev)
{ … }
static int korina_init(struct net_device *dev)
{ … }
static void korina_restart_task(struct work_struct *work)
{ … }
static void korina_tx_timeout(struct net_device *dev, unsigned int txqueue)
{ … }
#ifdef CONFIG_NET_POLL_CONTROLLER
static void korina_poll_controller(struct net_device *dev)
{ … }
#endif
static int korina_open(struct net_device *dev)
{ … }
static int korina_close(struct net_device *dev)
{ … }
static const struct net_device_ops korina_netdev_ops = …;
static int korina_probe(struct platform_device *pdev)
{ … }
static void korina_remove(struct platform_device *pdev)
{ … }
#ifdef CONFIG_OF
static const struct of_device_id korina_match[] = …;
MODULE_DEVICE_TABLE(of, korina_match);
#endif
static struct platform_driver korina_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;