S3C2440实现dm9000网卡驱动程序移植

发布者:xi24最新更新时间:2024-08-05 来源: cnblogs关键字:S3C2440  dm9000  网卡驱动  程序移植 手机看文章 扫描二维码
随时随地手机看文章

  55 12/20/2007  -Modify TX timeout routine(+)check TCR&0x01 

  56 

  57 */

  58 

  59 /* 主要就是修改基地址,位宽,中断引脚等 */

  60 

  61 //#define CHECKSUM

  62 //#define TDBUG        /* check TX FIFO pointer */

  63 //#define RDBUG   /* check RX FIFO pointer */

  64 //#define DM8606

  65 

  66 #define DRV_NAME    'dm9KS'

  67 #define DRV_VERSION    '2.09'

  68 #define DRV_RELDATE    '2007-11-22'

  69 

  70 #ifdef MODVERSIONS

  71 #include

  72 #endif

  73 

  74 //#include

  75 #include                 

  76 #include

  77 #include

  78 #include

  79 #include

  80 #include

  81 #include

  82 #include

  83 #include

  84 #include

  85 #include

  86 #include

  87 #include

  88 #include

  89 

  90 #ifdef CONFIG_ARCH_MAINSTONE

  91 #include

  92 #include

  93 #include

  94 #endif

  95 

  96 #include

  97 #include

  98 #include

  99 #include

 100 

 101 /* Board/System/Debug information/definition ---------------- */

 102 

 103 #define DM9KS_ID        0x90000A46

 104 #define DM9010_ID        0x90100A46

 105 /*-------register name-----------------------*/

 106 #define DM9KS_NCR        0x00    /* Network control Reg.*/

 107 #define DM9KS_NSR        0x01    /* Network Status Reg.*/

 108 #define DM9KS_TCR        0x02    /* TX control Reg.*/

 109 #define DM9KS_RXCR        0x05    /* RX control Reg.*/

 110 #define DM9KS_BPTR        0x08

 111 #define DM9KS_FCTR        0x09

 112 #define DM9KS_FCR            0x0a

 113 #define DM9KS_EPCR        0x0b

 114 #define DM9KS_EPAR        0x0c

 115 #define DM9KS_EPDRL        0x0d

 116 #define DM9KS_EPDRH        0x0e

 117 #define DM9KS_GPR            0x1f    /* General purpose register */

 118 #define DM9KS_CHIPR        0x2c

 119 #define DM9KS_TCR2        0x2d

 120 #define DM9KS_SMCR        0x2f     /* Special Mode Control Reg.*/

 121 #define DM9KS_ETXCSR    0x30    /* Early Transmit control/status Reg.*/

 122 #define    DM9KS_TCCR        0x31    /* Checksum cntrol Reg. */

 123 #define DM9KS_RCSR        0x32    /* Receive Checksum status Reg.*/

 124 #define DM9KS_BUSCR        0x38

 125 #define DM9KS_MRCMDX    0xf0

 126 #define DM9KS_MRCMD        0xf2

 127 #define DM9KS_MDRAL        0xf4

 128 #define DM9KS_MDRAH        0xf5

 129 #define DM9KS_MWCMD        0xf8

 130 #define DM9KS_MDWAL        0xfa

 131 #define DM9KS_MDWAH        0xfb

 132 #define DM9KS_TXPLL        0xfc

 133 #define DM9KS_TXPLH        0xfd

 134 #define DM9KS_ISR            0xfe

 135 #define DM9KS_IMR            0xff

 136 /*---------------------------------------------*/

 137 #define DM9KS_REG05        0x30    /* SKIP_CRC/SKIP_LONG */ 

 138 #define DM9KS_REGFF        0xA3    /* IMR */

 139 #define DM9KS_DISINTR    0x80

 140 

 141 #define DM9KS_PHY            0x40    /* PHY address 0x01 */

 142 #define DM9KS_PKT_RDY        0x01    /* Packet ready to receive */

 143 

 144 /* Added for PXA of MAINSTONE */

 145 #ifdef CONFIG_ARCH_MAINSTONE

 146 #include

 147 #define DM9KS_MIN_IO        (MST_ETH_PHYS + 0x300)

 148 #define DM9KS_MAX_IO            (MST_ETH_PHYS + 0x370)

 149 #define DM9K_IRQ        MAINSTONE_IRQ(3)

 150 #else

 151 #define DM9KS_MIN_IO        0x300

 152 #define DM9KS_MAX_IO        0x370

 153 #define DM9KS_IRQ        3

 154 #endif

 155 

 156 #define DM9KS_VID_L        0x28

 157 #define DM9KS_VID_H        0x29

 158 #define DM9KS_PID_L        0x2A

 159 #define DM9KS_PID_H        0x2B

 160 

 161 #define DM9KS_RX_INTR        0x01

 162 #define DM9KS_TX_INTR        0x02

 163 #define DM9KS_LINK_INTR        0x20

 164 

 165 #define DM9KS_DWORD_MODE    1

 166 #define DM9KS_BYTE_MODE        2

 167 #define DM9KS_WORD_MODE        0

 168 

 169 #define TRUE            1

 170 #define FALSE            0

 171 /* Number of continuous Rx packets */

 172 #define CONT_RX_PKT_CNT        0xFFFF

 173 

 174 #define DMFE_TIMER_WUT  jiffies+(HZ*5)    /* timer wakeup time : 5 second */

 175 

 176 #ifdef DM9KS_DEBUG

 177 #define DMFE_DBUG(dbug_now, msg, vaule)

 178 if (dmfe_debug||dbug_now) printk(KERN_ERR 'dmfe: %s %xn', msg, vaule)

 179 #else

 180 #define DMFE_DBUG(dbug_now, msg, vaule)

 181 if (dbug_now) printk(KERN_ERR 'dmfe: %s %xn', msg, vaule)

 182 #endif

 183 

 184 #ifndef CONFIG_ARCH_MAINSTONE

 185 #pragma pack(push, 1)

 186 #endif

 187 

 188 typedef struct _RX_DESC

 189 {

 190     u8 rxbyte;

 191     u8 status;

 192     u16 length;

 193 }RX_DESC;

 194 

 195 typedef union{

 196     u8 buf[4];

 197     RX_DESC desc;

 198 } rx_t;

 199 #ifndef CONFIG_ARCH_MAINSTONE

 200 #pragma pack(pop)

 201 #endif

 202 

 203 enum DM9KS_PHY_mode {

 204     DM9KS_10MHD   = 0, 

 205     DM9KS_100MHD  = 1, 

 206     DM9KS_10MFD   = 4,

 207     DM9KS_100MFD  = 5, 

 208     DM9KS_AUTO    = 8, 

 209 };

 210 

 211 /* Structure/enum declaration ------------------------------- */

 212 typedef struct board_info { 

 213     u32 io_addr;/* Register I/O base address */

 214     u32 io_data;/* Data I/O address */

 215     u8 op_mode;/* PHY operation mode */

 216     u8 io_mode;/* 0:word, 2:byte */

 217     u8 Speed;    /* current speed */

 218     u8 chip_revision;

 219     int rx_csum;/* 0:disable, 1:enable */

 220     

 221     u32 reset_counter;/* counter: RESET */ 

 222     u32 reset_tx_timeout;/* RESET caused by TX Timeout */

 223     int tx_pkt_cnt;

 224     int cont_rx_pkt_cnt;/* current number of continuos rx packets  */

 225     struct net_device_stats stats;

 226     

 227     struct timer_list timer;

 228     unsigned char srom[128];

 229     spinlock_t lock;

 230     struct mii_if_info mii;

 231 } board_info_t;

 232 /* Global variable declaration ----------------------------- */

 233 /*static int dmfe_debug = 0;*/

 234 static struct net_device * dmfe_dev = NULL;

 235 static struct ethtool_ops dmfe_ethtool_ops;

 236 /* For module input parameter */

 237 static int mode       = DM9KS_AUTO;  

 238 static int media_mode = DM9KS_AUTO;

 239 static int  irq        = DM9KS_IRQ;

 240 static int iobase     = DM9KS_MIN_IO;

 241 

 242 #if 0  // use physical address; Not virtual address

 243 #ifdef outb

 244     #undef outb

 245 #endif

 246 #ifdef outw

 247     #undef outw

 248 #endif

 249 #ifdef outl

 250     #undef outl

 251 #endif

 252 #ifdef inb

 253     #undef inb

 254 #endif

 255 #ifdef inw

 256     #undef inw

 257 #endif

 258 #ifdef inl

 259     #undef inl

 260 #endif

 261 void outb(u8 reg, u32 ioaddr)

 262 {

 263     (*(volatile u8 *)(ioaddr)) = reg;

 264 }

 265 void outw(u16 reg, u32 ioaddr)

 266 {

[1].. [7] [8] [9] [10] [11] [12] [13] [14] [15] ..[20]
关键字:S3C2440  dm9000  网卡驱动  程序移植 引用地址:S3C2440实现dm9000网卡驱动程序移植

上一篇:s3c2440的USB热插拔驱动问题
下一篇:S3C实现DMA驱动程序编写

推荐阅读最新更新时间:2024-11-13 17:20

S3C2440时钟系统详解
在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分析时钟图可以得到以下结论: 经过选择的外部时钟进入MPLL,进行锁相环倍频,经过锁相环之后的时钟MPLL_IN分成了三股,分别是FCLK,HCLK,PCLK.这其中HCLK和PCLK又是从HCLK分频得到的,最后ARM920T这个系统内核模块得到了两个时钟HCLK和FCLK,DMA控制器,LCD控制器,内存控制器,总线控制器,外部nand控制器和TIC,摄像头接口都来自于HCLK时钟,LCD控制器,nand控制器,cam摄像头
[单片机]
<font color='red'>S3C2440</font>时钟系统详解
了解S3C2440触摸屏驱动的原理及其应用
一、开发环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二、前提知识 1、Linux输入子系统(Input Subsystem): 在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件处理层就为我们用
[单片机]
了解<font color='red'>S3C2440</font>触摸屏<font color='red'>驱动</font>的原理及其应用
STM32网络通信之DM9000了解
简介: 3.3V 供电,IO端口最高支持5V,提供两个接口,一个是可以以8、16、32这三种不同的方式与处理器相连接的接口,一个是与EEPROM连接的I2C接口,如此在外接的EEPROM中可以存放要缓存的数据信息。此外,DM9000内部有一个16K缓存数据区,分为发送FIFO缓冲区和接收FIFO缓冲区。 DM9000有三类寄存器,数据寄存器、状态寄存器和控制寄存器。 常用到的寄存器有6个: (1)网络控制寄存器 NCR 作用:对DM9000芯片的网络相关功能的配置,各位解释如下: (2)网络状态寄存器 NSR 作用: 寄存器的各位表示网络连接状态,通过这些标志位判断芯片的状态,写驱动的时候,一般会用到连接
[单片机]
STM32网络通信之<font color='red'>DM9000</font>了解
s3c2440实时时钟中断
s3c2440实时时钟(RTC)中,定义了两个中断源:报警中断和时间节拍中断。前面有网友问到了这两个中断的用法,最近我抽出时间对这两个中断研究了一番,发现这两个中断都很实用。现在就给大家介绍一下它们的用法。 时间节拍中断,顾名思义,就像一个节拍器,可以等时性的控制节拍。因此它类似于定时器中断。但时间节拍中断是毫秒级的,而定时器中断可以达到微秒,甚至更小级别。时间节拍中断的周期公式为:(n+1) 128,单位是秒,即每隔这么长时间,会中断一次。其中n的值为1~127,它存储在寄存器TICNT的低6位中,当寄存器TICNT的第7位被置1时,表示开启时间节拍中断,这时n递减,当减为0时,进入时间节拍中断。 报警中断可以
[单片机]
基于S3C2440嵌入式系统的以太网接口电路设计方案
文章主要介绍了一个基于三星ARM9芯片S3C2440嵌入式系统的以太网接口电路设计方案,采用了工业级以太网控制器DM9000AEP成功实现了嵌入式系统网络数据交换。论文在重点阐述了网络接口电路基础之上,对Windows CE系统控制软件部分DM9000AEP的驱动程序和注册表项进行了具体分析。 随着微电子技术和计算机技术的发展,嵌入式技术得到广阔的发展,已成为现代工业控制、通信类和消费类产品发展的方向。以太网在实时操作、可靠传输、标准统一等方面的卓越性能及其便于安装、维护简单、不受通信距离限制等优点,已经被国内外很多监控、控制领域的研究人员广泛关注,并在实际应用中展露出显着的优势。本文提出了一种基于DM9000AE网络接口
[单片机]
基于<font color='red'>S3C2440</font>嵌入式系统的以太网接口电路设计方案
S3C2440——使用URAT0中断方式发送和接收字符串
设置中断向量表 ;文件ASM_Interrupt.s ;(1)设置中断向量表 Mode_USR EQU 0x50 ;IRQ中断开放,FIQ中断关闭 Mode_FIQ EQU 0xD1 ;关闭IRQ、FIQ中断 Mode_IRQ EQU 0xD2 ;关闭IRQ、FIQ中断 Mode_SVC EQU 0xD3 ;关闭IRQ、FIQ中断 GET 2440Reg_addr.inc AREA MyCode, CODE,READONLY IMPORT Uart_Init IMPORT INT_UART0 ENTRY ;设置中断向量表 B
[单片机]
S3C2440时钟电源管理
S3C2440的时钟可以选用晶振(XTAL),也可以使用外部时钟(EXTCLK),由系统复位时,在复位信号上升沿对引脚OM3、OM2所测的状态来确定。由于我所用的开发板这两个引脚接地,故外部晶振作为主锁相环(MPLL)和usb锁相环(UPLL)的时钟源。 含有两个锁相环MPLL、UPLL产生系统所需要的不同频率的时钟 MPLL: 为CPU产生FCLK时钟 为AHB产生HCLK时钟 为APB产生PCLK时钟 UPLL: 为usb(Host and Device)产生UCLK(48M) FCLK,HCLK和 PCLK FCLK是提供给ARM920T 的时钟。 HCLK 是提供给用于 ARM920T,存储器控制器,中断控
[单片机]
<font color='red'>S3C2440</font>时钟电源管理
linux 2.6.32 在arm9(s3c2440)平台的移植
板子用的友善的mini2440, 起初按照光盘提供的手册, 照猫画虎,,,,,,,,,但是遇到各种问题, 很多未解决.....原因是还没理解每层目录的Makefile和Kconfig的关系, 以及在Kernel Configure菜单树中对应的选项, 以及对nand_flash设备的结构体的意义没搞清楚,~ so~ 在http://www.kernel.org/ 下载2.6.32的源代码. 编译器用的arm-linux-gcc 4.1.2 . 1 内核代码/uboot代码中中机器码的定义位置,在/root/linux-2.6.32/arch/arm/tools/mach-types 和 uboot/include/asm-
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved