日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2024年11月09日(星期六)

正在發(fā)生

2021年11月09日 | Mini2440 DM9000 驅動分析(一)

發(fā)布者:zuiquan 來源: eefocus關鍵字:Mini2440  DM9000  驅動分析 手機看文章 掃描二維碼
隨時隨地手機看文章

硬件特性


Mini2440開發(fā)板上DM9000的電氣連接和Mach-mini2440.c文件的關系:

PW_RST 連接到復位按鍵,復位按鍵按下,低電平觸發(fā)重新初始化,初始化完成后5us后可以使用(The DM9000 is ready after 5us when this pin deasserted )

CMD 連接到s3c2440 的ADD2 pin


INT 連接到s3c2440 的EINT7/GPF7,將中斷控制端口


LINK_ACT 連接到網絡接口的GLEDK pin,連接到LINK LED,這樣網卡上面的燈才可以亮

LINK_O、WAKEUP、SPEED100# 這三個pin并聯之后連接的網絡接口的YLEDK pin

AEN 連接到s3c2440 的nGCS4/GPA15 pin


IOR# 連接到s3c2440 的nOE pin

IOW# 連接到s3c2440 的 nWE pin

IOWAIT 直接通過電阻借電源,即高電平

TXO-、TXO+、RX-、RX+ 直接接到網絡端口用于數據收發(fā)

SD0-15 連接到s3c2440 的DATA0-15


其中片選信號AEN使用了nGCS4,所以網卡的內存區(qū)域在BANK4,也就是從地址0x20000000開始。


DM9000的TXD[2:0]作為strap pin在電路圖中是空接的,所以IO base是300H。


中斷使用了EINT7。

代碼如下:


/* DM9000AEP 10/100 ethernet controller */

#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)

 

static struct resource mini2440_dm9k_resource[] = {

        [0] = {

                .start = MACH_MINI2440_DM9K_BASE,

                .end   = MACH_MINI2440_DM9K_BASE + 3,

                .flags = IORESOURCE_MEM

        },

        [1] = {

                .start = MACH_MINI2440_DM9K_BASE + 4,

                .end   = MACH_MINI2440_DM9K_BASE + 7,

                .flags = IORESOURCE_MEM

        },

        [2] = {

                .start = IRQ_EINT7,

                .end   = IRQ_EINT7,

                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,

        }

};

 

/*

 *  * The DM9000 has no eeprom, and it's MAC address is set by

 *   * the bootloader before starting the kernel.

 *    */

static struct dm9000_plat_data mini2440_dm9k_pdata = {

        .flags          = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),

};

 

static struct platform_device mini2440_device_eth = {

        .name           = "dm9000",

        .id             = -1,

        .num_resources  = ARRAY_SIZE(mini2440_dm9k_resource),

        .resource       = mini2440_dm9k_resource,

        .dev            = {

                .platform_data  = &mini2440_dm9k_pdata,

        },

};

研究net driver首先就要先了解一下網絡驅動編寫的一個基本架構


兩個重要的結構體簡單介紹:sk_buff和net_device


sk_buff

如果把網絡傳輸看成是運送貨物的話,那么sk_buff就是這個“貨物”了,所有經手這個貨物的人都要干點什么事兒,要么加個包裝,要么印個戳兒等等。收貨的時候就要拆掉這些包裝,得到我們需要的貨物(payload data)。沒有貨物你還運輸什么呢?由此可見sk_buff的重要性了。


關于sk_buff的詳細介紹和幾個操作它的函數,參考:“l(fā)inux內核sk_buff的結構分析” http://www.linuxidc.com/Linux/2011-07/39163.htm,寫得非常明白了。贊一個~


net_device


又是一個龐大的結構體。好吧,我承認我從來就沒有看全過這個結構體。它在內核中就是指代了一個網絡設備。驅動程序需要在探測的時候分配并初始化這個結構體,然后使用register_netdev來注冊它,這樣就可以把操作硬件的函數與內核掛接在一起。

對于我們來說probe是一切一切的開始,看看dm9000驅動probe需要用要的結構體


board_info

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

typedef struct board_info {

 

void __iomem *io_addr; /* Register I/O base address */

void __iomem *io_data; /* Data I/O address */

u16 irq; /* IRQ */

 

u16 tx_pkt_cnt;

u16 queue_pkt_len;

u16 queue_start_addr;

u16 queue_ip_summed;

u16 dbug_cnt;

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

u8 phy_addr;

u8 imr_all;

 

unsigned int flags;

unsigned int in_suspend :1;

int debug_level;

 

enum dm9000_type type;

 

void (*inblk)(void __iomem *port, void *data, int length);

void (*outblk)(void __iomem *port, void *data, int length);

void (*dumpblk)(void __iomem *port, int length);

 

struct device *dev;      /* parent device */

 

struct resource *addr_res;   /* resources found */

struct resource *data_res;

struct resource *addr_req;   /* resources requested */

struct resource *data_req;

struct resource *irq_res;

 

struct mutex addr_lock; /* phy and eeprom access lock */

 

struct delayed_work phy_poll;

struct net_device  *ndev;

 

spinlock_t lock;

 

struct mii_if_info mii;

u32 msg_enable;

 

int rx_csum;

int can_csum;

int ip_summed;

} board_info_t;

其中有兩個很重要的結構體 net_device 和 mii_if_info


mii_if_info

struct mii_if_info {

int phy_id;

int advertising;

int phy_id_mask;

int reg_num_mask;

 

unsigned int full_duplex : 1; /* is full duplex? */

unsigned int force_media : 1; /* is autoneg. disabled? */

unsigned int supports_gmii : 1; /* are GMII registers supported? */

 

struct net_device *dev;

int (*mdio_read) (struct net_device *dev, int phy_id, int location);

void (*mdio_write) (struct net_device *dev, int phy_id, int location, int val);

};

net_device 

/*

 * The DEVICE structure.

 * Actually, this whole structure is a big mistake.  It mixes I/O

 * data with strictly "high-level" data, and it has to know about

 * almost every data structure used in the INET module.

 *

 * FIXME: cleanup struct net_device such that network protocol info

 * moves out.

 */

 

struct net_device

{

 

/*

* This is the first field of the "visible" part of this structure

* (i.e. as seen by users in the "Space.c" file).  It is the name

* the interface.

*/

char name[IFNAMSIZ];

/* device name hash chain */

struct hlist_node name_hlist;

/* snmp alias */

char *ifalias;

 

/*

* I/O specific fields

* FIXME: Merge these and struct ifmap into one

*/

unsigned long mem_end; /* shared mem end */

unsigned long mem_start; /* shared mem start */

unsigned long base_addr; /* device I/O address */

unsigned int irq; /* device IRQ number */

 

/*

* Some hardware also needs these fields, but they are not

* part of the usual set specified in Space.c.

*/

 

unsigned char if_port; /* Selectable AUI, TP,..*/

unsigned char dma; /* DMA channel */

 

unsigned long state;

 

struct list_head dev_list;

struct list_head napi_list;

 

/* Net device features */

unsigned long features;

#define NETIF_F_SG 1 /* Scatter/gather IO. */

#define NETIF_F_IP_CSUM 2 /* Can checksum TCP/UDP over IPv4. */

#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */

#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */

#define NETIF_F_IPV6_CSUM 16 /* Can checksum TCP/UDP over IPV6 */

#define NETIF_F_HIGHDMA 32 /* Can DMA to high memory. */

#define NETIF_F_FRAGLIST 64 /* Scatter/gather IO. */

#define NETIF_F_HW_VLAN_TX 128 /* Transmit VLAN hw acceleration */

#define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */

#define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */

#define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */

#define NETIF_F_GSO 2048 /* Enable software GSO. */

#define NETIF_F_LLTX 4096 /* LockLess TX - deprecated. Please */

/* do not use LLTX in new drivers */

#define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */

#define NETIF_F_GRO 16384 /* Generic receive offload */

#define NETIF_F_LRO 32768 /* large receive offload */

 

/* the GSO_MASK reserves bits 16 through 23 */

#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */

#define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */

#define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/

 

/* Segmentation offload features */

#define NETIF_F_GSO_SHIFT 16

#define NETIF_F_GSO_MASK 0x00ff0000

#define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT)

#define NETIF_F_UFO (SKB_GSO_UDP << NETIF_F_GSO_SHIFT)

#define NETIF_F_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT)

#define NETIF_F_TSO_ECN (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT)

#define NETIF_F_TSO6 (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT)

#define NETIF_F_FSO (SKB_GSO_FCOE << NETIF_F_GSO_SHIFT)

 

/* List of features with software fallbacks. */

#define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6)

 

 

#define NETIF_F_GEN_CSUM (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM)

#define NETIF_F_V4_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IP_CSUM)

#define NETIF_F_V6_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM)

#define NETIF_F_ALL_CSUM (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)

 

/*

* If one device supports one of these features, then enable them

* for all in netdev_increment_features.

*/

#define NETIF_F_ONE_FOR_ALL (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST |

NETIF_F_SG | NETIF_F_HIGHDMA |

NETIF_F_FRAGLIST)

 

/* Interface index. Unique device identifier */

int ifindex;

int iflink;

 

struct net_device_stats stats;

 

#ifdef CONFIG_WIRELESS_EXT

/* List of functions to handle Wireless Extensions (instead of ioctl).

* See for details. Jean II */

const struct iw_handler_def * wireless_handlers;

/* Instance data managed by the core of Wireless Extensions. */

struct iw_public_data * wireless_data;

#endif

/* Management operations */

const struct net_device_ops *netdev_ops;

const struct ethtool_ops *ethtool_ops;

 

/* Hardware header description */

const struct header_ops *header_ops;

 

unsigned int flags; /* interface flags (a la BSD) */

unsigned short gflags;

        unsigned short          priv_flags; /* Like 'flags' but invisible to userspace. */

unsigned short padded; /* How much padding added by alloc_netdev() */

 

unsigned char operstate; /* RFC2863 operstate */

unsigned char link_mode; /* mapping policy to operstate */

 

unsigned mtu; /* interface MTU value */

unsigned short type; /* interface hardware type */

unsigned short hard_header_len; /* hardware hdr length */

 

/* extra head- and tailroom the hardware may need, but not in all cases

* can this be guaranteed, especially tailroom. Some cases also use

[1] [2]
關鍵字:Mini2440  DM9000  驅動分析 引用地址:Mini2440 DM9000 驅動分析(一)

上一篇:Mini2440 DM9000 驅動分析(二)
下一篇:mini2440 dm9000 網卡驅動詳解 (二)

推薦閱讀

再過兩天就是雙十一了,我想全國大多數人在血拼購物時,應該并沒有想到這種所謂的狂歡節(jié)對于中國的快遞物流行業(yè)就像是一次歷劫。數據顯示,從2017年第二季度開始,我國常態(tài)化進入單日快遞億件時代,而預計2018年雙十一全行業(yè)處理的郵件、快遞業(yè)務將有望超過20億件。而且,由于包裹大小不一、派送地點復雜多樣等原因,快遞物流已然成為我國最典型的勞動密集...
本示例提供STM8S103F核心板的IIC驅動文件源代碼,親測沒有任何問題,博主使用來驅動AT24C256和電子羅盤MMC5883MA,IIC通信速率100kHz,可以調整時序延時時間。直接貼源碼:IIC.h#ifndef _IIC_H#define _IIC_H #include "iostm8s103F3.h"#include "type_def.h" #define IIC_SCL PC_ODR_ODR5 //設置SCL為GPIO--PC5#defin...
一、 STM32的輸入輸出管腳有下面8種(4輸入+2輸出+2復用輸出)可能的配置: ① 浮空輸入_IN_FLOATING ② 帶上拉輸入_IPU ③ 帶下拉輸入_IPD ④ 模擬輸入_AIN ⑤ 開漏輸出_OUT_OD ⑥ 推挽輸出_OUT_PP ⑦ 復用功能的推挽輸出_AF_PP ⑧ 復用功能的開漏輸出_AF_OD 1.1 I/O口的輸出模式下,有3種輸出速...

史海拾趣

問答坊 | AI 解惑

晶振不起振的常見原因及解決方案

遇到單片機晶振不起振是常見現象,那么引起晶振不起振的原因有哪些呢? 下面我給大家簡單概括一下: (1) PCB板布線錯誤; (2) 單片機質量有問題; (3) 晶振質量有問題; (4) 負載電容或匹配電容與晶振不匹配或者電容質量有問題; (5) PCB板受 ...…

查看全部問答∨

CE下普通應用開發(fā)是選擇C還是高級的.NET(Java)合適?

公司有一定數量的普通應用開發(fā),涉及到Socket或其它網絡通信,而不是開發(fā)驅動程序,這種情況下的常見方案是否選擇C/C++?…

查看全部問答∨

不同的嵌入式開發(fā)板的區(qū)別

舉個例子來引出我的問題 MX27 處理器以MX21 為基礎進行設計,基于ARM926EJ-S s3c2410的處理器是ARM920T 請問各位 首先,之間有什么區(qū)別,是不是:1、處理器型號?2、寄存器地址不同?等等 大家能不能幫我說個大概? 其次,編程的時候是不是每 ...…

查看全部問答∨

初學者,定制OS遇見個小問題

(CoreCon) Failed to connect debug message service! Please check the transport settings.(CoreCon) Transport service failed to connect(CoreCon) Error: A service has failed to connect. Make sure that all services are correctly config ...…

查看全部問答∨

altera視頻處理選型求助

我現在想做FPGA視頻處理方面的工作,原理一直用xilinx,現在考慮使用altera,但是不太熟悉。 哪位高手指點下,使用什么樣的芯片或開發(fā)板可以滿足高性能的視頻處理。謝謝了…

查看全部問答∨

51復位電路的分析

這個題目貌似很大白菜,然而,最近當我被一個朋友問到這個問題時,忽然發(fā)現,看似如此大白菜的電路,嘿嘿,不好意思,我也不會分析.......費了半天勁,好像才終于說出了個大概。但心里還是沒啥底,于是決定在這發(fā)個帖,望各位老少看管給評論評論, ...…

查看全部問答∨

菜鳥真心求助~時鐘問題

我是個剛接觸dsp的菜鳥,求教大蝦:怎么用5410硬件產生一個1秒的延時。求詳細寄存器配置。謝謝!…

查看全部問答∨

還是關于UCOS_II的問題

/* ********************************************************************************************************* *                           & ...…

查看全部問答∨

你喜歡用外國的設備還是國產的設備?

在使用示波器,萬用表,等開發(fā)工具時候,你是喜歡選擇進口的外國貨還是地道的國產貨呢?? 你是否有崇洋媚外的情節(jié)呢? 來曬曬你的設備吧。 我沒有示波器,只有一臺萬用表拿來曬曬 八百左右吧。 [ 本帖最后由 gaoyang9992006 于 2013-7-24 14:5 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統(tǒng)推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved