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

📄 skge.c

📁 F:worksip2440a board可启动u-boot-like.tar.gz F:worksip2440a board可启动u-boot-like.tar.gz
💻 C
📖 第 1 页 / 共 5 页
字号:
void dump_frag( SK_U8 *data, int length);/* global variables *********************************************************/#if 0static const char *BootString = BOOT_STRING;#endifstruct SK_NET_DEVICE *SkGeRootDev = NULL;static int probed __initdata = 0;/* local variables **********************************************************/static uintptr_t TxQueueAddr[SK_MAX_MACS][2] = {{0x680, 0x600},{0x780, 0x700}};static uintptr_t RxQueueAddr[SK_MAX_MACS] = {0x400, 0x480};/* local variables **********************************************************/const char SK_Root_Dir_entry[8];#if 0static struct proc_dir_entry	*pSkRootDir;#endifstatic struct pci_device_id supported[] = {	{PCI_VENDOR_ID_3COM, 0x1700},	{PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_GE},	{PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_YU},	{}};/***************************************************************************** * * 	skge_probe - find all SK-98xx adapters * * Description: *	This function scans the PCI bus for SK-98xx adapters. Resources for *	each adapter are allocated and the adapter is brought into Init 1 *	state. * * Returns: *	0, if everything is ok *	!=0, on error */#if 0static int __init skge_probe (void)#elseint skge_probe (struct eth_device ** ret_dev)#endif{#if 0	int			proc_root_initialized = 0;#endif	int			boards_found = 0;#if 0	int			vendor_flag = SK_FALSE;#endif	SK_AC			*pAC;	DEV_NET			*pNet = NULL;#if 0	struct proc_dir_entry	*pProcFile;	struct pci_dev	*pdev = NULL;	unsigned long		base_address;#else	u32			base_address;#endif	struct SK_NET_DEVICE *dev = NULL;#if 0	SK_BOOL DeviceFound = SK_FALSE;#endif	SK_BOOL BootStringCount = SK_FALSE;#if 1	pci_dev_t devno;#endif	if (probed)		return -ENODEV;	probed++;	if (!pci_present())		/* is PCI support present? */		return -ENODEV;#if 0		while((pdev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET << 8, pdev)))#else		while((devno = pci_find_devices (supported, boards_found)) >= 0)#endif		{		dev = NULL;		pNet = NULL;#if 0		SK_PCI_ISCOMPLIANT(vendor_flag, pdev);		if (!vendor_flag)			continue;#endif/*		if ((pdev->vendor != PCI_VENDOR_ID_SYSKONNECT) &&			((pdev->device != PCI_DEVICE_ID_SYSKONNECT_GE) ||			(pdev->device != PCI_DEVICE_ID_SYSKONNECT_YU))){			continue;		}*/#if 0		/* Configure DMA attributes. */		if (pci_set_dma_mask(pdev, (u64) 0xffffffffffffffff) &&			pci_set_dma_mask(pdev, (u64) 0xffffffff))			continue;#endif#if 0		if ((dev = init_etherdev(dev, sizeof(DEV_NET))) == NULL) {			printk(KERN_ERR "Unable to allocate etherdev "			       "structure!\n");			break;		}#else		dev = malloc (sizeof *dev);		memset(dev, 0, sizeof(*dev));		dev->priv = malloc(sizeof(DEV_NET));#endif		if (dev->priv == NULL) {			printk(KERN_ERR "Unable to allocate adapter "			       "structure!\n");			break;		}		pNet = dev->priv;		pNet->pAC = kmalloc(sizeof(SK_AC), GFP_KERNEL);		if (pNet->pAC == NULL){			kfree(dev->priv);			printk(KERN_ERR "Unable to allocate adapter "			       "structure!\n");			break;		}		/* Print message */		if (!BootStringCount) {			/* set display flag to TRUE so that */			/* we only display this string ONCE */			BootStringCount = SK_TRUE;#ifdef SK98_INFO			printk("%s\n", BootString);#endif		}		memset(pNet->pAC, 0, sizeof(SK_AC));		pAC = pNet->pAC;#if 0		pAC->PciDev = pdev;		pAC->PciDevId = pdev->device;		pAC->dev[0] = dev;		pAC->dev[1] = dev;#else		pAC->PciDev = devno;		ret_dev[0] = pAC->dev[0] = dev;		ret_dev[1] = pAC->dev[1] = dev;#endif		sprintf(pAC->Name, "SysKonnect SK-98xx");		pAC->CheckQueue = SK_FALSE;		pNet->Mtu = 1500;		pNet->Up = 0;#if 0		dev->irq = pdev->irq;		dev->open =		&SkGeOpen;		dev->stop =		&SkGeClose;		dev->hard_start_xmit =	&SkGeXmit;		dev->get_stats =	&SkGeStats;		dev->set_multicast_list = &SkGeSetRxMode;		dev->set_mac_address =	&SkGeSetMacAddr;		dev->do_ioctl =		&SkGeIoctl;		dev->change_mtu =	&SkGeChangeMtu;		dev->flags &= 		~IFF_RUNNING;#endif#ifdef SK_ZEROCOPY		if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {			/* Use only if yukon hardware */			/* SK and ZEROCOPY - fly baby... */			dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;		}#endif#if 0		/*		 * Dummy value.		 */		dev->base_addr = 42;		pci_set_master(pdev);		pci_set_master(pdev);		base_address = pci_resource_start (pdev, 0);#else		pci_write_config_dword(devno,				       PCI_COMMAND,				       PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);		pci_read_config_dword (devno, PCI_BASE_ADDRESS_0,				       &base_address);#endif#ifdef SK_BIG_ENDIAN		/*		 * On big endian machines, we use the adapter's aibility of		 * reading the descriptors as big endian.		 */		{		SK_U32		our2;			SkPciReadCfgDWord(pAC, PCI_OUR_REG_2, &our2);			our2 |= PCI_REV_DESC;			SkPciWriteCfgDWord(pAC, PCI_OUR_REG_2, our2);		}#endif		/*		 * Remap the regs into kernel space.		 */#if 0		pAC->IoBase = (char*)ioremap(base_address, 0x4000);#else		pAC->IoBase = (char*)pci_mem_to_phys(devno, base_address);#endif		if (!pAC->IoBase){			printk(KERN_ERR "%s:  Unable to map I/O register, "			       "SK 98xx No. %i will be disabled.\n",			       dev->name, boards_found);			kfree(dev);			break;		}		pAC->Index = boards_found;		if (SkGeBoardInit(dev, pAC)) {			FreeResources(dev);			kfree(dev);			continue;		}#if 0		memcpy((caddr_t) &dev->dev_addr,			(caddr_t) &pAC->Addr.Net[0].CurrentMacAddress, 6);#else		memcpy((caddr_t) &dev->enetaddr,			(caddr_t) &pAC->Addr.Net[0].CurrentMacAddress, 6);#endif#if 0		/* First adapter... Create proc and print message */		if (!DeviceFound) {			DeviceFound = SK_TRUE;			SK_MEMCPY(&SK_Root_Dir_entry, BootString,				sizeof(SK_Root_Dir_entry) - 1);			/*Create proc (directory)*/			if(!proc_root_initialized) {				pSkRootDir = create_proc_entry(SK_Root_Dir_entry,					S_IFDIR | S_IWUSR | S_IRUGO | S_IXUGO, proc_net);				proc_root_initialized = 1;			}			pSkRootDir->owner = THIS_MODULE;		}		/* Create proc file */		pProcFile = create_proc_entry(dev->name,			S_IFREG | S_IXUSR | S_IWGRP | S_IROTH,			pSkRootDir);		pProcFile->read_proc = proc_read;		pProcFile->write_proc = NULL;		pProcFile->nlink = 1;		pProcFile->size = sizeof(dev->name + 1);		pProcFile->data = (void *)pProcFile;#endif		pNet->PortNr = 0;		pNet->NetNr = 0;#ifdef SK_ZEROCOPY			if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {				/* SG and ZEROCOPY - fly baby... */				dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;			}#endif		boards_found++;		/* More then one port found */		if ((pAC->GIni.GIMacsFound == 2 ) && (pAC->RlmtNets == 2)) {#if 0			if ((dev = init_etherdev(NULL, sizeof(DEV_NET))) == 0) {				printk(KERN_ERR "Unable to allocate etherdev "					"structure!\n");				break;			}#else			dev = malloc (sizeof *dev);			memset(dev, 0, sizeof(*dev));			dev->priv = malloc(sizeof(DEV_NET));#endif			pAC->dev[1] = dev;			pNet = dev->priv;			pNet->PortNr = 1;			pNet->NetNr = 1;			pNet->pAC = pAC;			pNet->Mtu = 1500;			pNet->Up = 0;#if 0			dev->open =		&SkGeOpen;			dev->stop =		&SkGeClose;			dev->hard_start_xmit =	&SkGeXmit;			dev->get_stats =	&SkGeStats;			dev->set_multicast_list = &SkGeSetRxMode;			dev->set_mac_address =	&SkGeSetMacAddr;			dev->do_ioctl =		&SkGeIoctl;			dev->change_mtu =	&SkGeChangeMtu;			dev->flags &= 		~IFF_RUNNING;#endif#ifdef SK_ZEROCOPY			if (pAC->GIni.GIChipId == CHIP_ID_YUKON) {				/* SG and ZEROCOPY - fly baby... */				dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;			}#endif#if 0			pProcFile = create_proc_entry(dev->name,				S_IFREG | S_IXUSR | S_IWGRP | S_IROTH,				pSkRootDir);			pProcFile->read_proc = proc_read;			pProcFile->write_proc = NULL;			pProcFile->nlink = 1;			pProcFile->size = sizeof(dev->name + 1);			pProcFile->data = (void *)pProcFile;#endif#if 0			memcpy((caddr_t) &dev->dev_addr,			(caddr_t) &pAC->Addr.Net[1].CurrentMacAddress, 6);#else			memcpy((caddr_t) &dev->enetaddr,			(caddr_t) &pAC->Addr.Net[1].CurrentMacAddress, 6);#endif			printk("%s: %s\n", dev->name, pAC->DeviceStr);			printk("      PrefPort:B  RlmtMode:Dual Check Link State\n");		}		/* Save the hardware revision */		pAC->HWRevision = (((pAC->GIni.GIPciHwRev >> 4) & 0x0F)*10) +			(pAC->GIni.GIPciHwRev & 0x0F);		/*		 * This is bollocks, but we need to tell the net-init		 * code that it shall go for the next device.		 */#if 0#ifndef MODULE		dev->base_addr = 0;#endif#endif	}	/*	 * If we're at this point we're going through skge_probe() for	 * the first time.  Return success (0) if we've initialized 1	 * or more boards. Otherwise, return failure (-ENODEV).	 */	return boards_found;} /* skge_probe *//***************************************************************************** * * 	FreeResources - release resources allocated for adapter * * Description: *	This function releases the IRQ, unmaps the IO and *	frees the desriptor ring. * * Returns: N/A * */static void FreeResources(struct SK_NET_DEVICE *dev){SK_U32 AllocFlag;DEV_NET		*pNet;SK_AC		*pAC;	if (dev->priv) {		pNet = (DEV_NET*) dev->priv;		pAC = pNet->pAC;		AllocFlag = pAC->AllocFlag;#if 0		if (AllocFlag & SK_ALLOC_IRQ) {			free_irq(dev->irq, dev);		}		if (pAC->IoBase) {			iounmap(pAC->IoBase);		}#endif		if (pAC->pDescrMem) {			BoardFreeMem(pAC);		}	}} /* FreeResources */#if 0MODULE_AUTHOR("Mirko Lindner <mlindner@syskonnect.de>");MODULE_DESCRIPTION("SysKonnect SK-NET Gigabit Ethernet SK-98xx driver");MODULE_LICENSE("GPL");MODULE_PARM(Speed_A,    "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(Speed_B,    "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(AutoNeg_A,  "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(AutoNeg_B,  "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(DupCap_A,   "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(DupCap_B,   "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(FlowCtrl_A, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(FlowCtrl_B, "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(Role_A,	    "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(Role_B,	    "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(PrefPort,   "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");MODULE_PARM(RlmtMode,   "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "s");/* not used, just there because every driver should have them: */MODULE_PARM(options,    "1-" __MODULE_STRING(SK_MAX_CARD_PARAM) "i");MODULE_PARM(debug,      "i");#endif#ifdef LINK_SPEED_Astatic char *Speed_A[SK_MAX_CARD_PARAM] = LINK_SPEED_A;#elsestatic char *Speed_A[SK_MAX_CARD_PARAM] = {"", };#endif#ifdef LINK_SPEED_Bstatic char *Speed_B[SK_MAX_CARD_PARAM] = LINK_SPEED_B;#elsestatic char *Speed_B[SK_MAX_CARD_PARAM] = {"", };#endif#ifdef AUTO_NEG_Astatic char *AutoNeg_A[SK_MAX_CARD_PARAM] = AUTO_NEG_A;#elsestatic char *AutoNeg_A[SK_MAX_CARD_PARAM] = {"", };#endif#ifdef DUP_CAP_Astatic char *DupCap_A[SK_MAX_CARD_PARAM] = DUP_CAP_A;#elsestatic char *DupCap_A[SK_MAX_CARD_PARAM] = {"", };#endif#ifdef FLOW_CTRL_Astatic char *FlowCtrl_A[SK_MAX_CARD_PARAM] = FLOW_CTRL_A;#elsestatic char *FlowCtrl_A[SK_MAX_CARD_PARAM] = {"", };#endif

⌨️ 快捷键说明

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