MCPcopy Create free account
hub / github.com/F-Stack/f-stack / write_smt_entry

Function write_smt_entry

dpdk/drivers/net/cxgbe/smt.c:27–107  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

25}
26
27static int write_smt_entry(struct rte_eth_dev *dev, struct smt_entry *e)
28{
29 unsigned int port_id = ethdev2pinfo(dev)->port_id;
30 struct adapter *adap = ethdev2adap(dev);
31 struct cpl_t6_smt_write_req *t6req;
32 struct smt_data *s = adap->smt;
33 struct cpl_smt_write_req *req;
34 struct sge_ctrl_txq *ctrlq;
35 struct rte_mbuf *mbuf;
36 u8 row;
37
38 ctrlq = &adap->sge.ctrlq[port_id];
39 mbuf = rte_pktmbuf_alloc(ctrlq->mb_pool);
40 if (!mbuf)
41 return -ENOMEM;
42
43 if (CHELSIO_CHIP_VERSION(adap->params.chip) <= CHELSIO_T5) {
44 mbuf->data_len = sizeof(*req);
45 mbuf->pkt_len = mbuf->data_len;
46
47 /* Source MAC Table (SMT) contains 256 SMAC entries
48 * organized in 128 rows of 2 entries each.
49 */
50 req = rte_pktmbuf_mtod(mbuf, struct cpl_smt_write_req *);
51 INIT_TP_WR(req, 0);
52
53 /* Each row contains an SMAC pair.
54 * LSB selects the SMAC entry within a row
55 */
56 if (e->idx & 1) {
57 req->pfvf1 = 0x0;
58 rte_memcpy(req->src_mac1, e->src_mac,
59 RTE_ETHER_ADDR_LEN);
60
61 /* fill pfvf0/src_mac0 with entry
62 * at prev index from smt-tab.
63 */
64 req->pfvf0 = 0x0;
65 rte_memcpy(req->src_mac0, s->smtab[e->idx - 1].src_mac,
66 RTE_ETHER_ADDR_LEN);
67 } else {
68 req->pfvf0 = 0x0;
69 rte_memcpy(req->src_mac0, e->src_mac,
70 RTE_ETHER_ADDR_LEN);
71
72 /* fill pfvf1/src_mac1 with entry
73 * at next index from smt-tab
74 */
75 req->pfvf1 = 0x0;
76 rte_memcpy(req->src_mac1, s->smtab[e->idx + 1].src_mac,
77 RTE_ETHER_ADDR_LEN);
78 }
79 row = (e->hw_idx >> 1);
80 } else {
81 mbuf->data_len = sizeof(*t6req);
82 mbuf->pkt_len = mbuf->data_len;
83
84 /* Source MAC Table (SMT) contains 256 SMAC entries */

Callers 1

t4_smt_alloc_switchingFunction · 0.85

Calls 5

ethdev2pinfoFunction · 0.85
ethdev2adapFunction · 0.85
rte_pktmbuf_allocFunction · 0.85
t4_mgmt_txFunction · 0.85
rte_memcpyFunction · 0.50

Tested by

no test coverage detected