📄 uclinux040408.44b0.patch
字号:
+#define REG_LineST 0x0134+#define REG_SelfST 0x0136+#define REG_BusST 0x0138+#define REG_TDR 0x013C+++/*+* Initiate transmit registers+*/+#define REG_TxCommand 0x0144+#define REG_TxLength 0x0146+++/*+* Address filter registers+*/+#define REG_LAF 0x0150+#define REG_IA 0x0158+++/*+* Frame location register+*/+#define REG_RxStatus 0x0400+#define REG_RxLength 0x0402+#define REG_RxFrame 0x0404+#define REG_TxFrame 0x0A00+++/*--- CS8900A register bit defines ---*/+++/*+* Bits of bus interface register+*/+/* ID */+#define ID_CODE 0x630E+#define ID_SIGNATURE 0x3000+#define REV_B 0x0700+#define REV_C 0x0800+#define REV_D 0x0900+#define REV_F 0x0A00+/* INT number */+#define INTRQ0 0+#define INTRQ1 1+#define INTRQ2 2+#define INTRQ3 3+#define ALL_INTRQ_HI 4+/* DMA number */+#define DMRQ0 0+#define DMRQ1 1+#define DMRQ2 2+#define ALL_DMRQ_HI 3+/* EEPROM command */+#define OB0 (1<<8)+#define OB1 (1<<9)+#define ELSEL (1<<10)+++/*+* Bits of status and control registers+*/+#define LOW_BITS_MASK 0x001F+/* RxCFG */+#define Skip_1 (1<<6)+#define StreamE (1<<7)+#define RxOKiE (1<<8)+#define RxDMAonly (1<<9)+#define AutoRxDMAE (1<<10)+#define BufferCRC (1<<11)+#define CRCerroriE (1<<12)+#define RuntiE (1<<13)+#define ExtradataiE (1<<14)+#define RxCFG_LOW (0x03)+/* RxCTL */+#define IAHashA (1<<6)+#define PromiscuousA (1<<7)+#define RxOKA (1<<8)+#define MulticastA (1<<9)+#define IdividualA (1<<10)+#define BroadcastA (1<<11)+#define CRCerrorA (1<<12)+#define RuntA (1<<13)+#define ExtradataA (1<<14)+#define RxCTL_LOW (0x05)+/* TxCFG */+#define Loss_of_CRSiE (1<<6)+#define SQErroriE (1<<7)+#define TxOKiE (1<<8)+#define Out_of_windowiE (1<<9)+#define JabberiE (1<<10)+#define AnycolliE (1<<11)+#define _16colliE (1<<15)+#define TxCFG_LOW (0x07)+/* TxCMD */+#define TxStart (3<<6)+#define TxStart6 (1<<6)+#define TxStart7 (1<<7)+#define Force (1<<8)+#define Onecoll (1<<9)+#define InhibitCRC (1<<12)+#define TxPadDis (1<<13)+#define TxCMD_LOW (0x09)+/* BufCFG */+#define SWint_X (1<<6)+#define RxDMAiE (1<<7)+#define Rdy4TxiE (1<<8)+#define TxUnderruniE (1<<9)+#define RxMissiE (1<<10)+#define Rx128iE (1<<11)+#define TxColOvfiE (1<<12)+#define MissOvfloiE (1<<13)+#define RxDestiE (1<<15)+#define BufCFG_LOW (0x0B)+/* LineCTL */+#define SerRxON (1<<6)+#define SerTxON (1<<7)+#define AUIonly (1<<8)+#define AutoAUI_10BT (1<<9)+#define ModBackOffE (1<<11)+#define PolarityDis (1<<12)+#define _2_partDefDis (1<<13)+#define LoRxSquelch (1<<14)+#define LineCTL_LOW (0x13)+/* SelfCTL */+#define RESET (1<<6)+#define SWSuspend (1<<8)+#define HWSleepE (1<<9)+#define HWStandbyE (1<<10)+#define HC0E (1<<12)+#define HC1E (1<<13)+#define HCB0 (1<<14)+#define HCB1 (1<<15)+#define SelfCTL_LOW (0x15)+/* BusCTL */+#define ResetRxDMA (1<<6)+#define DMAextend (1<<8)+#define UseSA (1<<9)+#define MemoryE (1<<10)+#define DMABurst (1<<11)+#define IOCHRDYE (1<<12)+#define RxDMAsize (1<<13)+#define EnableIRQ (1<<15)+#define BusCTL_LOW (0x17)+/* TestCTL */+#define DisableLT (1<<7)+#define ENDECloop (1<<9)+#define AUIloop (1<<10)+#define DisableBackoff (1<<11)+#define FDX (1<<14)+#define TestCTL_LOW (0x19)+/* ISQ */+#define RegNum (0x3f<<0)+#define RegContent (0x3ff<<6)+#define ISQ_LOW (0x00)+/* RxEvent */+#define IAHash (1<<6)+#define Dribblebits (1<<7)+#define RxOK (1<<8)+#define Hashed (1<<9)+#define IdividualAdr (1<<10)+#define Broadcast (1<<11)+#define CRCerror (1<<12)+#define Runt (1<<13)+#define Extradata (1<<14)+#define RxEvent_LOW (0x04)+/* TxEvent */+#define Loss_of_CRS (1<<6)+#define SQError (1<<7)+#define TxOK (1<<8)+#define Out_of_window (1<<9)+#define Jabber (1<<10)+#define Num_of_TxColl (0xf<<11)+#define _16coll (1<<15)+#define TxEvent_LOW (0x08)+/* BufEvent */+#define SWint (1<<6)+#define RxDMAFrame (1<<7)+#define Rdy4Tx (1<<8)+#define TxUnderrun (1<<9)+#define RxMiss (1<<10)+#define Rx128 (1<<11)+#define RxDest (1<<15)+#define BufEvent_LOW (0x0C)+/* RxMISS */+#define RxMissCount (0x3ff<<6)+#define RxMISS_LOW (0x10)+/* TxCOL */+#define TxColCount (0x3ff<<6)+#define TxCOL_LOW (0x12)+/* LineST */+#define LinkOK (1<<7)+#define AUI (1<<8)+#define _10BT (1<<9)+#define PolarityOK (1<<12)+#define CRS (1<<14)+#define LineST_LOW (0x14)+/* SelfST */+#define _3_3VActive (1<<6)+#define INITD (1<<7)+#define SIBUSY (1<<8)+#define EEPROMpresent (1<<9)+#define EEPROMOK (1<<10)+#define ELpresent (1<<11)+#define EEsize (1<<12)+#define SelfST_LOW (0x16)+/* BusST */+#define TxBidErr (1<<7)+#define Rdy4TxNOW (1<<8)+#define BusST_LOW (0x18)+/* TDR */+#define AUIDelay (0x3ff<<6)+#define TDR_LOW (0x1C)+++/*+* I/O space operation+*/+#define IO_RX_TX_DATA0 0x0000+#define IO_RX_TX_DATA1 0x0002+#define IO_TX_COMMAND 0x0004+#define IO_TX_LENGTH 0x0006+#define IO_ISQ 0x0008+#define IO_PACKETPAGE_POINTER 0x000A+#define IO_PACKETPAGE_DATA0 0x000C+#define IO_PACKETPAGE_DATA1 0x000E+++/*+* ISQ Event+*/+#define ISQ_RxEvent 0x04+#define ISQ_TxEvent 0x08+#define ISQ_BufEvent 0x0C+#define ISQ_RxMISS 0x10+#define ISQ_TxCOL 0x12+#define ISQ_MASK 0x3F+++#endif /* __EKII_CS8900A_H__ */diff -Nur uClinux-dist.040408.original/linux-2.4.x/drivers/net/rtl8019.c uClinux-dist/linux-2.4.x/drivers/net/rtl8019.c--- uClinux-dist.040408.original/linux-2.4.x/drivers/net/rtl8019.c 1970-01-01 08:00:00.000000000 +0800+++ uClinux-dist/linux-2.4.x/drivers/net/rtl8019.c 2005-03-29 09:57:34.734375000 +0800@@ -0,0 +1,408 @@+/*+ * port to 16bit/8bit remote dma mode lq@cdgwbn.com.cn + * linux/deriver/net/Rtl8019as.c+ * Ethernet driver for Samsung 44B0+ * Copyright (C) 2003 antiscle <hzh12@163.net>+ */++#include <linux/config.h>+#include <linux/module.h>++#include <linux/init.h>+#include <linux/sched.h>+#include <linux/kernel.h>+#include <linux/slab.h> // kmalloc()+#include <linux/errno.h> // error codes+#include <linux/types.h> // size_t+#include <linux/interrupt.h> // mark_bh+#include <linux/in.h>+#include <linux/netdevice.h> // net_device+#include <linux/etherdevice.h>+#include <linux/ip.h>+#include <linux/tcp.h>+#include <linux/skbuff.h>+#include <linux/types.h>+#include <asm/irq.h>+#include "rtl8019.h"++#ifdef DEBUG+#define TRACE(str, args...) printk(str, ## args)+#else+#define TRACE(str, args...)+#endif++typedef unsigned char U8;+#define outportb(port, data) *((volatile u8 *)(port)) = (u8)(data)+#define inportb(port) *((volatile u8 *)(port))+++#define outportw(port, data) *((volatile u16 *)(port)) = (u16)(data)+#define inportw(port) *((volatile u16 *)(port))++#define ETH_FRAME_LEN 1514++#define RPSTART 0x4c+#define RPSTOP 0x80+#define SPSTART 0x40++static int timeout = 100; // tx watchdog ticks 100 = 1s+static char *version = "S3CEV40 board Rtl8019as driver start\n";++/*+ * This structure is private to each device. It is used to pass+ * packets in and out, so there is place for a packet+ */+struct nic_8019_priv {+ struct net_device_stats stats; + spinlock_t lock;+ struct sk_buff *skb;+};++/*****************************************************************************/+static u8 rBNRY;+static u8 SrcMacID[ETH_ALEN] = {0x00,0x06,0x98,0x02,0x7E,0x8F};++static void SetRegPage( u8 PageIdx)+{+ u8 temp;+ + temp = inportb(BaseAddr); + temp = (temp&0x3b)|(PageIdx<<6); + outportb(BaseAddr, temp);+}+/*+static void SetMacID()+{+ int i;+ + SetRegPage(1);+ for(i=0; i<6; i++)+ outportb(PAR0+i*2, SrcMacID[i]);++}+*/++/*+ * rx+ */+static void nic_8019_rx(int irq, void *dev_id, struct pt_regs *regs)+{+ u8 RxPageBeg, RxPageEnd;+ u8 RxNextPage;+ u8 RxStatus;+ u8 *data;+ int i, RxLength, RxLen;+ + struct sk_buff *skb; + struct net_device *dev = (struct net_device *) dev_id;+ struct nic_8019_priv *priv = (struct nic_8019_priv *) dev->priv;++ TRACE("TX/RX Interupt!\n");+ spin_lock(&priv->lock);+ SetRegPage(0);+ outportb(BNRY, rBNRY); //???+ RxStatus = inportb(ISR);+ if(RxStatus&2)+ {+ outportb(ISR, 0x2); //clr TX interupt+ priv->stats.tx_packets++; + TRACE("transmit one packet complete!\n");+ }+ if(RxStatus&1)+ {+ TRACE("Receivex packet....\n"); + outportb(ISR, 0x1); //clr Rx interupt + SetRegPage(1);+ RxPageEnd = inportb(CURR);++ SetRegPage(0); + RxPageBeg = rBNRY+1;+ if(RxPageBeg>=RPSTOP)+ RxPageBeg = RPSTART; + outportb(BaseAddr, 0x22); // stop remote dma+ + //outport(RSAR0, RxPageBeg<<8);+ //outport(RBCR0, 256); + outportb(RSAR0, 0);+ outportb(RSAR1, RxPageBeg);+ outportb(RBCR0, 4);+ outportb(RBCR1, 0); + outportb(BaseAddr, 0xa);++ RxStatus = inportb(RWPORT);+ RxNextPage = inportb(RWPORT); + RxLength = inportb(RWPORT);+ RxLength |= inportb(RWPORT)<<8;+ + TRACE("\nRxBeg = %x, RxEnd = %x, nextpage = %x, size = %i\n", RxPageBeg, RxPageEnd, RxNextPage, RxLength); + if (RxLength == 0)+ {+ TRACE("RxLength == 0 \n");+ return; + }+ + RxLength -= 4;+ if(RxLength>ETH_FRAME_LEN)+ {+ if(RxPageEnd==RPSTART)+ rBNRY = RPSTOP-1;+ else+ rBNRY = RxPageEnd-1; + outportb(BNRY, rBNRY);+ TRACE("RxLength more long than %x\n", ETH_FRAME_LEN);+ return; + }+ skb = dev_alloc_skb(RxLength);+ if(!skb) + {+ TRACE("Rtl8019as eth: low on mem - packet dropped\n");+ priv->stats.rx_dropped++;+ return;+ }+ + skb->dev = dev; + skb_reserve(skb, 2);+ skb_put(skb, RxLength);+ data = (u8 *)skb->data;++ // eth_copy_and_sum(skb, data, len, 0);+ outportb(RSAR0, 4);+ outportb(RSAR1, RxPageBeg);+ outportb(RBCR0, RxLength);+ outportb(RBCR1, RxLength>>8); + outportb(BaseAddr, 0xa);+ i = 4;+ data -= 4;+ RxLen=RxLength;+ for(; RxLen--;)+ {+ if(!(i&0xff))+ {+ outportb(BNRY, RxPageBeg); + RxPageBeg++;+ if(RxPageBeg>=RPSTOP)+ RxPageBeg = RPSTART; + }+ data[i++] = inportb(RWPORT); + TRACE("%2X,", data[i-1]);+ }+ TRACE("\n");+ outportb(BNRY, RxPageBeg); + rBNRY = RxPageBeg;+ + skb->protocol = eth_type_trans(skb, dev);+ TRACE("\nprotocol=%x\n", skb->protocol);+ priv->stats.rx_packets++;+ priv->stats.rx_bytes +=RxLength;+ netif_rx(skb);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -