patch-2.3.42 linux/drivers/ap1000/bif.c
Next file: linux/drivers/ap1000/ddv.c
Previous file: linux/drivers/ap1000/apfddi.h
Back to the patch index
Back to the overall index
- Lines: 281
- Date:
Wed Dec 31 16:00:00 1969
- Orig file:
v2.3.41/linux/drivers/ap1000/bif.c
- Orig date:
Wed Aug 18 11:38:58 1999
diff -u --recursive --new-file v2.3.41/linux/drivers/ap1000/bif.c linux/drivers/ap1000/bif.c
@@ -1,280 +0,0 @@
- /*
- * Copyright 1996 The Australian National University.
- * Copyright 1996 Fujitsu Laboratories Limited
- *
- * This software may be distributed under the terms of the Gnu
- * Public License version 2 or later
- */
-/*
- * $Id: bif.c,v 1.13 1996/12/18 01:45:52 tridge Exp $
- *
- * Network interface definitions for bif device.
- */
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/interrupt.h>
-#include <linux/fs.h>
-#include <linux/types.h>
-#include <linux/string.h>
-#include <linux/socket.h>
-#include <linux/errno.h>
-#include <linux/fcntl.h>
-#include <linux/in.h>
-#include <linux/if_ether.h> /* For the statistics structure. */
-#include <linux/netdevice.h>
-#include <linux/if_arp.h> /* For ARPHRD_BIF */
-
-#include <asm/system.h>
-#include <asm/segment.h>
-#include <asm/io.h>
-
-#include <linux/inet.h>
-#include <linux/etherdevice.h>
-#include <linux/skbuff.h>
-#include <net/sock.h>
-
-#include <asm/ap1000/apservice.h>
-#include <asm/ap1000/apreg.h>
-
-#define BIF_DEBUG 0
-#if BIF_DEBUG
-static int seq = 0;
-#endif
-
-#define BIF_MTU 10240
-
-static struct net_device *bif_device = 0;
-static struct net_device_stats *bif_stats = 0;
-
-int bif_init(struct net_device *dev);
-int bif_open(struct net_device *dev);
-static int bif_xmit(struct sk_buff *skb, struct net_device *dev);
-int bif_rx(struct sk_buff *skb);
-int bif_stop(struct net_device *dev);
-static struct net_device_stats *bif_get_stats(struct net_device *dev);
-
-static int bif_hard_header(struct sk_buff *skb, struct net_device *dev,
- unsigned short type, void *daddr,
- void *saddr, unsigned len)
-{
-#if BIF_DEBUG
- printk("bif_hard_header()\n");
-#endif
-
- skb_push(skb,dev->hard_header_len);
-
- if (daddr) skb->arp = 1;
-
- /* tell IP how much space we took */
- return (dev->hard_header_len);
-}
-
-static int bif_rebuild_header(void *buff, struct net_device *dev,
- unsigned long raddr, struct sk_buff *skb)
-{
- /* this would normally be used to fill in hardware addresses after
- an ARP */
-#if BIF_DEBUG
- printk("bif_rebuild_header()\n");
-#endif
- if (skb) skb->arp = 1;
- return(0);
-}
-
-static int bif_set_mac_address(struct net_device *dev, void *addr)
-{
- printk("BIF: set_mac_address called\n");
- return (0);
-}
-
-static void bif_set_multicast_list(struct net_device *dev)
-{
- return;
-}
-
-static int bif_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
-{
- printk("BIF: Called do_ioctl\n");
- return (0);
-}
-
-static int bif_set_config(struct net_device *dev, struct ifmap *map)
-{
- printk("BIF: Called bif_set_config\n");
- return (0);
-}
-
-/*
- * Initialise bif network interface.
- */
-int bif_init(struct net_device *dev)
-{
- int i;
-
- printk("bif_init(): Initialising bif interface\n");
- bif_device = dev;
-
- dev->mtu = BIF_MTU;
- dev->tbusy = 0;
- dev->hard_start_xmit = bif_xmit;
- dev->hard_header = bif_hard_header;
- dev->hard_header_len = sizeof(struct cap_request);
- dev->addr_len = 0;
- dev->tx_queue_len = 50000; /* no limit (almost!) */
- dev->type = ARPHRD_BIF;
- dev->rebuild_header = bif_rebuild_header;
- dev->open = bif_open;
- dev->flags = IFF_NOARP; /* Don't use ARP on this device */
- dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);
- if (dev->priv == NULL)
- return -ENOMEM;
- memset(dev->priv, 0, sizeof(struct net_device_stats));
- bif_stats = (struct net_device_stats *)bif_device->priv;
-
-
- dev->stop = bif_stop;
- dev->get_stats = bif_get_stats;
-
- dev->set_mac_address = bif_set_mac_address;
- dev->header_cache_update = NULL;
- dev->do_ioctl = bif_do_ioctl;
- dev->set_config = bif_set_config;
- dev->set_multicast_list = bif_set_multicast_list;
-
- memset(dev->broadcast, 0xFF, ETH_ALEN);
-
- dev_init_buffers(dev);
-
- return(0);
-}
-
-int bif_open(struct net_device *dev)
-{
- printk("In bif_open\n");
- dev->tbusy = 0;
- dev->start = 1;
- return 0;
-}
-
-#if BIF_DEBUG
-static void dump_packet(char *action, char *buf, int len, int seq)
-{
- int flags;
- char *sep;
-
- printk("%s packet %d of %d bytes at %d:\n", action, seq,
- len, (int)jiffies);
- printk(" from %x to %x pktid=%d ttl=%d pcol=%d len=%d\n",
- *(long *)(buf+12), *(long *)(buf+16), *(u_short *)(buf+4),
- *(unsigned char *)(buf+8), buf[9], *(u_short *)(buf+2));
- if( buf[9] == 6 || buf[9] == 17 ){
- /* TCP or UDP */
- printk(" sport=%d dport=%d",
- *(u_short *)(buf+20), *(u_short *)(buf+22));
- if( buf[9] == 6 ){
- printk(" seq=%d ack=%d win=%d flags=<",
- *(long *)(buf+24), *(long *)(buf+28),
- *(unsigned short *)(buf+34));
- flags = buf[33];
- sep = "";
- printk(">");
- }
- printk("\n");
- }
- else {
- printk(" protocol = %d\n", buf[9]);
- }
-}
-#endif
-
-
-static int bif_xmit(struct sk_buff *skb, struct net_device *dev)
-{
- extern int bif_send_ip(int cid,struct sk_buff *skb);
- extern int tnet_send_ip(int cid,struct sk_buff *skb);
- extern int msc_blocked, tnet_ip_enabled;
- u_long destip;
- int cid;
-
- if (skb == NULL || dev == NULL)
- return(0);
-
- destip = *(u_long *)(skb->data+sizeof(struct cap_request)+16);
- cid = ap_ip_to_cid(destip);
-
- skb->dev = dev;
- skb->mac.raw = skb->data;
-
- if (cid != -1 && tnet_ip_enabled && !msc_blocked) {
- tnet_send_ip(cid,skb);
- } else {
- bif_send_ip(cid, skb);
- }
-
- dev->tbusy = 0;
-
- bif_stats->tx_packets++;
-
- mark_bh(NET_BH);
-
- return 0;
-}
-
-
-/*
- * Receive a packet from the BIF - called from interrupt handler.
- */
-int bif_rx(struct sk_buff *skb)
-{
-#if BIF_DEBUG
- dump_packet("bif_rx:", skb->data, skb->len, seq++);
-#endif
-
- if (bif_device == NULL) {
- printk("bif: bif_device is NULL in bif_rx\n");
- dev_kfree_skb(skb);
- return 0;
- }
- skb->dev = bif_device;
- skb->protocol = ETH_P_IP;
-
-#if 1
- /* try disabling checksums on receive */
- if (ap_ip_to_cid(*(u_long *)(((char *)skb->data)+12)) != -1)
- skb->ip_summed = CHECKSUM_UNNECESSARY;
-#endif
-
- /*
- * Inform the network layer of the new packet.
- */
- skb->mac.raw = skb->data;
- netif_rx(skb);
-
- if (bif_stats == NULL) {
- printk("bif: bif_stats is NULL is bif_rx\n");
- return 0;
- }
- bif_stats->rx_packets++;
-
- return 0;
-}
-
-int bif_stop(struct net_device *dev)
-{
- printk("in bif_close\n");
-
- dev->tbusy = 1;
- dev->start = 0;
-
- return 0;
-}
-
-/*
- * Return statistics of bif driver.
- */
-static struct net_device_stats *bif_get_stats(struct net_device *dev)
-{
- return((struct net_device_stats *)dev->priv);
-}
-
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)