11ccea77eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2384fe7a4SIyappan Subramanian /* 3384fe7a4SIyappan Subramanian * Applied Micro X-Gene SoC Ethernet v2 Driver 4384fe7a4SIyappan Subramanian * 5384fe7a4SIyappan Subramanian * Copyright (c) 2017, Applied Micro Circuits Corporation 6384fe7a4SIyappan Subramanian * Author(s): Iyappan Subramanian <isubramanian@apm.com> 7384fe7a4SIyappan Subramanian * Keyur Chudgar <kchudgar@apm.com> 8384fe7a4SIyappan Subramanian */ 9384fe7a4SIyappan Subramanian 10384fe7a4SIyappan Subramanian #ifndef __XGENE_ENET_V2_MAIN_H__ 11384fe7a4SIyappan Subramanian #define __XGENE_ENET_V2_MAIN_H__ 12384fe7a4SIyappan Subramanian 13384fe7a4SIyappan Subramanian #include <linux/acpi.h> 14384fe7a4SIyappan Subramanian #include <linux/clk.h> 15384fe7a4SIyappan Subramanian #include <linux/efi.h> 16384fe7a4SIyappan Subramanian #include <linux/if_vlan.h> 17384fe7a4SIyappan Subramanian #include <linux/irq.h> 18384fe7a4SIyappan Subramanian #include <linux/io.h> 19384fe7a4SIyappan Subramanian #include <linux/module.h> 20384fe7a4SIyappan Subramanian #include <linux/of_platform.h> 21384fe7a4SIyappan Subramanian #include <linux/of_net.h> 22384fe7a4SIyappan Subramanian #include <linux/of_mdio.h> 23384fe7a4SIyappan Subramanian #include <linux/prefetch.h> 24384fe7a4SIyappan Subramanian #include <linux/phy.h> 25*3d40aed8SRob Herring #include <linux/platform_device.h> 26384fe7a4SIyappan Subramanian #include <net/ip.h> 27384fe7a4SIyappan Subramanian #include "mac.h" 28384fe7a4SIyappan Subramanian #include "enet.h" 29384fe7a4SIyappan Subramanian #include "ring.h" 30e05ddafdSIyappan Subramanian #include "ethtool.h" 31384fe7a4SIyappan Subramanian 32384fe7a4SIyappan Subramanian #define XGENE_ENET_STD_MTU 1536 33384fe7a4SIyappan Subramanian #define XGENE_ENET_MIN_FRAME 60 34384fe7a4SIyappan Subramanian #define IRQ_ID_SIZE 16 35384fe7a4SIyappan Subramanian 36384fe7a4SIyappan Subramanian struct xge_resource { 37384fe7a4SIyappan Subramanian void __iomem *base_addr; 38384fe7a4SIyappan Subramanian int phy_mode; 39384fe7a4SIyappan Subramanian u32 irq; 40384fe7a4SIyappan Subramanian }; 41384fe7a4SIyappan Subramanian 42384fe7a4SIyappan Subramanian struct xge_stats { 43384fe7a4SIyappan Subramanian u64 tx_packets; 44384fe7a4SIyappan Subramanian u64 tx_bytes; 45384fe7a4SIyappan Subramanian u64 rx_packets; 46384fe7a4SIyappan Subramanian u64 rx_bytes; 47b105bcdaSIyappan Subramanian u64 rx_errors; 48384fe7a4SIyappan Subramanian }; 49384fe7a4SIyappan Subramanian 50384fe7a4SIyappan Subramanian /* ethernet private data */ 51384fe7a4SIyappan Subramanian struct xge_pdata { 52384fe7a4SIyappan Subramanian struct xge_resource resources; 53384fe7a4SIyappan Subramanian struct xge_desc_ring *tx_ring; 54384fe7a4SIyappan Subramanian struct xge_desc_ring *rx_ring; 55384fe7a4SIyappan Subramanian struct platform_device *pdev; 56384fe7a4SIyappan Subramanian char irq_name[IRQ_ID_SIZE]; 57ea8ab16aSIyappan Subramanian struct mii_bus *mdio_bus; 58384fe7a4SIyappan Subramanian struct net_device *ndev; 59384fe7a4SIyappan Subramanian struct napi_struct napi; 60384fe7a4SIyappan Subramanian struct xge_stats stats; 61384fe7a4SIyappan Subramanian int phy_speed; 62384fe7a4SIyappan Subramanian u8 nbufs; 63384fe7a4SIyappan Subramanian }; 64384fe7a4SIyappan Subramanian 65ea8ab16aSIyappan Subramanian int xge_mdio_config(struct net_device *ndev); 66ea8ab16aSIyappan Subramanian void xge_mdio_remove(struct net_device *ndev); 67ea8ab16aSIyappan Subramanian 68384fe7a4SIyappan Subramanian #endif /* __XGENE_ENET_V2_MAIN_H__ */ 69