天天看點

linux網卡驅動移植

核心版本:linux2.6.28.7   中斷引腳是irq_eint7 具體的  自己看原理圖

/*******************************/

#include <mach/regs-gpio.h>   //by bai

#include <mach/irqs.h>       //用到writel和ioremap類的頭檔案

#include <mach/hardware.h>

unsigned char ne_def_eth_mac_addr[]={0x00,0x12,0x34,0x56,0x80,0x49}; //定義的mac位址

/* ------------------------------------------------------------------------ */

    static void *bwscon;

    static void *gpfcon;

    static void *extint0;

    static void *intmsk;

    #define bwscon           (0x48000000)//總線寬度和等待控制寄存器

    #define gpfcon           (0x56000050)//配置io口為中斷引腳

    #define extint0          (0x56000088)//外部中斷控制寄存器 0 上升沿觸發還是下降沿觸發

    #define intmsk           (0x4a000008)//決定屏蔽哪個中斷源。被屏蔽的中斷源将不會服務  0 = 中斷服務可用  1 = 屏蔽中斷服務

bwscon=ioremap_nocache(bwscon,0x0000004);//決定 sram 是否對 bank 4 使用 ub/lb   0 = 未使用 ub/lb(引腳對應 nwbe[3:0]) 1 = 

使用 ub/lb(引腳對應 nbe[3:0])決定 bank 4 的wait 狀态   0 = wait 禁止  1 = wait 使能 

gpfcon=ioremap_nocache(gpfcon,0x0000004);

extint0=ioremap_nocache(extint0,0x0000004);

intmsk=ioremap_nocache(intmsk,0x0000004);

writel(readl(bwscon)|0xc0000,bwscon);

writel( (readl(gpfcon) & ~(0x3 << 14)) | (0x2 << 14), gpfcon); //配置成中斷引腳

writel( readl(gpfcon) | (0x1 << 7), gpfcon); // disable pull-up

writel( (readl(extint0) & ~(0xf << 28)) | (0x4 << 28), extint0); //rising edge

writel( (readl(intmsk))  & ~0x80, intmsk);    

//ndev->dev_addr[i] = ior(db, i+dm9000_par);   // by bai

ndev->dev_addr[i] = ne_def_eth_mac_addr[i];

總結:不管你用什麼核心版本的網卡驅動程式,自己移植網卡驅動的時候主要配置兩項,

一:設定mac位址,基位址或者中斷引腳,配置成中斷,基本的模式就是這樣

繼續閱讀