xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/apm/xgene-v2/main.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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