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

📄 sysnet.c

📁 cpc-1631的BSP包for VxWorks操作系统
💻 C
字号:
/* sysNet.c - template system network initialization */

/* Copyright 1984-1999 Wind River Systems, Inc. */

/*
modification history
--------------------
01a,01apr99,jkf  written.
*/

/*

DESCRIPTION

This library contains board-specific routines for network subsystems.

*/

#if defined (INCLUDE_NETWORK)

/* includes */

#include "vxLib.h"
#include "config.h"
#include "taskLib.h"

 
/******************************************************************************
*
* sysNetHwInit - initialize the network interface
*
* This routine initializes the network hardware to a quiescent state.  It
* does not connect interrupts.
*
* Only polled mode operation is possible after calling this routine.
* Interrupt mode operation is possible after the memory system has been
* initialized and sysNetHwInit2() has been called.
*/

void sysNetHwInit (void)
    {
    }


/******************************************************************************
*
* sysNetHwInit2 - initialize additional features of the network interface
*
* This routine completes initialization needed for interrupt mode operation
* of the network device drivers.  Interrupt handlers can be connected.
* Interrupt or DMA operations can begin.
*/

void sysNetHwInit2 (void)
    {
#ifdef INCLUDE_END

#if  defined (INCLUDE_DC_END) 
    sysDec21x40PciInit();		/* DEC 21x40 device */
#endif /* INCLUDE_DC_END */

#if defined (INCLUDE_FEI_END)	
    sys557PciInit();			 /* Intel FEI 8255x device */
#endif /* INCLUDE_FEI_END */

#if defined (INCLUDE_LN_97X_END)
    sysLan97xPciInit ();		/* AMD PCNet-FAST 79X97x device */
#endif /* INCLUDE_LN_97X_END */

#ifdef INCLUDE_EL_3C90X_END
   sysEl3c90xPciInit ();		/* 3COM 3C90x device */
#endif /* INCLUDE_LN_97X_END */

#endif /* INCLUDE_END */
    }

#endif /* INCLUDE_NETWORK */


/******************************************************************************
*
* sysLanIntEnable - enable the LAN interrupt
*
* This routine enables interrupts at a specified level 
*
* RETURNS: OK, or ERROR if network support not included.
*
* SEE ALSO: sysLanIntDisable()
*/

STATUS sysLanIntEnable
    (
    int intLevel 		/* interrupt level to enable */
    )
    {
    /* 
     *  enable the ISA IRQ for LAN
     */
#if defined (INCLUDE_NETWORK)
    intEnable (intLevel);
    return (OK);
#else
    return (ERROR);
#endif
    }


/******************************************************************************
*
* sysLanIntDisable - disable the LAN interrupt
*
* This routine disables interrupts for the on-board LAN chip. 
*
* RETURNS: return of intDisable, or ERROR if network support not included.
*
* SEE ALSO: sysLanIntEnable()
*/

STATUS sysLanIntDisable
    (
    int intLevel 		/* interrupt level to enable */
    )
    {
#if defined (INCLUDE_NETWORK)
    return (intDisable (intLevel));
#else
    return (ERROR);
#endif
    }


/* DC netif driver specific code */

#if defined (INCLUDE_DC_NETIF) && defined (INCLUDE_NETWORK) 

/* DEC defines */

#define ADAPTER_VENDOR_ID DEC21X4X_PCI_VENDOR_ID  
#define ADAPTER_DEVICE_ID DEC21140_PCI_DEVICE_ID  
#define ADAPTER_INSTANCE  0

/* DEC Ethernet */

#define DEC21X4X_PCI_VENDOR_ID  0x1011  /* PCI vendor ID */
#define DEC21143_PCI_DEVICE_ID  0x0019  /* PCI device ID */
#define DEC21140_PCI_DEVICE_ID  0x0009  /* PCI device ID */
#define DEC21040_PCI_DEVICE_ID  0x0002  /* PCI device ID */


/*****************************************************************************
*
* sysDynDcAttach - Dynamically attach DEC ethernet driver
*
* This function dynamically attaches the network driver to the actual PCI
* network hardware via a 'dcattach()' function call.  It works in
* conjunction with the two macros: NETIF_USR_DECL and NETIF_USR_ENTRIES
* defined in "config.h".  The presence of these two macros causes
* usrNetIfAttach() to call this function 'sysDynDcAttach()' directly
* instead of calling 'dcattach()' directly.  This function dynamically
* determines the CPU memory address, interrupt vector and interrupt
* level parameters (associated with the dummy arguments: dummmyDevAdrs,
* dummyIvec, dummyIlevel) by using information read from the already
* configured PCI configuration header for this device.  The "unit"
* argument is used to discern between primary ethernet (unit == 0) and
* secondary ethernet (unit == 1).  
*
* RETURNS: OK if dcattach() succeeds, ERROR if PCI header not found or
* if dcattach() fails.
*/

STATUS sysDynDcAttach
    (
    int         unit,           /* unit number */
    ULONG       dummmyDevAdrs,  /* LANCE I/O address (dummy) */
    int         dummyIvec,      /* interrupt vector (dummy) */
    int         dummyIlevel,    /* interrupt level (dummy) */
    char *      memAdrs,        /* address of memory pool (-1 = malloc it) */
    ULONG       memSize,        /* only used if memory pool is NOT malloc'd */
    int         memWidth,       /* byte-width of data (-1 = any width) */
    ULONG       pciMemBase,     /* main memory base as seen from PCI bus */
    int         dcOpMode        /* mode of operation */
    )
    {
    IMPORT int dcattach ();

    int pciBus;
    int pciDevice;
    int pciFunc;
    int status = ERROR;

    int ivec, ilevel;

    UINT32 memBaseCsr;
    UINT8 intLine;
    UINT32 cpuPciAddr;

    /* find the device */

    if (pciFindDevice ( (int)ADAPTER_VENDOR_ID,
			(int)ADAPTER_DEVICE_ID,
		        (int)ADAPTER_INSTANCE,
			&pciBus, &pciDevice, &pciFunc ) == OK)
	{

	/*
	 * get the base address - for the Digital 21x40 the first BAR is
	 * IO, second is memory.
	 */

	pciConfigInLong ( pciBus, pciDevice, pciFunc,
			  PCI_CFG_BASE_ADDRESS_1, &memBaseCsr);

	cpuPciAddr = PCI_MEMIO2LOCAL (memBaseCsr & PCI_MEMBASE_MASK);
	
	pciConfigInByte ( pciBus, pciDevice, pciFunc,
			  PCI_CFG_DEV_INT_LINE, &intLine);

	ivec = (int)(intLine + INT_VEC_IRQ0 + EXT_INTERRUPT_BASE);
	ilevel = (int)(intLine + EXT_INTERRUPT_BASE);
				
		
        /* Do the dcattach() with the dynamiclly computed arguments. */

        status = dcattach(0,cpuPciAddr , ivec, ilevel, memAdrs, memSize,
                          memWidth, 0, dcOpMode);
	}
    return(status);
    }

#endif /* INCLUDE_DC_NETIF && INCLUDE_NETWORK */

⌨️ 快捷键说明

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