I210网卡LINUX的mac,linux i210 网卡驱动解读

从最常见的修改mac address 说起:

section 1: 读mac address

/* Only the MAC addr is required to be present in the iNVM */

switch (offset) {

case NVM_MAC_ADDR:

ret_val = igb_read_invm_word_i210(hw, (u8)offset, &data[0]);

ret_val |= igb_read_invm_word_i210(hw, (u8)offset+1,

&data[1]);

ret_val |= igb_read_invm_word_i210(hw, (u8)offset+2,

&data[2]);

if (ret_val)

hw_dbg("MAC Addr not found in iNVM\n");

break;

mac address 是放在eeprom 最开始的位置:

/* NVM Word Offsets */

#define NVM_COMPAT 0x0003

#define NVM_ID_LED_SETTINGS 0x0004 /* SERDES output amplitude */

#define NVM_VERSION 0x0005

#define NVM_INIT_CONTROL2_REG 0x000F

#define NVM_INIT_CONTROL3_PORT_B 0x0014

#define NVM_INIT_CONTROL3_PORT_A 0x0024

#define NVM_ALT_MAC_ADDR_PTR 0x0037

#define NVM_CHECKSUM_REG 0x003F

#define NVM_COMPATIBILITY_REG_3 0x0003

#define NVM_COMPATIBILITY_BIT_MASK 0x8000

#define NVM_MAC_ADDR 0x0000

#define NVM_SUB_DEV_ID 0x000B

#define NVM_SUB_VEN_ID 0x000C

#define NVM_DEV_ID 0x000D

#define NVM_VEN_ID 0x000E

#define NVM_INIT_CTRL_2 0x000F

#define NVM_INIT_CTRL_4 0x0013

#define NVM_LED_1_CFG 0x001C

#define NVM_LED_0_2_CFG 0x001F

#define NVM_ETRACK_WORD 0x0042

#define NVM_ETRACK_HIWORD 0x0043

#define NVM_COMB_VER_OFF 0x0083

#define NVM_COMB_VER_PTR 0x003d

/**

* igb_set_mac - Change the Ethernet Address of the NIC

* @netdev: network interface device structure

* @p: pointer to an address structure

*

* Returns 0 on success, negative on failure

**/

static int igb_set_mac(struct net_device *netdev, void *p)

{

struct igb_adapter *adapter = netdev_priv(netdev);

struct e1000_hw *hw = &adapter->hw;

struct sockaddr *addr = p;

if (!is_valid_ether_addr(addr->sa_data))

return -EADDRNOTAVAIL;

memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);

memcpy(hw->mac.addr, addr->sa_data, netdev->addr_len);

/* set the correct pool for the new PF MAC address in entry 0 */

igb_rar_set_qsel(adapter, hw->mac.addr, 0,

adapter->vfs_allocated_count);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值