diff options
Diffstat (limited to 'sys/arch/powerpc/stand/ofwboot/netif_of.c')
-rw-r--r-- | sys/arch/powerpc/stand/ofwboot/netif_of.c | 244 |
1 files changed, 0 insertions, 244 deletions
diff --git a/sys/arch/powerpc/stand/ofwboot/netif_of.c b/sys/arch/powerpc/stand/ofwboot/netif_of.c deleted file mode 100644 index 27df48e0eb0..00000000000 --- a/sys/arch/powerpc/stand/ofwboot/netif_of.c +++ /dev/null @@ -1,244 +0,0 @@ -/* $NetBSD: netif_of.c,v 1.1 1997/04/16 20:29:19 thorpej Exp $ */ - -/* - * Copyright (C) 1995 Wolfgang Solfrank. - * Copyright (C) 1995 TooLs GmbH. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by TooLs GmbH. - * 4. The name of TooLs GmbH may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * Open Firmware does most of the job for interfacing to the hardware, - * so it is easiest to just replace the netif module with - * this adaptation to the PROM network interface. - * - * Note: this is based in part on sys/arch/sparc/stand/netif_sun.c - */ - -#include <sys/param.h> -#include <sys/socket.h> - -#if 0 /* XXX thorpej */ -#include <string.h> -#include <time.h> -#endif - -#include <net/if.h> - -#include <netinet/in.h> -#include <netinet/if_ether.h> -#include <netinet/in_systm.h> - -#include <lib/libsa/stand.h> -#include <lib/libsa/net.h> -#include <lib/libsa/netif.h> - -#include <powerpc/stand/ofwboot/ofdev.h> -#include <powerpc/stand/ofwboot/openfirm.h> - -static struct netif netif_of; - -struct iodesc sockets[SOPEN_MAX]; - -struct iodesc * -socktodesc(sock) - int sock; -{ - if (sock != 0) - return NULL; - return sockets; -} - -int -netif_open(machdep_hint) - void *machdep_hint; -{ - struct of_dev *op = machdep_hint; - struct iodesc *io; - int fd, error; - char addr[32]; - -#ifdef NETIF_DEBUG - printf("netif_open..."); -#endif - /* find a free socket */ - io = sockets; - if (io->io_netif) { -#ifdef NETIF_DEBUG - printf("device busy\n"); -#endif - errno = ENFILE; - return -1; - } - bzero(io, sizeof *io); - - netif_of.nif_devdata = op; - io->io_netif = &netif_of; - - /* Put our ethernet address in io->myea */ - OF_getprop(OF_instance_to_package(op->handle), - "mac-address", io->myea, sizeof io->myea); - -#ifdef NETIF_DEBUG - printf("OK\n"); -#endif - return 0; -} - -int -netif_close(fd) - int fd; -{ - struct iodesc *io; - struct netif *ni; - -#ifdef NETIF_DEBUG - printf("netif_close(%x)...", fd); -#endif - if (fd != 0) { -#ifdef NETIF_DEBUG - printf("EBADF\n"); -#endif - errno = EBADF; - return -1; - } - - io = &sockets[fd]; - ni = io->io_netif; - if (ni != NULL) { - ni->nif_devdata = NULL; - io->io_netif = NULL; - } -#ifdef NETIF_DEBUG - printf("OK\n"); -#endif - return 0; -} - -/* - * Send a packet. The ether header is already there. - * Return the length sent (or -1 on error). - */ -ssize_t -netif_put(desc, pkt, len) - struct iodesc *desc; - void *pkt; - size_t len; -{ - struct of_dev *op; - ssize_t rv; - size_t sendlen; - - op = desc->io_netif->nif_devdata; - -#ifdef NETIF_DEBUG - { - struct ether_header *eh; - - printf("netif_put: desc=0x%x pkt=0x%x len=%d\n", - desc, pkt, len); - eh = pkt; - printf("dst: %s ", ether_sprintf(eh->ether_dhost)); - printf("src: %s ", ether_sprintf(eh->ether_shost)); - printf("type: 0x%x\n", eh->ether_type & 0xFFFF); - } -#endif - - sendlen = len; - if (sendlen < 60) { - sendlen = 60; -#ifdef NETIF_DEBUG - printf("netif_put: length padded to %d\n", sendlen); -#endif - } - - rv = OF_write(op->handle, pkt, sendlen); - -#ifdef NETIF_DEBUG - printf("netif_put: xmit returned %d\n", rv); -#endif - - return rv; -} - -/* - * Receive a packet, including the ether header. - * Return the total length received (or -1 on error). - */ -ssize_t -netif_get(desc, pkt, maxlen, timo) - struct iodesc *desc; - void *pkt; - size_t maxlen; - time_t timo; -{ - struct of_dev *op; - int tick0, tmo_ms; - int len; - - op = desc->io_netif->nif_devdata; - -#ifdef NETIF_DEBUG - printf("netif_get: pkt=0x%x, maxlen=%d, tmo=%d\n", - pkt, maxlen, timo); -#endif - - tmo_ms = timo * 1000; - tick0 = OF_milliseconds(); - - do { - len = OF_read(op->handle, pkt, maxlen); - } while ((len == -2) && ((OF_milliseconds() - tick0) < tmo_ms)); - -#ifdef NETIF_DEBUG - printf("netif_get: received len=%d\n", len); -#endif - - if (len < 12) - return -1; - -#ifdef NETIF_DEBUG - { - struct ether_header *eh = pkt; - - printf("dst: %s ", ether_sprintf(eh->ether_dhost)); - printf("src: %s ", ether_sprintf(eh->ether_shost)); - printf("type: 0x%x\n", eh->ether_type & 0xFFFF); - } -#endif - - return len; -} - -/* - * Shouldn't really be here, but is used solely for networking, so... - */ -time_t -getsecs() -{ - return OF_milliseconds() / 1000; -} |