Blame view

api/api_net.c 1.98 KB
500856eb1   Rafal Jaworowski   API for external ...
1
2
3
4
5
  /*
   * (C) Copyright 2007 Semihalf
   *
   * Written by: Rafal Jaworowski <raj@semihalf.com>
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
6
   * SPDX-License-Identifier:	GPL-2.0+
500856eb1   Rafal Jaworowski   API for external ...
7
8
9
   */
  
  #include <config.h>
500856eb1   Rafal Jaworowski   API for external ...
10
11
12
13
14
15
16
17
18
  #include <common.h>
  #include <net.h>
  #include <linux/types.h>
  #include <api_public.h>
  
  DECLARE_GLOBAL_DATA_PTR;
  
  #define DEBUG
  #undef DEBUG
500856eb1   Rafal Jaworowski   API for external ...
19
20
21
22
23
24
25
  #ifdef DEBUG
  #define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt, ##args); } while (0)
  #else
  #define debugf(fmt, args...)
  #endif
  
  #define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
211815784   Michal Simek   api: Disable api_...
26
  #if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
500856eb1   Rafal Jaworowski   API for external ...
27
28
29
30
31
32
33
34
35
36
  
  static int dev_valid_net(void *cookie)
  {
  	return ((void *)eth_get_dev() == cookie) ? 1 : 0;
  }
  
  int dev_open_net(void *cookie)
  {
  	if (!dev_valid_net(cookie))
  		return API_ENODEV;
d2eaec600   Joe Hershberger   net: Remove the b...
37
  	if (eth_init() < 0)
500856eb1   Rafal Jaworowski   API for external ...
38
39
40
41
42
43
44
45
46
47
48
49
50
  		return API_EIO;
  
  	return 0;
  }
  
  int dev_close_net(void *cookie)
  {
  	if (!dev_valid_net(cookie))
  		return API_ENODEV;
  
  	eth_halt();
  	return 0;
  }
d3a6532cb   Wolfgang Denk   Coding Style clea...
51
  /*
500856eb1   Rafal Jaworowski   API for external ...
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
   * There can only be one active eth interface at a time - use what is
   * currently set to eth_current
   */
  int dev_enum_net(struct device_info *di)
  {
  	struct eth_device *eth_current = eth_get_dev();
  
  	di->type = DEV_TYP_NET;
  	di->cookie = (void *)eth_current;
  	if (di->cookie == NULL)
  		return 0;
  
  	memcpy(di->di_net.hwaddr, eth_current->enetaddr, 6);
  
  	debugf("device found, returning cookie 0x%08x
  ",
  		(u_int32_t)di->cookie);
  
  	return 1;
  }
  
  int dev_write_net(void *cookie, void *buf, int len)
  {
  	/* XXX verify that cookie points to a valid net device??? */
  
  	return eth_send(buf, len);
  }
  
  int dev_read_net(void *cookie, void *buf, int len)
  {
  	/* XXX verify that cookie points to a valid net device??? */
  
  	return eth_receive(buf, len);
  }
11db3abe6   Jeroen Hofstee   api: fix build wi...
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
  
  #else
  
  int dev_open_net(void *cookie)
  {
  	return API_ENODEV;
  }
  
  int dev_close_net(void *cookie)
  {
  	return API_ENODEV;
  }
  
  int dev_enum_net(struct device_info *di)
  {
  	return 0;
  }
  
  int dev_write_net(void *cookie, void *buf, int len)
  {
  	return API_ENODEV;
  }
  
  int dev_read_net(void *cookie, void *buf, int len)
  {
  	return API_ENODEV;
  }
  
  #endif