xref: /rk3399_rockchip-uboot/api/api_net.c (revision 11db3abe6609e08e2df4ecc9353d2c0a2b061be2)
1500856ebSRafal Jaworowski /*
2500856ebSRafal Jaworowski  * (C) Copyright 2007 Semihalf
3500856ebSRafal Jaworowski  *
4500856ebSRafal Jaworowski  * Written by: Rafal Jaworowski <raj@semihalf.com>
5500856ebSRafal Jaworowski  *
61a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
7500856ebSRafal Jaworowski  */
8500856ebSRafal Jaworowski 
9500856ebSRafal Jaworowski #include <config.h>
10500856ebSRafal Jaworowski #include <common.h>
11500856ebSRafal Jaworowski #include <net.h>
12500856ebSRafal Jaworowski #include <linux/types.h>
13500856ebSRafal Jaworowski #include <api_public.h>
14500856ebSRafal Jaworowski 
15500856ebSRafal Jaworowski DECLARE_GLOBAL_DATA_PTR;
16500856ebSRafal Jaworowski 
17500856ebSRafal Jaworowski #define DEBUG
18500856ebSRafal Jaworowski #undef DEBUG
19500856ebSRafal Jaworowski 
20500856ebSRafal Jaworowski #ifdef DEBUG
21500856ebSRafal Jaworowski #define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt, ##args); } while (0)
22500856ebSRafal Jaworowski #else
23500856ebSRafal Jaworowski #define debugf(fmt, args...)
24500856ebSRafal Jaworowski #endif
25500856ebSRafal Jaworowski 
26500856ebSRafal Jaworowski #define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
27500856ebSRafal Jaworowski 
28*11db3abeSJeroen Hofstee #ifdef CONFIG_CMD_NET
29500856ebSRafal Jaworowski 
30500856ebSRafal Jaworowski static int dev_valid_net(void *cookie)
31500856ebSRafal Jaworowski {
32500856ebSRafal Jaworowski 	return ((void *)eth_get_dev() == cookie) ? 1 : 0;
33500856ebSRafal Jaworowski }
34500856ebSRafal Jaworowski 
35500856ebSRafal Jaworowski int dev_open_net(void *cookie)
36500856ebSRafal Jaworowski {
37500856ebSRafal Jaworowski 	if (!dev_valid_net(cookie))
38500856ebSRafal Jaworowski 		return API_ENODEV;
39500856ebSRafal Jaworowski 
40500856ebSRafal Jaworowski 	if (eth_init(gd->bd) < 0)
41500856ebSRafal Jaworowski 		return API_EIO;
42500856ebSRafal Jaworowski 
43500856ebSRafal Jaworowski 	return 0;
44500856ebSRafal Jaworowski }
45500856ebSRafal Jaworowski 
46500856ebSRafal Jaworowski int dev_close_net(void *cookie)
47500856ebSRafal Jaworowski {
48500856ebSRafal Jaworowski 	if (!dev_valid_net(cookie))
49500856ebSRafal Jaworowski 		return API_ENODEV;
50500856ebSRafal Jaworowski 
51500856ebSRafal Jaworowski 	eth_halt();
52500856ebSRafal Jaworowski 	return 0;
53500856ebSRafal Jaworowski }
54500856ebSRafal Jaworowski 
55500856ebSRafal Jaworowski /*
56500856ebSRafal Jaworowski  * There can only be one active eth interface at a time - use what is
57500856ebSRafal Jaworowski  * currently set to eth_current
58500856ebSRafal Jaworowski  */
59500856ebSRafal Jaworowski int dev_enum_net(struct device_info *di)
60500856ebSRafal Jaworowski {
61500856ebSRafal Jaworowski 	struct eth_device *eth_current = eth_get_dev();
62500856ebSRafal Jaworowski 
63500856ebSRafal Jaworowski 	di->type = DEV_TYP_NET;
64500856ebSRafal Jaworowski 	di->cookie = (void *)eth_current;
65500856ebSRafal Jaworowski 	if (di->cookie == NULL)
66500856ebSRafal Jaworowski 		return 0;
67500856ebSRafal Jaworowski 
68500856ebSRafal Jaworowski 	memcpy(di->di_net.hwaddr, eth_current->enetaddr, 6);
69500856ebSRafal Jaworowski 
70500856ebSRafal Jaworowski 	debugf("device found, returning cookie 0x%08x\n",
71500856ebSRafal Jaworowski 		(u_int32_t)di->cookie);
72500856ebSRafal Jaworowski 
73500856ebSRafal Jaworowski 	return 1;
74500856ebSRafal Jaworowski }
75500856ebSRafal Jaworowski 
76500856ebSRafal Jaworowski int dev_write_net(void *cookie, void *buf, int len)
77500856ebSRafal Jaworowski {
78500856ebSRafal Jaworowski 	/* XXX verify that cookie points to a valid net device??? */
79500856ebSRafal Jaworowski 
80500856ebSRafal Jaworowski 	return eth_send(buf, len);
81500856ebSRafal Jaworowski }
82500856ebSRafal Jaworowski 
83500856ebSRafal Jaworowski int dev_read_net(void *cookie, void *buf, int len)
84500856ebSRafal Jaworowski {
85500856ebSRafal Jaworowski 	/* XXX verify that cookie points to a valid net device??? */
86500856ebSRafal Jaworowski 
87500856ebSRafal Jaworowski 	return eth_receive(buf, len);
88500856ebSRafal Jaworowski }
89*11db3abeSJeroen Hofstee 
90*11db3abeSJeroen Hofstee #else
91*11db3abeSJeroen Hofstee 
92*11db3abeSJeroen Hofstee int dev_open_net(void *cookie)
93*11db3abeSJeroen Hofstee {
94*11db3abeSJeroen Hofstee 	return API_ENODEV;
95*11db3abeSJeroen Hofstee }
96*11db3abeSJeroen Hofstee 
97*11db3abeSJeroen Hofstee int dev_close_net(void *cookie)
98*11db3abeSJeroen Hofstee {
99*11db3abeSJeroen Hofstee 	return API_ENODEV;
100*11db3abeSJeroen Hofstee }
101*11db3abeSJeroen Hofstee 
102*11db3abeSJeroen Hofstee int dev_enum_net(struct device_info *di)
103*11db3abeSJeroen Hofstee {
104*11db3abeSJeroen Hofstee 	return 0;
105*11db3abeSJeroen Hofstee }
106*11db3abeSJeroen Hofstee 
107*11db3abeSJeroen Hofstee int dev_write_net(void *cookie, void *buf, int len)
108*11db3abeSJeroen Hofstee {
109*11db3abeSJeroen Hofstee 	return API_ENODEV;
110*11db3abeSJeroen Hofstee }
111*11db3abeSJeroen Hofstee 
112*11db3abeSJeroen Hofstee int dev_read_net(void *cookie, void *buf, int len)
113*11db3abeSJeroen Hofstee {
114*11db3abeSJeroen Hofstee 	return API_ENODEV;
115*11db3abeSJeroen Hofstee }
116*11db3abeSJeroen Hofstee 
117*11db3abeSJeroen Hofstee #endif
118