1*500856ebSRafal Jaworowski /* 2*500856ebSRafal Jaworowski * (C) Copyright 2007 Semihalf 3*500856ebSRafal Jaworowski * 4*500856ebSRafal Jaworowski * Written by: Rafal Jaworowski <raj@semihalf.com> 5*500856ebSRafal Jaworowski * 6*500856ebSRafal Jaworowski * See file CREDITS for list of people who contributed to this 7*500856ebSRafal Jaworowski * project. 8*500856ebSRafal Jaworowski * 9*500856ebSRafal Jaworowski * This program is free software; you can redistribute it and/or 10*500856ebSRafal Jaworowski * modify it under the terms of the GNU General Public License as 11*500856ebSRafal Jaworowski * published by the Free Software Foundation; either version 2 of 12*500856ebSRafal Jaworowski * the License, or (at your option) any later version. 13*500856ebSRafal Jaworowski * 14*500856ebSRafal Jaworowski * This program is distributed in the hope that it will be useful, 15*500856ebSRafal Jaworowski * but WITHOUT ANY WARRANTY; without even the implied warranty of 16*500856ebSRafal Jaworowski * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17*500856ebSRafal Jaworowski * GNU General Public License for more details. 18*500856ebSRafal Jaworowski * 19*500856ebSRafal Jaworowski * You should have received a copy of the GNU General Public License 20*500856ebSRafal Jaworowski * along with this program; if not, write to the Free Software 21*500856ebSRafal Jaworowski * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 22*500856ebSRafal Jaworowski * MA 02111-1307 USA 23*500856ebSRafal Jaworowski * 24*500856ebSRafal Jaworowski */ 25*500856ebSRafal Jaworowski 26*500856ebSRafal Jaworowski #include <config.h> 27*500856ebSRafal Jaworowski 28*500856ebSRafal Jaworowski #if defined(CONFIG_API) 29*500856ebSRafal Jaworowski 30*500856ebSRafal Jaworowski #include <common.h> 31*500856ebSRafal Jaworowski #include <net.h> 32*500856ebSRafal Jaworowski #include <linux/types.h> 33*500856ebSRafal Jaworowski #include <api_public.h> 34*500856ebSRafal Jaworowski 35*500856ebSRafal Jaworowski DECLARE_GLOBAL_DATA_PTR; 36*500856ebSRafal Jaworowski 37*500856ebSRafal Jaworowski #define DEBUG 38*500856ebSRafal Jaworowski #undef DEBUG 39*500856ebSRafal Jaworowski 40*500856ebSRafal Jaworowski #if !defined(CONFIG_NET_MULTI) 41*500856ebSRafal Jaworowski #error "API/net is currently only available for platforms with CONFIG_NET_MULTI" 42*500856ebSRafal Jaworowski #endif 43*500856ebSRafal Jaworowski 44*500856ebSRafal Jaworowski #ifdef DEBUG 45*500856ebSRafal Jaworowski #define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt, ##args); } while (0) 46*500856ebSRafal Jaworowski #else 47*500856ebSRafal Jaworowski #define debugf(fmt, args...) 48*500856ebSRafal Jaworowski #endif 49*500856ebSRafal Jaworowski 50*500856ebSRafal Jaworowski #define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0) 51*500856ebSRafal Jaworowski 52*500856ebSRafal Jaworowski 53*500856ebSRafal Jaworowski static int dev_valid_net(void *cookie) 54*500856ebSRafal Jaworowski { 55*500856ebSRafal Jaworowski return ((void *)eth_get_dev() == cookie) ? 1 : 0; 56*500856ebSRafal Jaworowski } 57*500856ebSRafal Jaworowski 58*500856ebSRafal Jaworowski int dev_open_net(void *cookie) 59*500856ebSRafal Jaworowski { 60*500856ebSRafal Jaworowski if (!dev_valid_net(cookie)) 61*500856ebSRafal Jaworowski return API_ENODEV; 62*500856ebSRafal Jaworowski 63*500856ebSRafal Jaworowski if (eth_init(gd->bd) < 0) 64*500856ebSRafal Jaworowski return API_EIO; 65*500856ebSRafal Jaworowski 66*500856ebSRafal Jaworowski return 0; 67*500856ebSRafal Jaworowski } 68*500856ebSRafal Jaworowski 69*500856ebSRafal Jaworowski int dev_close_net(void *cookie) 70*500856ebSRafal Jaworowski { 71*500856ebSRafal Jaworowski if (!dev_valid_net(cookie)) 72*500856ebSRafal Jaworowski return API_ENODEV; 73*500856ebSRafal Jaworowski 74*500856ebSRafal Jaworowski eth_halt(); 75*500856ebSRafal Jaworowski return 0; 76*500856ebSRafal Jaworowski } 77*500856ebSRafal Jaworowski 78*500856ebSRafal Jaworowski /* 79*500856ebSRafal Jaworowski * There can only be one active eth interface at a time - use what is 80*500856ebSRafal Jaworowski * currently set to eth_current 81*500856ebSRafal Jaworowski */ 82*500856ebSRafal Jaworowski int dev_enum_net(struct device_info *di) 83*500856ebSRafal Jaworowski { 84*500856ebSRafal Jaworowski struct eth_device *eth_current = eth_get_dev(); 85*500856ebSRafal Jaworowski 86*500856ebSRafal Jaworowski di->type = DEV_TYP_NET; 87*500856ebSRafal Jaworowski di->cookie = (void *)eth_current; 88*500856ebSRafal Jaworowski if (di->cookie == NULL) 89*500856ebSRafal Jaworowski return 0; 90*500856ebSRafal Jaworowski 91*500856ebSRafal Jaworowski memcpy(di->di_net.hwaddr, eth_current->enetaddr, 6); 92*500856ebSRafal Jaworowski 93*500856ebSRafal Jaworowski debugf("device found, returning cookie 0x%08x\n", 94*500856ebSRafal Jaworowski (u_int32_t)di->cookie); 95*500856ebSRafal Jaworowski 96*500856ebSRafal Jaworowski return 1; 97*500856ebSRafal Jaworowski } 98*500856ebSRafal Jaworowski 99*500856ebSRafal Jaworowski int dev_write_net(void *cookie, void *buf, int len) 100*500856ebSRafal Jaworowski { 101*500856ebSRafal Jaworowski /* XXX verify that cookie points to a valid net device??? */ 102*500856ebSRafal Jaworowski 103*500856ebSRafal Jaworowski return eth_send(buf, len); 104*500856ebSRafal Jaworowski } 105*500856ebSRafal Jaworowski 106*500856ebSRafal Jaworowski int dev_read_net(void *cookie, void *buf, int len) 107*500856ebSRafal Jaworowski { 108*500856ebSRafal Jaworowski /* XXX verify that cookie points to a valid net device??? */ 109*500856ebSRafal Jaworowski 110*500856ebSRafal Jaworowski return eth_receive(buf, len); 111*500856ebSRafal Jaworowski } 112*500856ebSRafal Jaworowski 113*500856ebSRafal Jaworowski #endif /* CONFIG_API */ 114