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