1*3ea143abSJoe Hershberger /* 2*3ea143abSJoe Hershberger * Copyright (c) 2015 National Instruments 3*3ea143abSJoe Hershberger * 4*3ea143abSJoe Hershberger * (C) Copyright 2015 5*3ea143abSJoe Hershberger * Joe Hershberger <joe.hershberger@ni.com> 6*3ea143abSJoe Hershberger * 7*3ea143abSJoe Hershberger * SPDX-License-Identifier: GPL-2.0 8*3ea143abSJoe Hershberger */ 9*3ea143abSJoe Hershberger 10*3ea143abSJoe Hershberger #include <common.h> 11*3ea143abSJoe Hershberger #include <dm.h> 12*3ea143abSJoe Hershberger #include <malloc.h> 13*3ea143abSJoe Hershberger #include <net.h> 14*3ea143abSJoe Hershberger 15*3ea143abSJoe Hershberger DECLARE_GLOBAL_DATA_PTR; 16*3ea143abSJoe Hershberger 17*3ea143abSJoe Hershberger static int sb_eth_start(struct udevice *dev) 18*3ea143abSJoe Hershberger { 19*3ea143abSJoe Hershberger debug("eth_sandbox: Start\n"); 20*3ea143abSJoe Hershberger 21*3ea143abSJoe Hershberger return 0; 22*3ea143abSJoe Hershberger } 23*3ea143abSJoe Hershberger 24*3ea143abSJoe Hershberger static int sb_eth_send(struct udevice *dev, void *packet, int length) 25*3ea143abSJoe Hershberger { 26*3ea143abSJoe Hershberger debug("eth_sandbox: Send packet %d\n", length); 27*3ea143abSJoe Hershberger 28*3ea143abSJoe Hershberger return 0; 29*3ea143abSJoe Hershberger } 30*3ea143abSJoe Hershberger 31*3ea143abSJoe Hershberger static int sb_eth_recv(struct udevice *dev, uchar **packetp) 32*3ea143abSJoe Hershberger { 33*3ea143abSJoe Hershberger return 0; 34*3ea143abSJoe Hershberger } 35*3ea143abSJoe Hershberger 36*3ea143abSJoe Hershberger static void sb_eth_stop(struct udevice *dev) 37*3ea143abSJoe Hershberger { 38*3ea143abSJoe Hershberger debug("eth_sandbox: Stop\n"); 39*3ea143abSJoe Hershberger } 40*3ea143abSJoe Hershberger 41*3ea143abSJoe Hershberger static int sb_eth_write_hwaddr(struct udevice *dev) 42*3ea143abSJoe Hershberger { 43*3ea143abSJoe Hershberger struct eth_pdata *pdata = dev_get_platdata(dev); 44*3ea143abSJoe Hershberger 45*3ea143abSJoe Hershberger debug("eth_sandbox %s: Write HW ADDR - %pM\n", dev->name, 46*3ea143abSJoe Hershberger pdata->enetaddr); 47*3ea143abSJoe Hershberger return 0; 48*3ea143abSJoe Hershberger } 49*3ea143abSJoe Hershberger 50*3ea143abSJoe Hershberger static const struct eth_ops sb_eth_ops = { 51*3ea143abSJoe Hershberger .start = sb_eth_start, 52*3ea143abSJoe Hershberger .send = sb_eth_send, 53*3ea143abSJoe Hershberger .recv = sb_eth_recv, 54*3ea143abSJoe Hershberger .stop = sb_eth_stop, 55*3ea143abSJoe Hershberger .write_hwaddr = sb_eth_write_hwaddr, 56*3ea143abSJoe Hershberger }; 57*3ea143abSJoe Hershberger 58*3ea143abSJoe Hershberger static int sb_eth_remove(struct udevice *dev) 59*3ea143abSJoe Hershberger { 60*3ea143abSJoe Hershberger return 0; 61*3ea143abSJoe Hershberger } 62*3ea143abSJoe Hershberger 63*3ea143abSJoe Hershberger static int sb_eth_ofdata_to_platdata(struct udevice *dev) 64*3ea143abSJoe Hershberger { 65*3ea143abSJoe Hershberger struct eth_pdata *pdata = dev_get_platdata(dev); 66*3ea143abSJoe Hershberger 67*3ea143abSJoe Hershberger pdata->iobase = dev_get_addr(dev); 68*3ea143abSJoe Hershberger return 0; 69*3ea143abSJoe Hershberger } 70*3ea143abSJoe Hershberger 71*3ea143abSJoe Hershberger static const struct udevice_id sb_eth_ids[] = { 72*3ea143abSJoe Hershberger { .compatible = "sandbox,eth" }, 73*3ea143abSJoe Hershberger { } 74*3ea143abSJoe Hershberger }; 75*3ea143abSJoe Hershberger 76*3ea143abSJoe Hershberger U_BOOT_DRIVER(eth_sandbox) = { 77*3ea143abSJoe Hershberger .name = "eth_sandbox", 78*3ea143abSJoe Hershberger .id = UCLASS_ETH, 79*3ea143abSJoe Hershberger .of_match = sb_eth_ids, 80*3ea143abSJoe Hershberger .ofdata_to_platdata = sb_eth_ofdata_to_platdata, 81*3ea143abSJoe Hershberger .remove = sb_eth_remove, 82*3ea143abSJoe Hershberger .ops = &sb_eth_ops, 83*3ea143abSJoe Hershberger .platdata_auto_alloc_size = sizeof(struct eth_pdata), 84*3ea143abSJoe Hershberger }; 85