qedr: Add LL2 RoCE interface
Add light L2 interface for RoCE. Signed-off-by: Rajesh Borundia <rajesh.borundia@cavium.com> Signed-off-by: Ram Amrani <Ram.Amrani@cavium.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Родитель
afa0e13be7
Коммит
1d1424c8f8
|
@ -724,6 +724,38 @@ static void qedr_shutdown(struct qedr_dev *dev)
|
|||
qedr_remove(dev);
|
||||
}
|
||||
|
||||
static void qedr_mac_address_change(struct qedr_dev *dev)
|
||||
{
|
||||
union ib_gid *sgid = &dev->sgid_tbl[0];
|
||||
u8 guid[8], mac_addr[6];
|
||||
int rc;
|
||||
|
||||
/* Update SGID */
|
||||
ether_addr_copy(&mac_addr[0], dev->ndev->dev_addr);
|
||||
guid[0] = mac_addr[0] ^ 2;
|
||||
guid[1] = mac_addr[1];
|
||||
guid[2] = mac_addr[2];
|
||||
guid[3] = 0xff;
|
||||
guid[4] = 0xfe;
|
||||
guid[5] = mac_addr[3];
|
||||
guid[6] = mac_addr[4];
|
||||
guid[7] = mac_addr[5];
|
||||
sgid->global.subnet_prefix = cpu_to_be64(0xfe80000000000000LL);
|
||||
memcpy(&sgid->raw[8], guid, sizeof(guid));
|
||||
|
||||
/* Update LL2 */
|
||||
rc = dev->ops->roce_ll2_set_mac_filter(dev->cdev,
|
||||
dev->gsi_ll2_mac_address,
|
||||
dev->ndev->dev_addr);
|
||||
|
||||
ether_addr_copy(dev->gsi_ll2_mac_address, dev->ndev->dev_addr);
|
||||
|
||||
qedr_ib_dispatch_event(dev, 1, IB_EVENT_GID_CHANGE);
|
||||
|
||||
if (rc)
|
||||
DP_ERR(dev, "Error updating mac filter\n");
|
||||
}
|
||||
|
||||
/* event handling via NIC driver ensures that all the NIC specific
|
||||
* initialization done before RoCE driver notifies
|
||||
* event to stack.
|
||||
|
@ -741,7 +773,7 @@ static void qedr_notify(struct qedr_dev *dev, enum qede_roce_event event)
|
|||
qedr_shutdown(dev);
|
||||
break;
|
||||
case QEDE_CHANGE_ADDR:
|
||||
qedr_ib_dispatch_event(dev, 1, IB_EVENT_GID_CHANGE);
|
||||
qedr_mac_address_change(dev);
|
||||
break;
|
||||
default:
|
||||
pr_err("Event not supported\n");
|
||||
|
|
|
@ -147,7 +147,7 @@ struct qedr_dev {
|
|||
u8 dp_level;
|
||||
u8 num_hwfns;
|
||||
uint wq_multiplier;
|
||||
|
||||
u8 gsi_ll2_mac_address[ETH_ALEN];
|
||||
};
|
||||
|
||||
#define QEDR_MAX_SQ_PBL (0x8000)
|
||||
|
|
Загрузка…
Ссылка в новой задаче