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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smsce.c

?? dm642網(wǎng)絡(luò)傳輸程序
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
//--------------------------------------------------------------------------
// IP Stack
//--------------------------------------------------------------------------
// smsce.c
//
// SMSC Sample Packet Driver - EMDA Version
//
// Author: Michael A. Denio
//         Andre Schnarrenberger
// Copyright 2002, 2003 by Texas Instruments Inc.
//-------------------------------------------------------------------------
#include <std.h>
#include <sys.h>
#include <sem.h>
#include <hwi.h>
#include <c62.h>
#include <assert.h>
#include <stkmain.h>
#include <csl.h>
#include <csl_edma.h>
#include <csl_cache.h>
#include "llpacket.h"
#include "smsc.h"

extern cregister volatile uint ICR;

//
// Static slots to hold our EDMA handle, event value, and
// TX and RX option register settings.
//
static EDMA_Handle hEDMA;
static int         EdmaEvent;
static UINT32      EdmaOptTx;
static UINT32      EdmaOptRx;

//
// Declare our local functions
//
static void smscReset();
static void smscStart();
static void smscStop();
static void smscIsr(UINT32);
static void smscSendPacket( UINT8 smscPacketNumber );
static uint smscReceivePacket();
static void smscWritePHY( uint reg_addr, uint data );
static uint smscReadPHY( uint reg_addr );
static void mdioWriteBit(uint bit);
static uint mdioReadBit();

// Local instance information pointer for our single device instance
static PDINFO *pPDI = 0;

// Simple Tx and Rx statistics
uint RxGood=0, RxOver=0, TxGood=0, TxBad=0, IntSave=0;
uint FlashActiveLED = 0;

// SMSC Init State
static uint     InitState = 0;

// SMSC Interrupt State
#define ISR_STATE_IDLE      0
#define ISR_STATE_ACTIVE    1
static uint     IsrState = ISR_STATE_IDLE;

//
// Current TX and RX state
//
#define STATE_IDLE          0
#define STATE_ALLOC_PEND    1
#define STATE_DMA           2
#define STATE_SEND          3
static volatile uint   TxState = STATE_IDLE;
static volatile uint   RxState = STATE_IDLE;

// Remember these for TX
static PBM_Handle   tx_hPkt;
static UINT8        *tx_pBuffer;
static uint         tx_Size;
static uint         tx_Offset;

// Trasnmit Control Setting
static UINT16       TransmitControl;

//--------------------------------------------------------------------
// imanSetExtPolarity()
//
// This function is used to set the interrupt detection
// polarity for the interrupts gernerated by GMAC
//--------------------------------------------------------------------
static void imanSetExtPolarity( int extintno, int polarity )
{
    if( polarity==EXTINT_POLARITY_LOWHIGH )
        *(volatile unsigned int*)0x19c0008 &= ~(1<<(extintno-4));
    else if( polarity==EXTINT_POLARITY_HIGHLOW )
        *(volatile unsigned int*)0x19c0008 |= (1<<(extintno-4));
}

//--------------------------------------------------------------------
// Delay()
//
// Simple delay function
// Here 't' is roughly in units of 420nS
//--------------------------------------------------------------------
static void Delay(unsigned int t)
{
    volatile unsigned int i;
    t = (t * HW_CLOCKRATE) / 32;
    for( i=0; i<t; i++ );
}

//--------------------------------------------------------------------
// HwPktInit()
//
// Initialize Device environment and return instance count
//--------------------------------------------------------------------
uint HwPktInit()
{
    //
    // Note: This code supports only a single instance of the device
    //       Otherwise, we would do device detection here.
    //
    return(1);
}

//--------------------------------------------------------------------
// HwPktShutdown()
//
// Shutdown Device Environment
//--------------------------------------------------------------------
void HwPktShutdown()
{
}

//--------------------------------------------------------------------
// HwPktOpen()
//
// Open Device Instance
//--------------------------------------------------------------------
uint HwPktOpen( PDINFO *pi )
{
    HWI_Attrs   hwiattr;
    uint        i;

    // We only have one device, so store off the PDINFO pointer as
    // global to this module. Otherwise; we'd pick an unclaimed device
    // and associate it with the PDINFO.

    // Make sure our int is disabled
    gmDisableIER( HW_IFLAG );

    // Setup ISR state
    IsrState = ISR_STATE_IDLE;

    // Use the new PDINFO
    pPDI = pi;

    // Setup loopback mode (for testing)
    if( !pi->hEther )
        TransmitControl = TXENA|FDUPLX|EPHLOOP;
    else
        TransmitControl = TXENA|FDUPLX;

    if( InitState )
    {
        // Clear any pending CPU int
        ICR = HW_IFLAG;

        // Reset
        smscReset();
    }
    else
    {
        InitState = 1;

        //
        // In order to remain compatible with CSL, we will allocate
        // our DMA channels and completion events.
        //

        //
        // First, we must be able to get EDMA channel
        //
        hEDMA = EDMA_open( SMSC_EDMA_CHANNEL_NUMBER, EDMA_OPEN_RESET );
        if( hEDMA == EDMA_HINV )
            return(0);

        // We don't use hardware initiated EDMA
        EDMA_disableChannel( hEDMA );

        //
        // Next, allocate the completion events. We'll try for the same
        // event as the EDMA channel we selected.
        //
        if( (EdmaEvent = EDMA_intAlloc(SMSC_EDMA_CHANNEL_NUMBER)) < 0 )
            EdmaEvent = EDMA_intAlloc(-1);
        if( EdmaEvent<0 )
            return(0);

#if (!C64_SUPPORT)
        EdmaOptTx = EDMA_OPT_RMK( EDMA_OPT_PRI_HIGH,
                                  EDMA_OPT_ESIZE_32BIT,
                                  EDMA_OPT_2DS_NO,
                                  EDMA_OPT_SUM_INC,
                                  EDMA_OPT_2DD_NO,
                                  EDMA_OPT_DUM_NONE,
                                  EDMA_OPT_TCINT_YES,
                                  EdmaEvent,
                                  EDMA_OPT_LINK_NO,
                                  EDMA_OPT_FS_YES );

        EdmaOptRx = EDMA_OPT_RMK( EDMA_OPT_PRI_HIGH,
                                  EDMA_OPT_ESIZE_32BIT,
                                  EDMA_OPT_2DS_NO,
                                  EDMA_OPT_SUM_NONE,
                                  EDMA_OPT_2DD_NO,
                                  EDMA_OPT_DUM_INC,
                                  EDMA_OPT_TCINT_YES,
                                  EdmaEvent,
                                  EDMA_OPT_LINK_NO,
                                  EDMA_OPT_FS_YES );
#endif

#if (C64_SUPPORT)
        EdmaOptTx = EDMA_OPT_RMK( EDMA_OPT_PRI_HIGH,
                                  EDMA_OPT_ESIZE_32BIT,
                                  EDMA_OPT_2DS_NO,
                                  EDMA_OPT_SUM_INC,
                                  EDMA_OPT_2DD_NO,
                                  EDMA_OPT_DUM_NONE,
                                  EDMA_OPT_TCINT_YES,
                                  (EdmaEvent&0xf),
                                  (EdmaEvent>>4),
                                  EDMA_OPT_ATCINT_NO,
                                  0,
                                  EDMA_OPT_PDTS_DISABLE,
                                  EDMA_OPT_PDTD_DISABLE,
                                  EDMA_OPT_LINK_NO,
                                  EDMA_OPT_FS_YES );

        EdmaOptRx = EDMA_OPT_RMK( EDMA_OPT_PRI_HIGH,
                                  EDMA_OPT_ESIZE_32BIT,
                                  EDMA_OPT_2DS_NO,
                                  EDMA_OPT_SUM_NONE,
                                  EDMA_OPT_2DD_NO,
                                  EDMA_OPT_DUM_INC,
                                  EDMA_OPT_TCINT_YES,
                                  (EdmaEvent&0xf),
                                  (EdmaEvent>>4),
                                  EDMA_OPT_ATCINT_NO,
                                  0,
                                  EDMA_OPT_PDTS_DISABLE,
                                  EDMA_OPT_PDTD_DISABLE,
                                  EDMA_OPT_LINK_NO,
                                  EDMA_OPT_FS_YES );
#endif

        // Setup some EDMA fields that don't change
        EDMA_RSETH(hEDMA,IDX,0);
        EDMA_RSETH(hEDMA,RLD,0);

        // Init the CE space
        *HW_CE_REG = HW_CE_VALUE;

        // Hook device interrupt
        hwiattr.intrMask = HW_IFLAG;
        hwiattr.ccMask   = 1;
        hwiattr.arg      = 1;
        HWI_dispatchPlug( HW_IVAL, (Fxn)smscIsr, -1, &hwiattr );
        CACHE_invalidate( CACHE_L1PALL, 0, 0 );

        // Enable interrupt and configure interrupt
        imanSetExtPolarity( HW_IVAL, SMSC_EXTINT_POLARITY );

        // Clear any pending CPU int
        ICR = HW_IFLAG;

        // Reset
        smscReset();

#if !SMSC_EEPROM_INSTALLED
        // Write our MAC address (no EEPROM on this board!)
        SMSC_WRITE16(SBA,SMSC_BANK_SELECT,1);
        for(i=0; i<6; i++ )
            SMSC_WRITE8(SBA,SMSC_IAR0+i,pPDI->bMacAddr[i]);
#endif
    }

    // Read our MAC address
    SMSC_WRITE16(SBA,SMSC_BANK_SELECT,1);
    for(i=0; i<6; i++ )
        pPDI->bMacAddr[i] = SMSC_READ8(SBA,SMSC_IAR0+i);

    // Start
    smscStart();

    // Enable our interrupt
    C62_enableIER( HW_IFLAG );

    return(1);
}

//--------------------------------------------------------------------
// HwPktClose()
//
// Close Device Instance
//--------------------------------------------------------------------
void HwPktClose( PDINFO *pi )
{
    (void)pi;

    // Make sure our int is disabled
    gmDisableIER( HW_IFLAG );

    // Normally we'd shut off the part, but here we'll only
    // stop it. This is because it can't handle a soft reset.
    smscStop();
}

//--------------------------------------------------------------------
// smscHashIndex()
//
// Calculate the Hash table index for one 6 byte address
//--------------------------------------------------------------------
#define POLY32 0x04c11db7
static unsigned int smscHashIndex( UINT8 *Address )
{
    unsigned int    Crc = 0xffffffff;
    unsigned int    Msb;
    unsigned char   Byte;
    int             ByteLen, Bit;

    for( ByteLen=0; ByteLen<6; ByteLen++ )
    {
        Byte = *Address++;
        for (Bit=0; Bit<8 ; Bit++)
        {
            Msb = Crc >> 31;
            Crc <<= 1;
            if( (Msb ^ (Byte>>Bit)) & 1 )
                Crc ^= POLY32;
        }
    }
    return( Crc>>26 );
}

//--------------------------------------------------------------------
// HwPktSetRx()
//
// Update Rx Mode (Rx filter and multicast hash table)
//--------------------------------------------------------------------
void HwPktSetRx( PDINFO *pi )
{
    UINT8  multicast[8];
    UINT16 control;
    uint   i,idx;
    uint   mask;

    // Make sure our int is disabled
    mask = gmDisableIER( HW_IFLAG );

    //
    // Setup Multicast Table
    //

    // Clear all multicast bits to zero
    for(i=0; i<8; i++)
        multicast[i]=0;

    // For all multicast addresses, set one corresponding bit
    for( i=0; i<pi->MCastCnt; i++ )
    {
        // Get hash bit (0 to 63)
        idx = smscHashIndex( &(pi->bMCast[6*i]) );

        // Set hash bit in hash talble
        // regOffset = idx/8, and regBit = idx%8
        // Bank3, offset "regOffset" |= 1<<regBit
        multicast[idx/8] |= 1 << (idx%8);
    }

    SMSC_WRITE16(SBA,SMSC_BANK_SELECT,3);
    for( i=0; i<8; i++ )
        SMSC_WRITE8(SBA,SMSC_MULTICAST_TABLE+i,multicast[i]);

    //
    // Setup the Rx Filter
    //
    SMSC_WRITE16(SBA,SMSC_BANK_SELECT,0);
    control = SMSC_READ16(SBA,SMSC_RECEIVE_CONTROL) & ~(ALMUL|PRMS);
    switch( pi->Filter )
    {
    case ETH_PKTFLT_NOTHING:
    case ETH_PKTFLT_DIRECT:
    case ETH_PKTFLT_BROADCAST:
    case ETH_PKTFLT_MULTICAST:
        break;

    case ETH_PKTFLT_ALLMULTICAST:
        control |= ALMUL;
        break;

    case ETH_PKTFLT_ALL:
        control |= PRMS;
        break;
    }
    control = SMSC_WRITE16( SBA, SMSC_RECEIVE_CONTROL, control );

    // Reenable our isr (if it was enabled)
    gmEnableIER( mask );
}


//--------------------------------------------------------------------
// HwPktTxNext()
//
// Transmit Next Packet on Tx Queue
//--------------------------------------------------------------------
void HwPktTxNext( PDINFO *pi )
{
    uint   mask;
    UINT8  tempbyte;

    // Make sure our int is disabled
    mask = gmDisableIER( HW_IFLAG );

    // Make sure another call didn't sneak in
    if( TxState != STATE_IDLE )
    {
        gmEnableIER( mask );
        return;
    }

    // Make sure we have a packet to send
    if( !(tx_hPkt = PBMQ_deq(&pi->PBMQ_tx)) )
    {
        pi->TxFree = 1;
        gmEnableIER( mask );
        return;
    }

    // Fill in the pending record
    tx_pBuffer = PBM_getDataBuffer(tx_hPkt);
    tx_Size    = PBM_getValidLen(tx_hPkt);
    tx_Offset  = PBM_getDataOffset(tx_hPkt);

    // Mark as "not free" and set TX state
    pi->TxFree = 0;

    // Clean the cache for external addesses
    if( (UINT32)tx_pBuffer & 0x80000000 )
        OEMCacheClean( (void *)(tx_pBuffer+tx_Offset), tx_Size );

    // Go into allocation phase

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道综合伊人精品热热| 欧美少妇一区二区| 一本到不卡免费一区二区| 日韩三级免费观看| 亚洲三级在线免费| 精品一区二区在线免费观看| 欧美在线视频你懂得| 国产女主播视频一区二区| 日韩中文字幕91| 色婷婷综合五月| 亚洲国产经典视频| 激情欧美日韩一区二区| 欧美日韩亚洲综合| 亚洲日本一区二区| 国产不卡高清在线观看视频| 日韩一区二区在线观看| 亚洲国产成人高清精品| 色呦呦日韩精品| 国产欧美日韩精品在线| 狠狠色综合色综合网络| 日韩一级黄色片| 日本v片在线高清不卡在线观看| 91丨porny丨最新| 国产精品色哟哟| 成人综合在线观看| 欧美激情一区在线观看| 国产一区二区h| 精品国产在天天线2019| 蜜臀久久久久久久| 7799精品视频| 亚洲成人黄色影院| 欧美人体做爰大胆视频| 亚洲激情成人在线| 欧美中文字幕一区二区三区亚洲| 亚洲天堂a在线| 日本丶国产丶欧美色综合| 国产精品久久久久9999吃药| 成人18精品视频| 亚洲欧美在线视频观看| 99久久精品免费看国产免费软件| 国产精品第五页| 色88888久久久久久影院野外| 尤物av一区二区| 在线视频欧美精品| 亚洲成人自拍一区| 日韩欧美www| 国产综合久久久久久鬼色| 久久久综合九色合综国产精品| 韩国v欧美v日本v亚洲v| 国产女人18水真多18精品一级做| 粉嫩一区二区三区在线看| 国产精品国产三级国产a| 99riav久久精品riav| 亚洲一区二区精品久久av| 欧美一区二区三区不卡| 国产麻豆视频一区二区| 亚洲美女区一区| 91精品国产欧美一区二区18| 精品在线你懂的| 中文乱码免费一区二区| 91香蕉视频mp4| 免费成人av资源网| 国产精品天天摸av网| 欧美在线视频全部完| 精品一区二区三区免费视频| 久久久影视传媒| 欧美影院一区二区| 国产一区免费电影| 中文字幕日韩av资源站| 欧美一区二区网站| 国产成人精品一区二区三区四区| 亚洲久草在线视频| 欧美不卡一区二区| 91九色最新地址| 国产精品 日产精品 欧美精品| 亚洲欧美成aⅴ人在线观看| 欧美一卡二卡在线观看| 色婷婷亚洲一区二区三区| 久久国产尿小便嘘嘘尿| 亚洲精品日韩一| 久久久精品2019中文字幕之3| 欧美中文字幕一二三区视频| 国产毛片精品视频| 午夜精品视频在线观看| 亚洲欧洲精品天堂一级| 精品国产一区二区三区忘忧草| 色狠狠av一区二区三区| 国产白丝网站精品污在线入口| 日韩精品91亚洲二区在线观看 | 99综合电影在线视频| 五月激情综合色| 一区二区三区中文字幕| 26uuu亚洲| 欧美高清视频一二三区| 91在线看国产| 成人激情动漫在线观看| 激情另类小说区图片区视频区| 亚洲国产另类精品专区| 综合激情成人伊人| 久久久亚洲精品一区二区三区| 制服丝袜中文字幕一区| 在线观看不卡一区| 97久久精品人人做人人爽50路| 国产激情视频一区二区在线观看 | 91精品国产综合久久久久久漫画 | av影院午夜一区| 成人黄色网址在线观看| 国产精品一区2区| 久久99精品视频| 久久国产人妖系列| 久久国产精品99久久人人澡| 日本最新不卡在线| 蜜桃视频在线一区| 日韩av电影天堂| 麻豆国产91在线播放| 日本成人中文字幕| 另类成人小视频在线| 裸体歌舞表演一区二区| 精品午夜久久福利影院| 精品制服美女丁香| 国产精品夜夜嗨| 国产成人aaa| 国产成人精品在线看| 成人91在线观看| 日本黄色一区二区| 欧美猛男gaygay网站| 91精品国产福利| 日韩女优制服丝袜电影| 精品久久一区二区| 国产丝袜在线精品| 亚洲天堂福利av| 午夜a成v人精品| 激情五月播播久久久精品| 国产在线观看一区二区| 国产成人一区在线| 99久久婷婷国产综合精品| 日本丶国产丶欧美色综合| 7878成人国产在线观看| 精品国产凹凸成av人导航| 国产嫩草影院久久久久| 一二三区精品福利视频| 五月婷婷久久综合| 精品综合免费视频观看| 成人av网站在线| 欧美群妇大交群中文字幕| 欧美一区二视频| 国产片一区二区| 亚洲第一二三四区| 国产乱码字幕精品高清av| 91久久人澡人人添人人爽欧美| 欧美一级搡bbbb搡bbbb| 国产亚洲综合色| 午夜日韩在线观看| 国产成人av一区二区三区在线观看| 色悠悠久久综合| 精品福利一区二区三区| 亚洲人妖av一区二区| 美女一区二区三区在线观看| 不卡av免费在线观看| 欧美一级日韩免费不卡| 亚洲天堂网中文字| 极品少妇xxxx精品少妇| 欧美性色综合网| 国产肉丝袜一区二区| 日韩av二区在线播放| 一本色道久久综合亚洲91| 精品美女在线播放| 亚洲国产乱码最新视频| 波多野结衣中文一区| 日韩一卡二卡三卡| 亚洲精品国产无天堂网2021 | 亚洲chinese男男1069| 国产福利91精品| 欧美一三区三区四区免费在线看| 中文字幕巨乱亚洲| 青青草国产成人99久久| 欧美视频一区二区三区四区| 国产欧美日韩久久| 久久精品国产一区二区三区免费看| 91丨九色丨黑人外教| 国产人成亚洲第一网站在线播放| 日韩中文字幕1| 在线观看亚洲a| 亚洲欧美视频一区| 成人h精品动漫一区二区三区| 日韩亚洲欧美在线观看| 午夜电影一区二区| 在线欧美小视频| 亚洲欧美成人一区二区三区| 成人性生交大片免费看中文网站| 精品日韩av一区二区| 免费一级片91| 欧美巨大另类极品videosbest| 亚洲欧美日韩国产手机在线| 成人免费黄色在线| 欧美韩日一区二区三区| 国产成人综合自拍| 国产欧美日韩亚州综合| 国产成人免费视| 日本一二三四高清不卡|