|
@@ -344,8 +344,10 @@ static void link_start(struct net_device *dev)
|
|
|
|
|
|
init_rx_mode(&rm, dev, dev->mc_list);
|
|
|
t3_mac_reset(mac);
|
|
|
+ t3_mac_set_num_ucast(mac, MAX_MAC_IDX);
|
|
|
t3_mac_set_mtu(mac, dev->mtu);
|
|
|
- t3_mac_set_address(mac, 0, dev->dev_addr);
|
|
|
+ t3_mac_set_address(mac, LAN_MAC_IDX, dev->dev_addr);
|
|
|
+ t3_mac_set_address(mac, SAN_MAC_IDX, pi->iscsic.mac_addr);
|
|
|
t3_mac_set_rx_mode(mac, &rm);
|
|
|
t3_link_start(&pi->phy, mac, &pi->link_config);
|
|
|
t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
|
|
@@ -903,6 +905,7 @@ static inline int offload_tx(struct t3cdev *tdev, struct sk_buff *skb)
|
|
|
static int write_smt_entry(struct adapter *adapter, int idx)
|
|
|
{
|
|
|
struct cpl_smt_write_req *req;
|
|
|
+ struct port_info *pi = netdev_priv(adapter->port[idx]);
|
|
|
struct sk_buff *skb = alloc_skb(sizeof(*req), GFP_KERNEL);
|
|
|
|
|
|
if (!skb)
|
|
@@ -913,8 +916,8 @@ static int write_smt_entry(struct adapter *adapter, int idx)
|
|
|
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, idx));
|
|
|
req->mtu_idx = NMTUS - 1; /* should be 0 but there's a T3 bug */
|
|
|
req->iff = idx;
|
|
|
- memset(req->src_mac1, 0, sizeof(req->src_mac1));
|
|
|
memcpy(req->src_mac0, adapter->port[idx]->dev_addr, ETH_ALEN);
|
|
|
+ memcpy(req->src_mac1, pi->iscsic.mac_addr, ETH_ALEN);
|
|
|
skb->priority = 1;
|
|
|
offload_tx(&adapter->tdev, skb);
|
|
|
return 0;
|
|
@@ -2516,7 +2519,7 @@ static int cxgb_set_mac_addr(struct net_device *dev, void *p)
|
|
|
return -EINVAL;
|
|
|
|
|
|
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
|
|
|
- t3_mac_set_address(&pi->mac, 0, dev->dev_addr);
|
|
|
+ t3_mac_set_address(&pi->mac, LAN_MAC_IDX, dev->dev_addr);
|
|
|
if (offload_running(adapter))
|
|
|
write_smt_entry(adapter, pi->port_id);
|
|
|
return 0;
|
|
@@ -2654,7 +2657,7 @@ static void check_t3b2_mac(struct adapter *adapter)
|
|
|
struct cmac *mac = &p->mac;
|
|
|
|
|
|
t3_mac_set_mtu(mac, dev->mtu);
|
|
|
- t3_mac_set_address(mac, 0, dev->dev_addr);
|
|
|
+ t3_mac_set_address(mac, LAN_MAC_IDX, dev->dev_addr);
|
|
|
cxgb_set_rxmode(dev);
|
|
|
t3_link_start(&p->phy, mac, &p->link_config);
|
|
|
t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
|
|
@@ -3112,6 +3115,14 @@ static const struct net_device_ops cxgb_netdev_ops = {
|
|
|
#endif
|
|
|
};
|
|
|
|
|
|
+static void __devinit cxgb3_init_iscsi_mac(struct net_device *dev)
|
|
|
+{
|
|
|
+ struct port_info *pi = netdev_priv(dev);
|
|
|
+
|
|
|
+ memcpy(pi->iscsic.mac_addr, dev->dev_addr, ETH_ALEN);
|
|
|
+ pi->iscsic.mac_addr[3] |= 0x80;
|
|
|
+}
|
|
|
+
|
|
|
static int __devinit init_one(struct pci_dev *pdev,
|
|
|
const struct pci_device_id *ent)
|
|
|
{
|
|
@@ -3270,6 +3281,9 @@ static int __devinit init_one(struct pci_dev *pdev,
|
|
|
goto out_free_dev;
|
|
|
}
|
|
|
|
|
|
+ for_each_port(adapter, i)
|
|
|
+ cxgb3_init_iscsi_mac(adapter->port[i]);
|
|
|
+
|
|
|
/* Driver's ready. Reflect it on LEDs */
|
|
|
t3_led_ready(adapter);
|
|
|
|