diff options
author | Yang Zhang <yang.z.zhang@intel.com> | 2015-08-28 09:58:54 +0800 |
---|---|---|
committer | Yang Zhang <yang.z.zhang@intel.com> | 2015-09-01 12:44:00 +0800 |
commit | e44e3482bdb4d0ebde2d8b41830ac2cdb07948fb (patch) | |
tree | 66b09f592c55df2878107a468a91d21506104d3f /qemu/roms/u-boot/api/api_net.c | |
parent | 9ca8dbcc65cfc63d6f5ef3312a33184e1d726e00 (diff) |
Add qemu 2.4.0
Change-Id: Ic99cbad4b61f8b127b7dc74d04576c0bcbaaf4f5
Signed-off-by: Yang Zhang <yang.z.zhang@intel.com>
Diffstat (limited to 'qemu/roms/u-boot/api/api_net.c')
-rw-r--r-- | qemu/roms/u-boot/api/api_net.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/qemu/roms/u-boot/api/api_net.c b/qemu/roms/u-boot/api/api_net.c new file mode 100644 index 000000000..3f52d7117 --- /dev/null +++ b/qemu/roms/u-boot/api/api_net.c @@ -0,0 +1,87 @@ +/* + * (C) Copyright 2007 Semihalf + * + * Written by: Rafal Jaworowski <raj@semihalf.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <config.h> +#include <common.h> +#include <net.h> +#include <linux/types.h> +#include <api_public.h> + +DECLARE_GLOBAL_DATA_PTR; + +#define DEBUG +#undef DEBUG + +#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) + + +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; + + if (eth_init(gd->bd) < 0) + return API_EIO; + + return 0; +} + +int dev_close_net(void *cookie) +{ + if (!dev_valid_net(cookie)) + return API_ENODEV; + + eth_halt(); + return 0; +} + +/* + * 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\n", + (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); +} |