⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_init.c

📁 powerpc内核mpc8241linux系统下net驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	 * This should be in a common file instead of per-driver.	 */		dev->change_mtu			= fddi_change_mtu;	dev->hard_header		= fddi_header;	dev->rebuild_header		= fddi_rebuild_header;	dev->type				= ARPHRD_FDDI;	dev->hard_header_len	= FDDI_K_SNAP_HLEN+3;	/* Assume 802.2 SNAP hdr len + 3 pad bytes */	dev->mtu				= FDDI_K_SNAP_DLEN;		/* Assume max payload of 802.2 SNAP frame */	dev->addr_len			= FDDI_K_ALEN;	dev->tx_queue_len		= 100;	/* Long queues on FDDI */		memset(dev->broadcast, 0xFF, FDDI_K_ALEN);	/* New-style flags */	dev->flags		= IFF_BROADCAST | IFF_MULTICAST;	dev_init_buffers(dev);		return;}#endif#ifdef CONFIG_HIPPIvoid hippi_setup(struct device *dev){	int i;	if (dev->name && (strncmp(dev->name, "hip", 3) == 0)) {		i = simple_strtoul(dev->name + 3, NULL, 0);		if (hipdev_index[i] == NULL) {			hipdev_index[i] = dev;		}		else if (dev != hipdev_index[i]) {			printk("hippi_setup: Ouch! Someone else took %s\n",				dev->name);		}	}	dev->set_multicast_list	= NULL;	dev->change_mtu			= hippi_change_mtu;	dev->hard_header		= hippi_header;	dev->rebuild_header 		= hippi_rebuild_header;	dev->set_mac_address 		= hippi_mac_addr;	dev->hard_header_parse		= NULL;	dev->hard_header_cache		= NULL;	dev->header_cache_update	= NULL;	dev->neigh_setup 		= hippi_neigh_setup_dev; 	/*	 * We don't support HIPPI `ARP' for the time being, and probably	 * never will unless someone else implements it. However we	 * still need a fake ARPHRD to make ifconfig and friends play ball.	 */	dev->type		= ARPHRD_HIPPI;	dev->hard_header_len 	= HIPPI_HLEN;	dev->mtu		= 65280;	dev->addr_len		= HIPPI_ALEN;	dev->tx_queue_len	= 25 /* 5 */;	memset(dev->broadcast, 0xFF, HIPPI_ALEN);	/*	 * HIPPI doesn't support broadcast+multicast and we only use	 * static ARP tables. ARP is disabled by hippi_neigh_setup_dev. 	 */	dev->flags = 0; 	dev_init_buffers(dev);}#endif#if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)static int ltalk_change_mtu(struct device *dev, int mtu){	return -EINVAL;}static int ltalk_mac_addr(struct device *dev, void *addr){		return -EINVAL;}void ltalk_setup(struct device *dev){	/* Fill in the fields of the device structure with localtalk-generic values. */		dev->change_mtu		= ltalk_change_mtu;	dev->hard_header	= NULL;	dev->rebuild_header 	= NULL;	dev->set_mac_address 	= ltalk_mac_addr;	dev->hard_header_cache	= NULL;	dev->header_cache_update= NULL;	dev->type		= ARPHRD_LOCALTLK;	dev->hard_header_len 	= LTALK_HLEN;	dev->mtu		= LTALK_MTU;	dev->addr_len		= LTALK_ALEN;	dev->tx_queue_len	= 10;			dev->broadcast[0]	= 0xFF;	dev->flags		= IFF_BROADCAST|IFF_MULTICAST|IFF_NOARP;	dev_init_buffers(dev);}#endifint ether_config(struct device *dev, struct ifmap *map){	if (map->mem_start != (u_long)(-1))		dev->mem_start = map->mem_start;	if (map->mem_end != (u_long)(-1))		dev->mem_end = map->mem_end;	if (map->base_addr != (u_short)(-1))		dev->base_addr = map->base_addr;	if (map->irq != (u_char)(-1))		dev->irq = map->irq;	if (map->dma != (u_char)(-1))		dev->dma = map->dma;	if (map->port != (u_char)(-1))		dev->if_port = map->port;	return 0;}static int etherdev_get_index(struct device *dev){	int i=MAX_ETH_CARDS;	for (i = 0; i < MAX_ETH_CARDS; ++i)	{		if (ethdev_index[i] == NULL) {			sprintf(dev->name, "eth%d", i);/*			printk("loading device '%s'...\n", dev->name);*/			ethdev_index[i] = dev;			return i;		}	}	return -1;}static void etherdev_put_index(struct device *dev){	int i;	for (i = 0; i < MAX_ETH_CARDS; ++i) {		if (ethdev_index[i] == dev) {			ethdev_index[i] = NULL;			break;		}	}}int register_netdev(struct device *dev){	int i=-1;	rtnl_lock();	if (dev->name &&	    (dev->name[0] == '\0' || dev->name[0] == ' '))		i = etherdev_get_index(dev);	if (register_netdevice(dev)) {		if (i >= 0)			etherdev_put_index(dev);		rtnl_unlock();		return -EIO;	}	rtnl_unlock();	return 0;}void unregister_netdev(struct device *dev){	rtnl_lock();	unregister_netdevice(dev);	etherdev_put_index(dev);	rtnl_unlock();}#ifdef CONFIG_TR/* The list of used and available "tr" slots */#define MAX_TR_CARDS 16static struct device *trdev_index[MAX_TR_CARDS];struct device *init_trdev(struct device *dev, int sizeof_priv){	int new_device = 0;	int i;	/* Use an existing correctly named device in Space.c:dev_base. */	if (dev == NULL) {		int alloc_size = sizeof(struct device) + sizeof("tr%d  ")			+ sizeof_priv + 3;		struct device *cur_dev;		char pname[8];		/* Putative name for the device.  */		for (i = 0; i < MAX_TR_CARDS; ++i)			if (trdev_index[i] == NULL) {				sprintf(pname, "tr%d", i);				for (cur_dev = dev_base; cur_dev; cur_dev = cur_dev->next)					if (strcmp(pname, cur_dev->name) == 0) {						dev = cur_dev;						dev->init = NULL;						sizeof_priv = (sizeof_priv + 3) & ~3;						dev->priv = sizeof_priv							  ? kmalloc(sizeof_priv, GFP_KERNEL)							  :	NULL;						if (dev->priv) memset(dev->priv, 0, sizeof_priv);						goto trfound;					}			}		alloc_size &= ~3;		/* Round to dword boundary. */		dev = (struct device *)kmalloc(alloc_size, GFP_KERNEL);		memset(dev, 0, alloc_size);		if (sizeof_priv)			dev->priv = (void *) (dev + 1);		dev->name = sizeof_priv + (char *)(dev + 1);		new_device = 1;	}trfound:						/* From the double loop above. */	for (i = 0; i < MAX_TR_CARDS; ++i)		if (trdev_index[i] == NULL) {			sprintf(dev->name, "tr%d", i);			trdev_index[i] = dev;			break;		}	dev->hard_header	 = tr_header;	dev->rebuild_header  = tr_rebuild_header;	dev->type		     = ARPHRD_IEEE802;	dev->hard_header_len = TR_HLEN;	dev->mtu		     = 2000; /* bug in fragmenter...*/	dev->addr_len		 = TR_ALEN;	dev->tx_queue_len	 = 100;	/* Long queues on tr */		memset(dev->broadcast,0xFF, TR_ALEN);	/* New-style flags. */	dev->flags		= IFF_BROADCAST;	if (new_device)		register_netdevice(dev);	return dev;}void tr_setup(struct device *dev){	int i;	/* register boot-defined "tr" devices */	if (dev->name && (strncmp(dev->name, "tr", 2) == 0)) {		i = simple_strtoul(dev->name + 2, NULL, 0);		if (trdev_index[i] == NULL) {			trdev_index[i] = dev;		}		else if (dev != trdev_index[i]) {			/* Really shouldn't happen! */			printk("tr_setup: Ouch! Someone else took %s\n",				dev->name);		}	}}void tr_freedev(struct device *dev){	int i;	for (i = 0; i < MAX_TR_CARDS; ++i) 	{		if (trdev_index[i] == dev) 		{			trdev_index[i] = NULL;			break;		}	}}int register_trdev(struct device *dev){	dev_init_buffers(dev);		if (dev->init && dev->init(dev) != 0) {		unregister_trdev(dev);		return -EIO;	}	return 0;}void unregister_trdev(struct device *dev){	rtnl_lock();	unregister_netdevice(dev);	rtnl_unlock();	tr_freedev(dev);}#endif/* * Local variables: *  compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -m486 -c net_init.c" *  version-control: t *  kept-new-versions: 5 * End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -