1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Applied Micro X-Gene SoC Ethernet v2 Driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2017, Applied Micro Circuits Corporation 6*4882a593Smuzhiyun * Author(s): Iyappan Subramanian <isubramanian@apm.com> 7*4882a593Smuzhiyun * Keyur Chudgar <kchudgar@apm.com> 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef __XGENE_ENET_V2_MAIN_H__ 11*4882a593Smuzhiyun #define __XGENE_ENET_V2_MAIN_H__ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include <linux/acpi.h> 14*4882a593Smuzhiyun #include <linux/clk.h> 15*4882a593Smuzhiyun #include <linux/efi.h> 16*4882a593Smuzhiyun #include <linux/if_vlan.h> 17*4882a593Smuzhiyun #include <linux/irq.h> 18*4882a593Smuzhiyun #include <linux/io.h> 19*4882a593Smuzhiyun #include <linux/module.h> 20*4882a593Smuzhiyun #include <linux/of_platform.h> 21*4882a593Smuzhiyun #include <linux/of_net.h> 22*4882a593Smuzhiyun #include <linux/of_mdio.h> 23*4882a593Smuzhiyun #include <linux/prefetch.h> 24*4882a593Smuzhiyun #include <linux/phy.h> 25*4882a593Smuzhiyun #include <net/ip.h> 26*4882a593Smuzhiyun #include "mac.h" 27*4882a593Smuzhiyun #include "enet.h" 28*4882a593Smuzhiyun #include "ring.h" 29*4882a593Smuzhiyun #include "ethtool.h" 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define XGENE_ENET_STD_MTU 1536 32*4882a593Smuzhiyun #define XGENE_ENET_MIN_FRAME 60 33*4882a593Smuzhiyun #define IRQ_ID_SIZE 16 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun struct xge_resource { 36*4882a593Smuzhiyun void __iomem *base_addr; 37*4882a593Smuzhiyun int phy_mode; 38*4882a593Smuzhiyun u32 irq; 39*4882a593Smuzhiyun }; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun struct xge_stats { 42*4882a593Smuzhiyun u64 tx_packets; 43*4882a593Smuzhiyun u64 tx_bytes; 44*4882a593Smuzhiyun u64 rx_packets; 45*4882a593Smuzhiyun u64 rx_bytes; 46*4882a593Smuzhiyun u64 rx_errors; 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* ethernet private data */ 50*4882a593Smuzhiyun struct xge_pdata { 51*4882a593Smuzhiyun struct xge_resource resources; 52*4882a593Smuzhiyun struct xge_desc_ring *tx_ring; 53*4882a593Smuzhiyun struct xge_desc_ring *rx_ring; 54*4882a593Smuzhiyun struct platform_device *pdev; 55*4882a593Smuzhiyun char irq_name[IRQ_ID_SIZE]; 56*4882a593Smuzhiyun struct mii_bus *mdio_bus; 57*4882a593Smuzhiyun struct net_device *ndev; 58*4882a593Smuzhiyun struct napi_struct napi; 59*4882a593Smuzhiyun struct xge_stats stats; 60*4882a593Smuzhiyun int phy_speed; 61*4882a593Smuzhiyun u8 nbufs; 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun int xge_mdio_config(struct net_device *ndev); 65*4882a593Smuzhiyun void xge_mdio_remove(struct net_device *ndev); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #endif /* __XGENE_ENET_V2_MAIN_H__ */ 68