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

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

?? smsci.c

?? dm642網絡傳輸程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
//--------------------------------------------------------------------------
// IP Stack
//--------------------------------------------------------------------------
// smsci.c
//
// SMSC Sample Packet Driver - ISR 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_cache.h>
#include "llpacket.h"
#include "smsc.h"

extern cregister volatile uint ICR;

//
// 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;

        // 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;

    // Go into allocation phase
    TxState = STATE_ALLOC_PEND;

    // Allocate a transmit buffer
    // Assume ALLOC_INT is already masked
    SMSC_WRITE16(SBA,SMSC_BANK_SELECT,2);

    // Make sure busy bit is low
    while( SMSC_READ16(SBA,SMSC_MMU_COMMAND) & BUSY_BIT );

    // Send the allocate command
    SMSC_WRITE16(SBA,SMSC_MMU_COMMAND,CMD_ALLOCATE_MEMORY);

    // Make sure busy bit is low
    while( SMSC_READ16(SBA,SMSC_MMU_COMMAND) & BUSY_BIT );

    // Check results. If packet has been allocated, we can fill
    // the TX FIFO and send now.
    tempbyte = SMSC_READ8(SBA,SMSC_ALLOC_RESULT);
    if( !(tempbyte & FAILED) )
    {
        // Send the packet (this function will free hFrag and set the
        // TxState back to IDLE). The value of "tempbyte" is the SMSC
        // packet number.
        smscSendPacket( tempbyte );
        goto tx_exit;
    }

    // If we get here, the allocation is pending and we remain in the
    // TX_STATE_ALLOC_PEND state. If called from an ISR, we just return
    // since the ISR will handle the INT mask stuff. If not in an ISR,
    // we need to enable the ALLOC_INT interrupt.
    if( IsrState == ISR_STATE_IDLE )
    {
        tempbyte = SMSC_READ8(SBA,SMSC_INT_MASK) | ALLOC_INT;
        SMSC_WRITE8(SBA,SMSC_INT_MASK,tempbyte);
    }

tx_exit:
    // (Potentially) re-enable SMSC device interrupts on the DSP
    gmEnableIER( mask );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品久久久久久久久久久| 欧美一区二区私人影院日本| 福利91精品一区二区三区| 蜜乳av一区二区| 久久99精品久久久久久国产越南| 日韩电影在线观看电影| 人人精品人人爱| 捆绑调教一区二区三区| 国产一区二区福利| 国产成人av一区| 成人av免费在线观看| 91麻豆福利精品推荐| 91蜜桃免费观看视频| 欧美在线|欧美| 欧美精品久久一区二区三区| 日韩午夜激情av| 久久久久高清精品| 国产精品天美传媒| 亚洲精选视频在线| 日韩中文字幕1| 久久99蜜桃精品| 成人免费视频一区| 91久久国产最好的精华液| 欧美日本一区二区三区四区| 日韩精品一区在线观看| 久久久国产午夜精品| 国产精品久久夜| 亚洲午夜在线视频| 久久成人免费日本黄色| 大白屁股一区二区视频| 欧美系列亚洲系列| 精品美女一区二区| 综合中文字幕亚洲| 日本在线不卡视频一二三区| 韩国精品久久久| 91一区二区在线观看| 欧美一区午夜视频在线观看| 国产婷婷一区二区| 樱花草国产18久久久久| 久久精品国产一区二区| 成人毛片在线观看| 91精品国产乱码久久蜜臀| www国产精品av| 夜夜精品视频一区二区| 精品写真视频在线观看| 91免费看片在线观看| 日韩欧美一区二区三区在线| 中文字幕亚洲区| 麻豆一区二区三| 91蜜桃视频在线| 精品va天堂亚洲国产| 亚洲一区二区三区四区在线观看 | 亚洲欧美日韩国产手机在线| 日韩av不卡一区二区| 成人av在线资源| 欧美一级日韩免费不卡| 最新中文字幕一区二区三区| 蜜桃久久久久久| 91浏览器在线视频| 26uuu精品一区二区在线观看| 1024精品合集| 国产精品18久久久久久久久久久久| 欧美性大战久久久久久久蜜臀 | 亚洲男人电影天堂| 久久国产婷婷国产香蕉| 91福利国产精品| 国产午夜精品理论片a级大结局| 亚洲成va人在线观看| av电影在线观看完整版一区二区| 日韩美女主播在线视频一区二区三区| 亚洲欧美国产77777| 国产成人一区二区精品非洲| 欧美精品 国产精品| 一区二区国产盗摄色噜噜| 粉嫩绯色av一区二区在线观看| 日韩一级免费一区| 午夜视频久久久久久| 91国模大尺度私拍在线视频| 国产精品丝袜91| 国产自产视频一区二区三区| 91精品国产欧美一区二区18 | 色老汉av一区二区三区| 中文字幕免费在线观看视频一区| 久久91精品久久久久久秒播| 欧美乱妇15p| 亚洲电影在线免费观看| 欧洲av在线精品| 亚洲日本va午夜在线影院| 成人性色生活片| 国产欧美日本一区二区三区| 国产在线精品国自产拍免费| 欧美成人aa大片| 蜜臀av性久久久久蜜臀aⅴ| 欧美日韩精品一区二区| 一区二区三区在线视频免费| 色综合久久中文字幕| 18成人在线观看| 91女人视频在线观看| 亚洲色图视频网| 91丨porny丨国产入口| 国产精品麻豆视频| av电影在线观看一区| 日韩久久一区二区| 91久久精品网| 午夜久久久久久久久久一区二区| 欧美性大战久久| 日韩精品一级二级 | 久久婷婷国产综合国色天香| 麻豆91精品视频| 精品欧美一区二区三区精品久久 | aaa亚洲精品一二三区| 综合激情成人伊人| 色狠狠av一区二区三区| 亚洲狠狠爱一区二区三区| 欧美日韩午夜精品| 日本三级韩国三级欧美三级| 日韩美女在线视频| 成人性生交大合| 亚洲视频网在线直播| 欧洲色大大久久| 日韩av电影免费观看高清完整版 | 亚洲综合色视频| 7777精品伊人久久久大香线蕉的| 日本不卡在线视频| 久久久久久久久久美女| www.欧美精品一二区| 一区二区三区**美女毛片| 色综合天天综合色综合av | 色综合久久88色综合天天免费| 亚洲精品免费在线| 91麻豆精品91久久久久久清纯| 激情综合网av| 亚洲天堂精品视频| 欧美欧美午夜aⅴ在线观看| 激情综合一区二区三区| 国产精品成人一区二区三区夜夜夜| 91麻豆自制传媒国产之光| 亚洲成年人网站在线观看| 欧美一级生活片| 成人免费高清在线| 亚洲成人你懂的| 国产视频不卡一区| 欧美色视频在线| 国产精品亚洲午夜一区二区三区 | 2欧美一区二区三区在线观看视频| 国产黄人亚洲片| 一区二区高清在线| 欧美精品一区二区久久久| 99v久久综合狠狠综合久久| 视频精品一区二区| 亚洲午夜精品网| www国产精品av| 欧美午夜电影网| 国产精品888| 丝袜美腿一区二区三区| 中文字幕欧美激情| 欧美一区二区三区视频在线 | 91 com成人网| 成人av网站免费| 久久激情五月激情| 一区二区三区产品免费精品久久75| 精品理论电影在线观看| 欧美亚一区二区| 国产成人精品免费一区二区| 亚洲国产乱码最新视频| 国产精品免费aⅴ片在线观看| 欧美精品在线观看播放| 99久免费精品视频在线观看| 久久国产乱子精品免费女| 一区二区在线观看视频在线观看| 久久久99精品免费观看不卡| 欧美丰满少妇xxxxx高潮对白| 91视频91自| 国产成人8x视频一区二区| 男女性色大片免费观看一区二区 | 色av一区二区| 风流少妇一区二区| 久久丁香综合五月国产三级网站| 亚洲第一福利视频在线| 国产精品国产精品国产专区不蜜| 欧美成人精品1314www| 欧美色综合天天久久综合精品| 成人高清免费观看| 国产夫妻精品视频| 国产一区二区美女诱惑| 日本在线不卡一区| 亚洲国产综合视频在线观看| 中文字幕日韩av资源站| 久久久久国色av免费看影院| 精品日韩av一区二区| 日韩午夜激情av| 欧美一区二区三区人| 欧美日韩成人综合天天影院| 91国偷自产一区二区使用方法| eeuss鲁片一区二区三区在线观看| 国产一区二区三区电影在线观看| 久久国产精品99精品国产| 男男gaygay亚洲| 日韩av在线发布| 蜜臀av性久久久久av蜜臀妖精|