⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at_hw.h

📁 Atheros公司AR8121/AR8113无线网卡的Linux驱动
💻 H
📖 第 1 页 / 共 4 页
字号:
#define AT_ERR_PARAM                    4
#define AT_ERR_MAC_TYPE                 5
#define AT_ERR_PHY_TYPE                 6
#define AT_ERR_PHY_SPEED                7
#define AT_ERR_PHY_RES                  8

#define SPEED_0             0xffff
#define SPEED_10            10
#define SPEED_100           100
#define SPEED_1000          1000
#define HALF_DUPLEX         1
#define FULL_DUPLEX         2

#define MEDIA_TYPE_AUTO_SENSOR			0
#define MEDIA_TYPE_1000M_FULL           1
#define MEDIA_TYPE_100M_FULL		    2	
#define MEDIA_TYPE_100M_HALF			3
#define MEDIA_TYPE_10M_FULL			    4
#define MEDIA_TYPE_10M_HALF			    5

#define ADVERTISE_10_HALF               0x0001
#define ADVERTISE_10_FULL               0x0002
#define ADVERTISE_100_HALF              0x0004
#define ADVERTISE_100_FULL              0x0008
#define ADVERTISE_1000_HALF             0x0010 /* Not used, just FYI */
#define ADVERTISE_1000_FULL             0x0020

#define AUTONEG_ADVERTISE_SPEED_DEFAULT 0x002F /* Everything but 1000-Half */
#define AUTONEG_ADVERTISE_10_100_ALL    0x000F /* All 10/100 speeds*/
#define AUTONEG_ADVERTISE_10_ALL        0x0003 /* 10Mbps Full & Half speeds*/


/* The size (in bytes) of a ethernet packet */
#define ENET_HEADER_SIZE                14
#define MAXIMUM_ETHERNET_FRAME_SIZE     1518 /* with FCS */
#define MINIMUM_ETHERNET_FRAME_SIZE     64   /* with FCS */
#define ETHERNET_FCS_SIZE               4
#define MAX_JUMBO_FRAME_SIZE            0x2000
#define VLAN_SIZE                                               4

#define PHY_AUTO_NEG_TIME               45          /* 4.5 Seconds */
#define PHY_FORCE_TIME                  20          /* 2.0 Seconds */

/* For checksumming , the sum of all words in the EEPROM should equal 0xBABA */
#define EEPROM_SUM                      0xBABA
#define NODE_ADDRESS_SIZE               6


/* TPD definition */
typedef struct _TpdDescr {
	u64         addr;
	u16         buf_len :14;
	u16         dma_int :1;
	u16         tx_int  :1;
	u16         vlan;
	u16         eop     :1;
	u16         ipver   :1;     // 0 : IPV4, 1:IPV6
	u16         ins_vlan:1;
	u16         my_xsum :1;
	u16         segment :1;
	u16         ipxsum  :1;
	u16         tcpxsum :1;
	u16         udpxsum :1;
	u16         vlan_tag:1;
	u16         eth_type:1;
	u16         iphdrlen:4;
	u16         tcphdrlen:4;
	u16         hdr_flag:1;
	u16         tcp_mss :13;
} _AT_ATTRIB_PACK_ TpdDescr;

typedef struct _TpdIPv6Descr {
	u64         addr;
	u16         buf_len :14;
	u16         dma_int :1;
	u16         tx_int  :1;
	u16         vlan;
	u16         eop     :1;
	u16         ipver   :1;     // 0 : IPV4, 1:IPV6
	u16         ins_vlan:1;
	u16         my_xsum :1;
	u16         segment :1;
	u16         ipv6hdrlen_1:3;
	u16         vlan_tag:1;
	u16         eth_type:1;
	u16         ipv6hdrlen_2:4;
	u16         tcphdrlen:4;
	u16         hdr_flag:1;
	u16         tcp_mss :13;
} _AT_ATTRIB_PACK_ TpdIPv6Descr;

// Tpd for custom checksum 
typedef struct _TpdCXsumDescr {
	u64        addr;
	u16        buf_len :14;
	u16        dma_int :1;
	u16        tx_int  :1;
	u16        vlan;
	u16        eop     :1;
	u16        coals   :1;
	u16        ins_vlan:1;
        u16        my_xsum :1;
	u16        segment :1;
	u16        ipxsum  :1;
	u16        tcpxsum :1;
	u16        udpxsum :1;
	u16        vlan_tag:1;
	u16        eth_type:1;
	u16        iphdrlen:4;
	u16        tcphdrlen:2;
	u16        payld_ofs:8;
	u16        psdxsum_ofs:8;
} _AT_ATTRIB_PACK_ TpdCXsumDescr;
#define MAX_TX_BUF_LEN  0x3000

/* RRS(Receive Return Status) definition */
typedef struct _RecvRetStatus {
	u16        seq_num         ;
	u16        hash_lo         ;
	u16        ippld_xsum      ; /* ip payload checksum */
	u16        pkt_len :14     ;
	u16        cpu_n   :2      ;
	// packet flags
	u16        rss_ipv4:1	   ;
	u16        rss_ipv4_tcp:1  ;
	u16        rss_ipv6:1      ;
	u16        rss_ipv6_tcp:1  ;
	u16        ipv6	:1         ;
	u16        ipv4_mf:1       ;
	u16        ipv4_df:1       ;
		
	u16        eth_type:1      ;
	u16        vlan    :1      ;
	u16        err     :1      ;
	u16        ipv4    :1      ;
	u16        udp     :1      ;
	u16        tcp     :1      ;
	u16        bcast   :1      ;
	u16        mcast   :1      ;
	u16        pause   :1      ;
	// error info
	u16        crc     :1      ;
	u16        code    :1      ;
	u16        dribble :1      ;
	u16        runt    :1      ;
	u16        ov      :1      ;
	u16        trunc   :1      ;
	u16        ip_xsum :1      ;
	u16        l4_xsum :1      ;
	u16        length  :1      ;
	u16        dest    :1      ;
	u16        res2    :6      ;
		
	u16        hash_hi ;
	u16        vtag    ; // vlan tag if bit vlan == 1
} _AT_ATTRIB_PACK_ RecvRetStatus;

typedef struct _RxFlags {
	
	// packet flags
	u16        rss_ipv4:1	   ;
	u16        rss_ipv4_tcp:1  ;
	u16        rss_ipv6:1      ;
	u16        rss_ipv6_tcp:1  ;
	u16        ipv6	:1         ;
	u16        ipv4_mf:1       ;
	u16        ipv4_df:1       ;
		
	u16        eth_type:1      ;
	u16        vlan    :1      ;
	u16        err     :1      ;
	u16        ipv4    :1      ;
	u16        udp     :1      ;
	u16        tcp     :1      ;
	u16        bcast   :1      ;
	u16        mcast   :1      ;
	u16        pause   :1      ;
	// error info
	u16        crc     :1      ;
	u16        code    :1      ;
	u16        dribble :1      ;
	u16        runt    :1      ;
	u16        ov      :1      ;
	u16        trunc   :1      ;
	u16        ip_xsum :1      ;
	u16        l4_xsum :1      ;
	u16        length  :1      ;
	u16        dest    :1      ;
	u16        res2    :6      ;

} _AT_ATTRIB_PACK_ RxFlags;                      

typedef enum {
    at_10_half = 0,
    at_10_full = 1,
    at_100_half = 2,
    at_100_full = 3
} at_speed_duplex_type;



typedef enum  {
	at_dma_req_128 = 0,
	at_dma_req_256 = 1,
	at_dma_req_512 = 2,
	at_dma_req_1024 = 3,
	at_dma_req_2048 = 4,
	at_dma_req_4096 = 5
}at_dma_req_block ;

typedef enum {
	at_rrs_disable = 0,
	at_rrs_ipv4 = 1,
	at_rrs_ipv4_tcp = 2,
	at_rrs_ipv6 = 4,
	at_rss_ipv6_tcp = 8
} at_rrs_type;

typedef enum {
	athr_l1e 	  = 0,
	athr_l2e_revA = 1,
	athr_l2e_revB = 2
} at_nic_type;
	

/* Structure containing variables used by the shared code (at_hw.c) */
struct at_hw {
    u8 *hw_addr;           //
    void *back;                 //

	at_rrs_type rrs_type;
	at_dma_req_block dmar_block;
	at_dma_req_block dmaw_block;
	
    u8 preamble_len;

    u16 rx_jumbo_th;
    
    u16 max_frame_size;	
   
    u16 MediaType;
    u16 autoneg_advertised;
    u16 pci_cmd_word;

    u16 mii_autoneg_adv_reg;
    u16 mii_1000t_ctrl_reg;
    
    u32 smb_timer;
    u32 base_cpu;
    u32 indirect_tab;
    u32 mem_rang;
    
    u16 device_id;         //
    u16 vendor_id;         //
    u16 subsystem_id;      //
    u16 subsystem_vendor_id;//
    u8 revision_id;        //

    u8 mac_addr[NODE_ADDRESS_SIZE];//
    u8 perm_mac_addr[NODE_ADDRESS_SIZE];//

//    boolean_t phy_preamble_sup;
    boolean_t phy_configured;
    boolean_t re_autoneg;
    boolean_t emi_ca;   

    at_nic_type  nic_type;

};

#endif//_ATHEROS_HW_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -