亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sysln97xend.c

?? vxWorks下AMD973芯片的驅動源碼
?? C
字號:
/*
DESCRIPTION
This is the WRS-supplied configuration module for the VxWorks 
ln97xEnd (lnPci) END driver.  It performs the dynamic parameterization 
of the ln97xEnd driver.  This technique of 'just-in-time' 
parameterization allows driver parameter values to be declared 
as any other defined constants rather than as static strings. 
*/
 
/* includes */

#if (defined (INCLUDE_LN_97X_END) && defined (INCLUDE_NETWORK) \
     && defined (INCLUDE_END))

#include "vxWorks.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "end.h"
#include "config.h"

#include "i2c_export.h"
#include "sysI2C.h"

#include "ln97xEnd.h" 
#include "bsp8240.h"
 
/* defines */
  
/* AMD 7997x 10/100Base-TX Board type */
 
#define LN_TYPE_970             1 /* AMD 97c970 PCI Ethernet PCNet */
#define LN_TYPE_971             2 /* AMD 97c970 PCI Ethernet PCNet Fast */
#define LN_TYPE_972             3 /* AMD 97c970 PCI Ethernet PCNet Fast+ */
#define LN_TYPE_7990            4
 
#define LN97X_MAX_UNITS         8 /* number of board types */
 
/* LN970 driver user flags */
 
#define LN_USR_FLAGS_970        0
#define LN_USR_FLAGS_971        0
#define LN_USR_FLAGS_972        0
#define LN_USR_FLAGS_7990       0
 
/* PCI vendor/device Ids and rev mask */
 
#define LN97X_PCI_VENDOR_ID     0x1022  /* AMD */
#define LN97X_PCI_DEVICE_ID     0x2000  /* PCI device ID */
#define LN7990_PCI_DEVICE_ID    0x0000  /* PCI device ID */
#define LN970_PCI_REV_MASK      0x10    /* 79970 pci rev mask */
#define LN971_PCI_REV_MASK      0x20    /* 79971 pci rev mask */
#define LN972_PCI_REV_MASK      0x30    /* 79972 pci rev mask */
#define LN97X_CSR3_VALUE        CSR3_DXSUFLO /* 0        csr3 value */

#define  CSR3_DXSUFLO	0x0040      /* Disable Transmit Stop on Underflow */
 
/*
 * default values if PCI_CFG_TYPE defined to be PCI_CFG_FORCE
 * note: memory addresses must be aligned on MMU page boundaries
 */
 
#define LN97X_IO_ADR0           0xf400
#define LN97X_MEM_ADR0          0xfd000000
#define LN97X_INT_LVL0          0x04                    
#define LN97X_INT_VEC0          0x04                    
 
#define LN97X_IO_ADR1           0xf420
#define LN97X_MEM_ADR1          0xfd200000
#define LN97X_INT_LVL1          0x02
#define LN97X_INT_VEC1          0x02
 
#define LN97X_IO_ADR2           0xf440
#define LN97X_MEM_ADR2          0xfd300000
#define LN97X_INT_LVL2          0x01
#define LN97X_INT_VEC2          0x01
 
#define LN97X_IO_ADR3           0xf460
#define LN97X_MEM_ADR3          0xfd400000
#define LN97X_INT_LVL3          0x0
#define LN97X_INT_VEC3          0
 
#define LN97X_MAX_DEV           1
 
#define NET_END_USER_FLAGS      LN_USR_FLAGS_972
#define NET_ADAPTER_VENDOR_ID   LN97X_PCI_VENDOR_ID
#define NET_ADAPTER_DEVICE_ID   LN97X_PCI_DEVICE_ID
 
#define LN_97X_LOAD_FUNC        ln97xEndLoad
 
/* externs */

IMPORT END_OBJ* ln97xEndLoad (char *);

/* typedefs */
 
typedef struct ln97xPciRsrc             /* LN97X_PCI_RSRC */
    {
    UINT32      iobaseCsr;              /* Base Address Register 0 */
    UINT32      membaseCsr;             /* Base Address Register 1 */
    char        irq;                    /* Interrupt Request Level */
    UINT32      irqvec;                 /* Interrupt Request vector */
    UINT32      configType;             /* type of configuration */
    UINT32      boardType;              /* type of LAN board this unit is */
    UINT32      pciBus;                 /* PCI Bus number */
    UINT32      pciDevice;              /* PCI Device number */
    UINT32      pciFunc;                /* PCI Function number */
    } LN97X_PCI_RSRC;
 
typedef struct boardResource            /* LN97X_BRD_RSRC */
    {
    UINT32      type;                   /* type of the board */
    UINT32      vendorId;               /* Vendor ID */
    UINT32      deviceId;               /* Device ID */
    UINT32      lnUsrFlags;             /* LN driver user flags */
    FUNCPTR     mediaSelectFunc;        /* media select routine */
    } LN97X_BRD_RSRC;
 
/* locals */

LOCAL     int                 ln97XUnits = 0;
LOCAL     LN97X_PCI_RSRC *    pRsrc;          /* pointer board resources */
 
/*
 * This array defines the board-specific PCI resources, the base address
 * register configuration mode and the Ethernet adapter type. It's indexed
 * using the device number returned from pciFindDevice().
 */
 
LOCAL LN97X_PCI_RSRC ln97xPciRsrcs [LN97X_MAX_DEV] =
    {
    {LN97X_IO_ADR0, LN97X_MEM_ADR0, LN97X_INT_LVL0, LN97X_INT_VEC0,
          PCI_CFG_TYPE, LN_TYPE_970, 0, 0, 0}
    };
 
/*
 * This array defines board-specific vendor and device ids, flags to pass to
 * the drive load routine and the function used to select the media.
 */
 
LOCAL LN97X_BRD_RSRC ln97xBrdRsrc [LN97X_MAX_UNITS] =
    {
    {LN_TYPE_970, LN97X_PCI_VENDOR_ID, LN97X_PCI_DEVICE_ID, LN_USR_FLAGS_970, NULL}
    };

void findLan97xEnetInt(void);


/******************************************************************************
*
* sysLn97xEndLoad - load and create load string, for a ln97x (lnPci) device.
*
* This routine loads the lnPci device with initial parameters. 
*
* RETURNS: pointer to END object or ERROR.
*
* SEE ALSO: ln97xEndLoad()
*/
 
END_OBJ * sysLn97xEndLoad
    (
    char * pParamStr,   /* ptr to initialization parameter string */
    void * unused       /* unused optional argument */
    )
    {
    /*
     * The ln97xEnd driver END_LOAD_STRING should be:
     * <unit>:<devMemAddr>:<devIoAddr>:<pciMemBase:<vecNum>:<intLvl>:<memAdrs>:
     * <memSize>:<memWidth>:<csr3b>:<offset>:<flags>
     *
     * Note that ln97xEnd unit number is prepended in muxDevLoad, so we 
     * don't put it here!
     */

    char * cp; 			
    char paramStr [END_INIT_STR_MAX];   /* from end.h */
    END_OBJ * pEnd;
    static char ln97xParamTemplate[] = 
			"0x%x:0x%x:0x%x:%d:%d:-1:-1:-1:0x%x:%d:0x%x";

    if (strlen (pParamStr) == 0)
        {
        /* 
         * muxDevLoad() calls us twice.  If the string is
         * zero length, then this is the first time through
         * this routine, so we just return.
         */

        pEnd = ln97xEndLoad (pParamStr);
        }

    else
	{
        /*
         * On the second pass though here, we actually create 
         * the initialization parameter string on the fly.   
         * Note that we will be handed our unit number on the 
         * second pass through and we need to preserve that information.
         * So we use the unit number handed from the input string.
         */

        cp = strcpy (paramStr, pParamStr); /* cp points to paramStr */

        /* Now, we advance cp, by finding the end the string */

        cp += strlen (paramStr);
        
        /* finish off the initialization parameter string */


	sprintf (cp, ln97xParamTemplate, 
                     /* device memory Io base */
                     (UINT) PCI_MEMIO2LOCAL (pRsrc->membaseCsr), 
                     /* device Io base */
                     (UINT) PCI_IO2LOCAL (pRsrc->iobaseCsr), 
                     (UINT) PCI_SLV_MEM_LOCAL,         /* pciMemBase */
                     pRsrc->irqvec,             /* interrupt IRQ vector */
                     pRsrc->irq,                /* interrupt irq number */
                     LN97X_CSR3_VALUE,          /* csr3 register value */
                     0,                         /* offset */
                     NET_END_USER_FLAGS         /* flags */
                     );

        if ((pEnd = ln97xEndLoad (paramStr)) == (END_OBJ *)ERROR)
	    {
            printf ("Error: device failed ln97xEndLoad routine.\n");
	    }
	}

    return (pEnd);
    }

 
/*******************************************************************************
*
* sysLan97xPciInit - prepare LAN adapter for LN97X initialization
*
* This routine finds out the PCI device, maps its memory and IO address.
* It must be done prior to initializing the LN970, sysLn97XInit().  Also
* must be done prior to MMU initialization, usrMmuInit().
*
* RETURNS: OK/ERROR
*/
 
STATUS sysLan97xPciInit (void)
    {
    UINT32              membaseCsr;
    UINT32              iobaseCsr;
    int                 pciBus;
    int                 pciDevice;
    int                 pciFunc;
    int                 unit;
    int                 found = 0;

    /* for all the support lan devices find if some of them exist */
 
    for (unit = 0; unit < LN97X_MAX_UNITS; unit++)
        {
        if (pciFindDevice (ln97xBrdRsrc [unit].vendorId,
                           ln97xBrdRsrc [unit].deviceId,
                           unit, &pciBus, &pciDevice, &pciFunc) == OK)
            {
             /* board detected */
             /* for now, we're ignoring the possibility of duplicates */

             found = TRUE;
 
             /* load up the PCI device table */
 
             pRsrc = ln97xPciRsrcs + ln97XUnits; /* get the pci entry */
 
             pRsrc->pciBus    = pciBus;
             pRsrc->pciDevice = pciDevice;
             pRsrc->pciFunc   = pciFunc;
 
             ln97XUnits++;      /* number of units found */
             }
        }
 
    if ((found != TRUE) || (pciDevice > PCI_MAX_DEV))
        return (ERROR);
 
    /* Now initialize all the units we found */
 
    for (unit = 0; unit < ln97XUnits; unit++)
        {
        /* Fill in the resource entry */
 
        pRsrc = ln97xPciRsrcs + unit;
 
        if (pRsrc->configType == PCI_CFG_FORCE)
            {
            /* write the iobase, membase, and irq */
 
            pciConfigOutLong (pRsrc->pciBus, pRsrc->pciDevice, pRsrc->pciFunc,
                              PCI_CFG_BASE_ADDRESS_0, pRsrc->iobaseCsr |
                             PCI_BASE_IO);
            pciConfigOutLong (pRsrc->pciBus, pRsrc->pciDevice, pRsrc->pciFunc,
                              PCI_CFG_BASE_ADDRESS_1, pRsrc->membaseCsr);
           
            }
 
        /*
         * get memory base address and IO base address
         * Note: we read it in again, even if we just wrote it out because the
         * device can change what we wrote
         */
 
        pciConfigInLong (pRsrc->pciBus, pRsrc->pciDevice, pRsrc->pciFunc,
                         PCI_CFG_BASE_ADDRESS_0, &iobaseCsr);
        pciConfigInLong (pRsrc->pciBus, pRsrc->pciDevice, pRsrc->pciFunc,
                         PCI_CFG_BASE_ADDRESS_1, &membaseCsr);
      
        /*
         * mask off registers. IO base needs to be masked off because bit0
         * will always be set to 1
         */
 
        membaseCsr   &= PCI_MEMBASE_MASK;
        iobaseCsr    &= PCI_IOBASE_MASK;

        /* over write the resource table with values read */
 
        pRsrc->membaseCsr   = membaseCsr;
        pRsrc->iobaseCsr    = iobaseCsr;


        /******************************/
 
        /* enable mapped memory and IO addresses */
        /* AMD973's mem_map and the IO_map is not enable at the same time */    
        pciConfigOutWord (pRsrc->pciBus, pRsrc->pciDevice, pRsrc->pciFunc,
                          PCI_CFG_COMMAND, PCI_CMD_MEM_ENABLE | PCI_CMD_MASTER_ENABLE);
 
        /* disable sleep mode */
 
        pciConfigOutWord (pciBus, pciDevice, pciFunc, PCI_CFG_MODE,
                          SLEEP_MODE_DIS);
        }
 
    return (OK);
    }


/*******************************************************************************
*
* sysLan97xIntEnable - enable Lan97x interrupts
*
* This routine enables ln7997x interrupts.  This may involve operations on
* interrupt control hardware.
*
* RETURNS: OK or ERROR for invalid arguments.
*/
 
STATUS sysLan97xIntEnable
    (
    int level           /* level number */
    )
    {
    return (intEnable (level));
    }
 
/*******************************************************************************
*
* sysLan97xIntDisable - disable ln970 interrupts
*
* This routine disables ln970 interrupts.  This may involve operations on
* interrupt control hardware.
*
* RETURNS: OK or ERROR for invalid arguments.
*/
 
STATUS sysLan97xIntDisable
    (
    int level           /* level number */
    )
    {
    return (intDisable(level));
    }
 
/*******************************************************************************
*
* sysLan97xEnetAddrGet - get Ethernet address
*
* This routine provides a target-specific interface for accessing a
* device Ethernet address.
*
* -- Specific to 971 ldt
*
* RETURNS: OK or ERROR if could not be obtained.
*/
 
STATUS sysLan97xEnetAddrGet
    (
    LN_97X_DRV_CTRL *  pDrvCtrl,   /* Driver control */
    char *             enetAdrs
    )
    {
    UCHAR aprom [LN_97X_APROM_SIZE] = {0,1,2,3,4,5,6}; /* copy of address prom space */
    UCHAR eeprom [6] = {0,1,2,3,4,5};
    char *ioaddr;
    UCHAR ix;

     /* get IO address of unit */
    ioaddr = (char *)(pDrvCtrl->devAdrs);
 
    /* load aprom into an array */
     for (ix=0; ix<32; ix++)
    {
        aprom [ix] = sysInByte((ULONG)(ioaddr+ ix));   
    } 
 
    /* check for 'w's at end of list */
    if ((aprom [0xe] != 'W') || (aprom [0xf] != 'W'))
    {
        int retry;
        if (I2C_Initialize(CPU_I2C_ADDR, I2C_INT_DISABLE, NULL)==I2C_SUCCESS)
        {
            retry = 3;
            while (retry--)
            {
                if (I2C_do_transaction(I2C_INT_DISABLE, I2C_MASTER_RCV, 
                    I2C_MAIN_CPU_ADD, SYSI2C_BOARD_CONF+0x20, 
                    2, 6, aprom, I2C_STOP, 2, I2C_NO_RESTART)==I2C_SUCCESS) 
                {
                    bcopy (aprom, enetAdrs, 6);
                    return OK;
                }
            }
        }
        bcopy (eeprom, enetAdrs, 6);
    }
	else    
    	bcopy (aprom, enetAdrs, 6);
 
    return (OK);
    }

void findLan97xEnetInt(void)
{
	struct pciR26Device  *p;
	if (pciDeviceList != NULL)
	{
		p = pciDeviceList;
		while(p) 
		{
			if((p->pciBusNo == pRsrc->pciBus) && (p->pciDeviceNo == pRsrc->pciDevice) && (p->pciFunctionNo == pRsrc->pciFunc))
			{
				pRsrc->irq = p->iNum;
		        pRsrc->irqvec = p->iVec;
		        break;
			}
			else
			{
				p = p->next;
			}
		}
	}
}


#endif/* defined (INCLUDE_LN_97X_END) && defined (INCLUDE_NETWORK) */


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品一区二区| 欧美日韩在线播放| 在线免费观看一区| 欧美成人女星排行榜| 亚洲免费在线视频一区 二区| 日韩专区中文字幕一区二区| 成人免费电影视频| 日韩精品专区在线影院重磅| 亚洲一区在线视频观看| 成人午夜视频在线观看| 91精品综合久久久久久| 一区二区三区免费| 波多野结衣在线一区| 久久影院电视剧免费观看| 视频一区欧美精品| 欧美中文字幕一区二区三区| 亚洲欧美中日韩| 国产综合久久久久久鬼色 | 欧美一区二区黄| 综合色天天鬼久久鬼色| 国产69精品久久久久毛片| 日韩欧美国产三级电影视频| 香蕉成人啪国产精品视频综合网| 91美女精品福利| 亚洲欧洲成人av每日更新| 成人黄页在线观看| 国产精品天天看| 国产精品一区二区无线| 国产三级精品视频| 国产综合色产在线精品| 久久免费的精品国产v∧| 久久成人久久鬼色| 久久影院电视剧免费观看| 国产精品资源在线看| 亚洲国产精品精华液2区45| 高清国产一区二区| 国产精品你懂的| 9色porny自拍视频一区二区| 中文字幕在线不卡视频| 色婷婷综合久久久| 亚洲1区2区3区视频| 日韩一级大片在线| 国产精品系列在线观看| 欧美a一区二区| 国产成人av一区二区| 国产欧美精品一区二区色综合 | 午夜不卡av在线| 欧美区视频在线观看| 免费人成在线不卡| 久久久青草青青国产亚洲免观| 国产激情一区二区三区| 亚洲欧洲日韩一区二区三区| 在线精品视频免费观看| 石原莉奈在线亚洲二区| 久久这里只有精品视频网| www.欧美精品一二区| 亚洲午夜羞羞片| 久久一区二区视频| 99综合影院在线| 亚洲不卡在线观看| 亚洲精品一区二区三区在线观看| 成人国产免费视频| 午夜精品久久久久久久蜜桃app| 久久综合资源网| 色噜噜狠狠色综合欧洲selulu| 日本亚洲三级在线| 国产精品每日更新| 在线不卡免费欧美| 高清在线观看日韩| 午夜精品久久久久久久99樱桃 | 亚洲精品中文字幕乱码三区| 91黄色免费网站| 亚洲蜜臀av乱码久久精品蜜桃| 色久综合一二码| 久久精品久久精品| 一区二区三区成人在线视频| 最好看的中文字幕久久| 秋霞电影一区二区| www国产亚洲精品久久麻豆| 91在线视频观看| 国产在线一区观看| 亚洲成人av在线电影| 国产精品拍天天在线| 91精品啪在线观看国产60岁| 粉嫩嫩av羞羞动漫久久久| 日韩电影免费在线看| 自拍偷拍欧美激情| 久久久亚洲精品一区二区三区| 在线观看欧美精品| 成人av免费在线播放| 久久国产日韩欧美精品| 亚洲激情网站免费观看| 国产精品污网站| 日韩一区二区视频在线观看| 欧美性猛交xxxxxx富婆| 成人网页在线观看| 国产精品一二一区| 久久91精品国产91久久小草| 午夜视频在线观看一区| 亚洲午夜久久久| 久久久久国产精品麻豆| 国产91精品入口| 亚洲 欧美综合在线网络| 亚洲精品菠萝久久久久久久| 欧美国产国产综合| 久久综合久久99| 日韩欧美高清dvd碟片| 制服丝袜亚洲精品中文字幕| 欧美色图在线观看| 色妞www精品视频| 色哟哟在线观看一区二区三区| 白白色 亚洲乱淫| 不卡电影一区二区三区| 99re热这里只有精品免费视频| 国产成都精品91一区二区三| 懂色av一区二区夜夜嗨| 国产白丝精品91爽爽久久| 国产一区二区伦理片| 国产精品一区二区三区四区| 国产成都精品91一区二区三| 成人激情午夜影院| aa级大片欧美| 欧美视频一区在线观看| 欧美日韩小视频| 欧美videos大乳护士334| 久久免费视频一区| 欧美激情综合在线| 亚洲欧美日韩一区二区三区在线观看| 亚洲欧美日韩国产综合在线| 亚洲五码中文字幕| 另类小说欧美激情| 成人精品国产福利| 欧美色图天堂网| 日韩免费视频一区二区| 日本一区二区三区高清不卡| 欧美日韩中文国产| 欧美日韩大陆一区二区| 在线国产亚洲欧美| 亚洲在线观看免费视频| 国产精品九色蝌蚪自拍| 亚洲自拍欧美精品| 久久99热99| 99久久夜色精品国产网站| 一本到一区二区三区| 在线成人免费观看| 久久久久久免费网| 亚洲欧洲中文日韩久久av乱码| 日韩国产欧美在线观看| 国产 日韩 欧美大片| 欧美日韩国产首页| 国产婷婷精品av在线| 亚洲午夜影视影院在线观看| 极品少妇一区二区| 91麻豆国产福利在线观看| 日韩一区二区三区在线| 国产精品久久久久婷婷二区次| 亚洲高清在线视频| 高清久久久久久| 欧美一区二区三区电影| 最新日韩在线视频| 美女精品一区二区| aaa亚洲精品一二三区| 亚洲日本青草视频在线怡红院| 国产精品免费久久| 奇米888四色在线精品| 99re在线视频这里只有精品| 日韩欧美一二三区| 一区二区久久久| 丁香网亚洲国际| 日韩一区二区免费电影| 亚洲欧美日韩国产成人精品影院 | av一二三不卡影片| 欧美mv和日韩mv国产网站| 一区二区国产盗摄色噜噜| 国产乱对白刺激视频不卡| 欧美美女一区二区三区| 国产精品护士白丝一区av| 久99久精品视频免费观看| 精品视频一区二区三区免费| 国产精品美女久久久久久| 国产精品18久久久久久vr| 91精品国产综合久久精品app| 亚洲另类色综合网站| 成人免费高清视频在线观看| 久久综合色之久久综合| 美日韩一区二区| 欧美一区二区视频在线观看2020| 亚洲愉拍自拍另类高清精品| 色偷偷久久一区二区三区| 中文在线一区二区| 国内精品久久久久影院薰衣草| 日韩欧美亚洲另类制服综合在线| 亚洲成人手机在线| 欧美伦理视频网站| 亚洲午夜免费电影| 欧美日韩小视频| 视频一区二区三区中文字幕| 欧美日韩大陆一区二区| 午夜精品久久久久久久99水蜜桃| 欧美日韩国产影片|