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

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

?? netdrv.cpp

?? coldfire5206芯片平臺的自撿程序
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/*
FileName:	 netdrv.cpp
Description: In this c file, all the routines used in net driver is provided.
Version:     v1.0

Function List:

History:
	<author>           <time>                <desc>
 	Ason               2001.5				establish this file
*/



//#include "nucleus.h"
#include "bastype.h"
#include <string.h>
#include "test.h"
#include "netdrv.h"

#define  SETTOPAGE0    tempc = inportb(CRADD); \
                       tempc &= 0x3f;  \
                       outportb(CRADD,tempc);

#define  SETTOPAGE1    tempc = inportb(CRADD); \
                       tempc &= 0x3f;  \
                       tempc |= 0x40;  \
                       outportb(CRADD,tempc);

#define  ABORTDMA      tempc = inportb(CRADD); \
                       tempc |= 0x20;  \
                       outportb(CRADD,tempc);

#define  STARTCNTLR    outportb(CRADD,0x22);

#define  STARTTRANSMIT outportb(CRADD,0x26);  


// Make MII output 3-state
#define MIIOUT3STATE   outportb( MIIEEPROMADD, MII_WRITE_TS );   \
                       outportb( MIIEEPROMADD, MII_WRITE_TS |MII_CLK );

// reserved bits mask for MII registers.
// bit 1 means mask. all those bits in MII register are 
// reserved from access.
static const UINT16 PhyRegsReservedBitsMasks[] = 
{
  0x007F,                    // Control reg reserved bits mask
  0x07C0,                    // Status reg reserved bits
  0,                         // PhyID reserved bits mask
  0,                         // PhyID reserved bits mask
  0x1C00,                    // Nway Local ability reserved bits mask
  0x1C00,                    // Nway Partner ability reserved bits mask
  0xFFE0,                    // Nway Expansion
  0,0,0,0,0,0,0,0,0,0,0,0,0, // Other regs
  0,0,0,0,0,0,0,0,0,0,0,0    // Other regs
};


UCHAR TcrSaver = 0x20;       // TCR saver, must half duplex to make it 
                             // comply with 802.3
UCHAR ImrSaver = 0x3f;       // this is only used in transmiting packets.

STSTMAC  MacState;           // statistics about MAC layer.

static UINT16  ReceiveIntHappen = 0;
static UINT16  TransmitHappen = 0;
static UINT16  BufShortHappen = 0;
static UCHAR SndLoopBuf[256];  // for loop test only.
static UCHAR RcvLoopBuf[RECEIVE_BUF_SIZE]; // for loop test and for buffer shortage.

//struct pqueue_hdr Recv_List;

CHAR    ReadPage;
CHAR    WritePage;
CHAR    PacketDelivered;

INT16 ReceiveAPacket(UCHAR*, UCHAR *, UINT16 *);

void NetCtlrHisr(void);
extern struct transq_hdr trans_list;
void RecoverFromBufShortage(void);

// these should be solved.
// used in tcp/ip stack, but must be defined in other file.
/*
short Not_Connect = 0;
short Not_Connect_State = -1;
short Not_Connect_PortIdx = -1;
short Close_Mode = 0;
short Close_Times = 0;
unsigned long Back_Ack = 0;
unsigned long Send_Ack = 0;
*/

/* 
Name:           outportb
Description:    Send a byte out to certain port.
Parameters:     add - address, val - value.
Return:         None.
Test and revision:
                Ason. 2001.7
*/
void outportb( INT add, UCHAR val)
{
	*((UCHAR *)add) = val;
}


/* 
Name:           outport
Description:    send a word out to certain port.
Parameters:     add - address, val - value.
Return:         None.
Test and revision:
                Ason. 2001.7
*/
void outport( INT add, UINT16 val)
{
	*((UINT16 *)add) = val;
}

/* 
Name:           inportb
Description:    read a byte in from certain port.
Parameters:     add - address.
Return:         the byte read.
Test and reision:
                Ason. 2001.7
*/
UCHAR inportb( INT add)
{
	return( *((UCHAR *)add) );
}

/* 
Name:           inport
Description:    read a word in from certain port.
Parameters:     add - address.
Return:         the word read.
Test and revision:
                Ason. 2001.7
*/
UINT16 inport( INT add)
{
	return( *((UINT16 *)add) );
}


/*
Name:         WriteMiiWord
Description:  This routine is used to write a word into Mii registers.
Parameters:   data, which data to write; data_size, how many bits.
Returns:      None.
Test and Revision:
              Ason. 2001.7
*/
void WriteMiiWord( UINT32 data, UINT16 data_size )
{
    UINT32 data_bit;
    
	for ( ; data_size > 0; data_size-- )
    {
       data_bit = ( data >> (31 - MII_MDO_BIT_POSITION ) ) & MII_MDO_MASK;
       outportb(MIIEEPROMADD, MII_WRITE | data_bit );
       outportb(MIIEEPROMADD, MII_WRITE | MII_CLK | data_bit );
       data <<= 1;
    }
}


/*
Name:        ReadMiiRegister
Description: Read a certain register in Mii.
Parameters:  phy_addr, physical address of the PHY, in this case,
             as we use internal PHY, its address is always 0x10,
             reg_num, which register, totally 32 register.
			 reg_data_p, pointer points to the register value.
Return:      NET_NO_ERROR or Error code.
Test and revision:
             Ason. 2001.6
*/
INT16 ReadMiiRegister( UINT16 phy_addr, UINT16 reg_num,  UINT16 * reg_data_p )
{
	
	UINT32   command = ((UINT32)phy_addr <<PHY_ADDR_ALIGN)
                        |((UINT32)reg_num <<REG_ADDR_ALIGN)
                        |MII_READ_FRAME;
    UINT16   bits_of_short = sizeof(UINT16) * 8;
    UINT16   i;
    UCHAR    tempc;

   
    *reg_data_p = 0;
 
	WriteMiiWord( PRE, (UINT16)( 2*bits_of_short ));
    WriteMiiWord( command, (UINT16) (bits_of_short - 2));
    MIIOUT3STATE

    tempc = inportb(MIIEEPROMADD);
    if ( tempc & MII_READ_DATA_MASK )
    {
        // TRY AGAIN!
        // some kind of PHY need to do this twice...
        MIIOUT3STATE
        tempc = inportb(MIIEEPROMADD);
        if ( tempc & MII_READ_DATA_MASK )
             return( NET_ERROR_MIIRD ) ;
    }
    
	for (i = 0; i < bits_of_short; i++)
    {
        outportb(MIIEEPROMADD, MII_READ);
        outportb(MIIEEPROMADD, MII_READ | MII_CLK);

        tempc = inportb(MIIEEPROMADD);
        *reg_data_p = (*reg_data_p << 1) |(UINT16)((tempc >> MII_MDI_BIT_POSITION ) & 0x0001 );
    }
    MIIOUT3STATE

    // Mask the bits without any meaning.
	*reg_data_p &= ~PhyRegsReservedBitsMasks[reg_num];

    return(NET_NO_ERROR);
}


/*
Name:         WriteMiiRegister
Description:  write into a mii register.
Parameters:   phy_addr, reg_num, reg_data. as "ReadMiiRegister"
Return:       None.
Test and revision:
              Ason. 2001.6
*/
void WriteMiiRegister( UINT16 phy_addr, UINT16 reg_num, UINT16 reg_data )
{
    UINT32   command = ((UINT32)phy_addr << PHY_ADDR_ALIGN )
                        |((UINT32)reg_num << REG_ADDR_ALIGN )
                        |MII_WRITE_FRAME
                        |(UINT32)(reg_data & ~PhyRegsReservedBitsMasks[reg_num]);
    
	UINT16   bits_of_short = sizeof(UINT16) * 8;

    WriteMiiWord( PRE, (UINT16)(2* bits_of_short));
    WriteMiiWord( command, (UINT16)( 2 * bits_of_short ));
    MIIOUT3STATE
}

/*
Name:           InitStatistics
Description:    This routine will be used to clear all statistics for 
                MAC Layer.
Parameters:     None.
Returns:        None.
Test and revision:
                Ason.  2001.7
*/
void InitStatistics(void)
{

    MacState.Rcv.PacketReallyReceived = 0;
	MacState.Rcv.PacketReallyReceivedTcpip = 0;
	MacState.Rcv.PacketReallyReceivedVBCare = 0;
	MacState.Rcv.PacketReallyReceivedVBNotCare = 0; 
    MacState.Rcv.PacketReceived = 0;         
    MacState.Rcv.PacketReceivedWithError = 0;
    MacState.Rcv.PacketReceivedIntact = 0;    
    MacState.Rcv.PacketReceviedCRCErr = 0;    
    MacState.Rcv.PacketReceviedFAEErr = 0;    
    MacState.Rcv.PacketReceivedFIFOErr = 0;   
    MacState.Rcv.PacketReceivedMissErr = 0;   
    MacState.Rcv.PacketReceivedBMpTimes = 0;  
    MacState.Rcv.PacketReceivedDisabled = 0;  
    
    MacState.Tmt.TransmitTimes = 0;
    MacState.Tmt.TransmitTimesWithError = 0;
    MacState.Tmt.TransmitOWCErr = 0;    
    MacState.Tmt.TransmitABTErr = 0;    
    MacState.Tmt.TransmitColTimes = 0;  
    MacState.Tmt.TransmitPTXTimes = 0;  

    MacState.CouterOverflowTimes = 0;    
    MacState.RemoteDMACompleteTimes = 0;  
    MacState.ShortBufferTimes = 0;        
    MacState.ResetTimes = 0;              
	MacState.IPBufShortTimes = 0;
	MacState.VBBufShortTimes = 0;

}


/*
Name:        wait
Description: Do something to sleep a while, as NU_Sleep is not 
             permitted from low level service as ISR, so this 
			 is provided. because it is implemented by counting
			 instructions, when CPU is speed up, this must be
			 rewrite!!!
Paramters:   howlong - ms to sleep.
Return:      none.
Test and revision:
             Ason. 2001.7           
*/

void wait(UINT16 howlong)
{
   UINT16 i,j;
   UINT16 temps;

     
   for ( i = 0; i < howlong; i++ )
   {
       // assumee that takes 1ms, some test must be done!!!
	   //for ( j = 0; j < 1400; j++)  // 40000, approximate 1ms.
		for ( j = 0; j < 1672; j++)  // 40000, approximate 1ms.
		   temps++;
   }
}
/*
//For 1 ms
void wait(UINT16 howlong)
{
	int		i, j;
	int		temp = 0;

	for( j = 0; j < howlong; j++ )
	{
		for( i = 0; i < 6825; i++ )
			temp++;
	}

}
*/
/*
Name:           TestMacReg
Description:	Test some registers to verify that the chip is good.
Parameters:     None.
Return:         Error code or NU_NO_ERROR.

Test and revisioin:   Ason. 2001.5

*/
INT16 TestMacReg(void)
{
 
   UCHAR   tempc;
   UINT16  temps;
   INT16   return_value =  NET_NO_ERROR;
   INT16   i;
 
   // reset the chip. a read or a write will 
   // software-reset the chip. as datasheet is 
   // not coherent with sample, i just read once and
   // write once.
   outportb(MAR7ADD,0xff);
   tempc = inportb(MAR7ADD);

   // wait for a while. data sheet says at least 1.5 ms.
   wait(3);
   
   // stop the card.
   SETTOPAGE0
   outportb(CRADD,0x21);

   // in the datasheet, it is said that RST IN ISR is
   // not a guarantee of stop, stop at least 1.5 ms.
   wait(3);
   
   // first of all, set to page 1.
   SETTOPAGE1
   // write and read MAC address registers.
   outportb(PARA0ADD,0x55);
   outportb(PARA1ADD,0x55);
   outportb(PARA2ADD,0x55);
   outportb(PARA3ADD,0x55);
   outportb(PARA4ADD,0x55);
   outportb(PARA5ADD,0x55);
   if ( 0x55 != inportb(PARA0ADD) )
   	 return_value = NET_ERROR_NE2REG;
   if ( 0x55 != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;
   if ( 0x55 != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;
   if ( 0x55 != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;
   if ( 0x55 != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;
   if ( 0x55 != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;

   SETTOPAGE1
   outportb(PARA0ADD,0xaa);
   outportb(PARA1ADD,0xaa);
   outportb(PARA2ADD,0xaa);
   outportb(PARA3ADD,0xaa);
   outportb(PARA4ADD,0xaa);
   outportb(PARA5ADD,0xaa);

   if ( 0xaa != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;
   if ( 0xaa != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;
   if ( 0xaa != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;
   if ( 0xaa != inportb(PARA0ADD) )
     return_value = NET_ERROR_NE2REG;
   if ( 0xaa != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;
   if ( 0xaa != inportb(PARA0ADD) )
	 return_value = NET_ERROR_NE2REG;

   return ( return_value );

}


/*
Name:           TestMacRam
Description:	Test SRAM in AX88796
Parameters:     None
Return:         Error code or NET_NO_ERROR
Test and revisioin:   Ason. 2001.5

*/
INT16 TestMacRam(void)
{
	INT16   i;
	INT16   return_value = NET_NO_ERROR;
    UINT16  tempus;
    UCHAR   tempc;

    // first of all, stop the card.
    SETTOPAGE0
    outportb(CRADD,0x21);
	wait(3);
	    
    SETTOPAGE0

	// make loop to keep 796 from receiving data.
    outportb(TCRADD,0x22);
	
    // clear all interrupt state.
    outportb(ISRADD,0xff);
    // clear IMR.
    outportb(IMRADD,0x00);

    // set DCR, make a 68k format, word wide and DMA not always complete.
    outportb(DCRADD,0x03);

    // following lines of codes, generate the Remote DMA to test all SRAM.
    // first of all, write 0x2000 words.
	// set byte offset.
    outportb(RSAR0ADD,0);
	// set the page.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品72免费观看| 久久久激情视频| 久久九九久久九九| 久久国内精品自在自线400部| 国产精品免费av| 丰满亚洲少妇av| 欧美激情一区二区三区四区 | 成人黄色av网站在线| 日韩一二三四区| 男女男精品网站| 日韩亚洲欧美在线观看| 欧美三级午夜理伦三级中视频| 一区二区三区在线观看动漫| 99久久婷婷国产综合精品电影| 国产精品水嫩水嫩| 欧美大片一区二区| 成人一区二区三区在线观看| 亚洲欧美日韩久久| 欧美日韩在线三区| 92国产精品观看| 粉嫩高潮美女一区二区三区 | 亚洲第一成年网| 欧美三级午夜理伦三级中视频| 国产成人在线看| 亚洲日本免费电影| 欧美日韩精品欧美日韩精品一| 日本大胆欧美人术艺术动态| 精品成人在线观看| 99久久婷婷国产综合精品| 天堂久久久久va久久久久| 欧美成人精精品一区二区频| 国产精品69毛片高清亚洲| 亚洲丝袜制服诱惑| 国产精品久久久久久久岛一牛影视| 91丨porny丨国产入口| 亚洲综合激情小说| 久久精品视频一区二区三区| 日韩精品专区在线| 日韩一区二区三区精品视频| 欧美福利一区二区| 国产成人免费在线视频| 狠狠网亚洲精品| 一区二区三区四区中文字幕| 亚洲男女一区二区三区| 亚洲视频免费观看| 亚洲日本韩国一区| 亚洲精品日韩综合观看成人91| 4438亚洲最大| 91免费看片在线观看| 北条麻妃国产九九精品视频| 天天爽夜夜爽夜夜爽精品视频| 国产视频在线观看一区二区三区| 国产午夜亚洲精品羞羞网站| 国产日韩欧美在线一区| 欧美蜜桃一区二区三区| 欧美日韩国产大片| 欧美日韩成人一区二区| 日韩午夜激情电影| 久久蜜桃一区二区| 亚洲欧洲精品一区二区三区| 91精品国产一区二区| 波波电影院一区二区三区| 91免费版在线| 欧美日韩综合在线免费观看| 欧美一区二区不卡视频| 国产色综合一区| 亚洲欧美日韩在线不卡| 亚洲国产日产av| 国产精品麻豆一区二区| 亚洲综合色区另类av| 日韩在线一二三区| 国产另类ts人妖一区二区| 成人av资源下载| 欧美日韩精品欧美日韩精品| 久久先锋影音av鲁色资源网| 欧美精品日韩一本| 精品伦理精品一区| 亚洲色图20p| 美女一区二区久久| 麻豆成人久久精品二区三区红 | 日韩一区二区在线看| 国产色产综合产在线视频| 亚洲综合丁香婷婷六月香| 毛片av一区二区| 91视频www| 日韩欧美在线影院| 亚洲欧美日韩久久精品| 激情综合色播五月| 日本女优在线视频一区二区| 懂色av一区二区在线播放| 欧美性大战久久久久久久蜜臀 | 日本韩国欧美一区二区三区| 国产精品自在在线| 91福利国产成人精品照片| 日韩精品中文字幕在线一区| 国产精品美女久久久久久久久| 蜜桃精品视频在线| 在线免费观看日本欧美| 欧美图片一区二区三区| 国产欧美日韩中文久久| 亚洲高清视频中文字幕| 成人免费毛片app| 日韩一级高清毛片| 亚洲制服丝袜av| 国产精品69毛片高清亚洲| 7777女厕盗摄久久久| 亚洲欧美激情视频在线观看一区二区三区| 麻豆精品视频在线观看| 日本高清免费不卡视频| 中文字幕第一区| 黄页网站大全一区二区| 欧美日本高清视频在线观看| 亚洲美女视频在线| 成人黄色国产精品网站大全在线免费观看| 在线播放91灌醉迷j高跟美女 | jlzzjlzz欧美大全| 久久久一区二区三区捆绑**| 日韩国产一二三区| 91福利视频久久久久| 国产精品欧美精品| 国产麻豆精品久久一二三| 国产成人免费在线| 精品成人私密视频| 首页国产欧美日韩丝袜| 欧美日韩成人在线一区| 亚洲国产中文字幕| 欧美中文字幕不卡| 一区二区在线观看免费视频播放 | 国产成人av一区二区三区在线| 欧美人牲a欧美精品| 亚洲综合色视频| 91九色最新地址| 夜夜爽夜夜爽精品视频| 日本韩国视频一区二区| 亚洲欧美日韩国产综合在线| 色综合网站在线| 欧美放荡的少妇| 日韩精品视频网站| 3d动漫精品啪啪一区二区竹菊| 亚洲高清在线视频| 欧美高清视频一二三区 | 韩国午夜理伦三级不卡影院| 日韩一区二区电影在线| 久久国内精品视频| 久久亚洲一区二区三区四区| 激情欧美日韩一区二区| 亚洲国产精品成人综合| 成人小视频在线| 中文字幕一区二区不卡| 91成人免费电影| 午夜私人影院久久久久| 337p亚洲精品色噜噜狠狠| 捆绑紧缚一区二区三区视频| 精品久久人人做人人爽| 国产成人午夜电影网| 亚洲欧美日韩国产手机在线| 欧美丝袜自拍制服另类| 日韩电影免费在线| 精品欧美一区二区在线观看| 国产suv精品一区二区6| 亚洲女同女同女同女同女同69| 在线精品视频一区二区| 日本va欧美va瓶| 欧美韩日一区二区三区| 一本到不卡精品视频在线观看| 久久九九影视网| 色婷婷综合久久久| 日本不卡视频在线观看| 国产日产欧产精品推荐色| 91在线高清观看| 午夜精品一区二区三区电影天堂 | 99国产一区二区三精品乱码| 亚洲高清视频的网址| 26uuu精品一区二区在线观看| 一本大道久久a久久精品综合| 亚洲成人免费在线观看| 精品国产伦一区二区三区观看方式| 国产黄人亚洲片| 婷婷一区二区三区| 中文字幕av不卡| 欧美性感一区二区三区| 国产毛片精品视频| 亚洲成a人片在线不卡一二三区| 精品成人一区二区三区四区| 91在线观看成人| 国内精品国产三级国产a久久| 亚洲精品国产高清久久伦理二区| 日韩精品一区在线观看| 色综合久久99| 国产剧情av麻豆香蕉精品| 亚洲一区二区三区精品在线| 精品国产麻豆免费人成网站| 在线看不卡av| 成人妖精视频yjsp地址| 日av在线不卡| 一个色妞综合视频在线观看| 国产婷婷一区二区| 91福利视频在线| www.av精品| 国产成人精品免费|