1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * (C) Copyright 2008
4 * Benjamin Warren, biggerbadderben@gmail.com
5 */
6
7/*
8 * netdev.h - definitions an prototypes for network devices
9 */
10
11#ifndef _NETDEV_H_
12#define _NETDEV_H_
13#include <phy_interface.h>
14
15struct udevice;
16
17/*
18 * Board and CPU-specific initialization functions
19 * board_eth_init() has highest priority.  cpu_eth_init() only
20 * gets called if board_eth_init() isn't instantiated or fails.
21 * Return values:
22 *      0: success
23 *     -1: failure
24 */
25
26int board_eth_init(struct bd_info *bis);
27int board_interface_eth_init(struct udevice *dev,
28			     phy_interface_t interface_type);
29int cpu_eth_init(struct bd_info *bis);
30
31/* Driver initialization prototypes */
32int ax88180_initialize(struct bd_info *bis);
33int bcm_sf2_eth_register(struct bd_info *bis, u8 dev_num);
34int bfin_EMAC_initialize(struct bd_info *bis);
35int cs8900_initialize(u8 dev_num, int base_addr);
36int dc21x4x_initialize(struct bd_info *bis);
37int designware_initialize(ulong base_addr, u32 interface);
38int dm9000_initialize(struct bd_info *bis);
39int dnet_eth_initialize(int id, void *regs, unsigned int phy_addr);
40int e1000_initialize(struct bd_info *bis);
41int eepro100_initialize(struct bd_info *bis);
42int ep93xx_eth_initialize(u8 dev_num, int base_addr);
43int eth_3com_initialize (struct bd_info * bis);
44int ethoc_initialize(u8 dev_num, int base_addr);
45int fecmxc_initialize(struct bd_info *bis);
46int fecmxc_initialize_multi(struct bd_info *bis, int dev_id, int phy_id,
47			    uint32_t addr);
48int ftmac100_initialize(struct bd_info *bits);
49int ftmac110_initialize(struct bd_info *bits);
50void gt6426x_eth_initialize(struct bd_info *bis);
51int ks8851_mll_initialize(u8 dev_num, int base_addr);
52int lan91c96_initialize(u8 dev_num, int base_addr);
53int lpc32xx_eth_initialize(struct bd_info *bis);
54int macb_eth_initialize(int id, void *regs, unsigned int phy_addr);
55int mcdmafec_initialize(struct bd_info *bis);
56int mcffec_initialize(struct bd_info *bis);
57int mvgbe_initialize(struct bd_info *bis);
58int mvneta_initialize(struct bd_info *bis, int base_addr, int devnum,
59		      int phy_addr);
60int natsemi_initialize(struct bd_info *bis);
61int ne2k_register(void);
62int npe_initialize(struct bd_info *bis);
63int ns8382x_initialize(struct bd_info *bis);
64int pcnet_initialize(struct bd_info *bis);
65int ppc_4xx_eth_initialize (struct bd_info *bis);
66int rtl8139_initialize(struct bd_info *bis);
67int rtl8169_initialize(struct bd_info *bis);
68int scc_initialize(struct bd_info *bis);
69int sh_eth_initialize(struct bd_info *bis);
70int skge_initialize(struct bd_info *bis);
71int smc91111_initialize(u8 dev_num, phys_addr_t base_addr);
72int smc911x_initialize(u8 dev_num, phys_addr_t base_addr);
73int uli526x_initialize(struct bd_info *bis);
74
75/* Boards with PCI network controllers can call this from their board_eth_init()
76 * function to initialize whatever's on board.
77 * Return value is total # of devices found */
78
79static inline int pci_eth_init(struct bd_info *bis)
80{
81	int num = 0;
82
83#ifdef CONFIG_PCI
84
85#ifdef CONFIG_EEPRO100
86	num += eepro100_initialize(bis);
87#endif
88#ifdef CONFIG_TULIP
89	num += dc21x4x_initialize(bis);
90#endif
91#ifdef CONFIG_E1000
92	num += e1000_initialize(bis);
93#endif
94#ifdef CONFIG_PCNET
95	num += pcnet_initialize(bis);
96#endif
97#ifdef CONFIG_NATSEMI
98	num += natsemi_initialize(bis);
99#endif
100#ifdef CONFIG_NS8382X
101	num += ns8382x_initialize(bis);
102#endif
103#if defined(CONFIG_RTL8139)
104	num += rtl8139_initialize(bis);
105#endif
106#if defined(CONFIG_RTL8169)
107	num += rtl8169_initialize(bis);
108#endif
109#if defined(CONFIG_ULI526X)
110	num += uli526x_initialize(bis);
111#endif
112
113#endif  /* CONFIG_PCI */
114	return num;
115}
116
117struct mii_dev *fec_get_miibus(ulong base_addr, int dev_id);
118
119#ifdef CONFIG_PHYLIB
120struct phy_device;
121int fec_probe(struct bd_info *bd, int dev_id, uint32_t base_addr,
122		struct mii_dev *bus, struct phy_device *phydev);
123#else
124/*
125 * Allow FEC to fine-tune MII configuration on boards which require this.
126 */
127struct eth_device;
128int fecmxc_register_mii_postcall(struct eth_device *dev, int (*cb)(int));
129#endif
130
131#endif /* _NETDEV_H_ */
132