35#include <sys/eventhandler.h>
37#include <sys/kernel.h>
38#include <sys/module.h>
42#include <sys/rwlock.h>
43#include <sys/socket.h>
45#include <netinet/in.h>
78 rw_assert(&s->
lock, RA_WLOCKED);
80 if (atomic_load_acq_int(&e->
refcnt) == 0) {
89 if (memcmp(e->
smac,
smac, ETHER_ADDR_LEN) == 0)
103 atomic_add_int(&e->
refcnt, 1);
121 mtx_assert(&e->
lock, MA_OWNED);
123 MPASS(e->
wrq != NULL);
196 rw_wunlock(&s->
lock);
210 if (atomic_load_acq_int(&e->
refcnt) == 1) {
217 memcpy(e->
smac,
smac, ETHER_ADDR_LEN);
219 mtx_unlock(&e->
lock);
238 rw_init(&s->
lock,
"SMT");
245 mtx_init(&e->
lock,
"SMT_E", NULL, MTX_DEF);
246 atomic_store_rel_int(&e->
refcnt, 0);
261 rw_destroy(&s->
lock);
273 unsigned int tid =
GET_TID(rpl);
279 "Unexpected SMT_WRITE_RPL (%u) for entry at hw_idx %u\n",
283 mtx_unlock(&e->
lock);
307 int rc, i, header = 0;
312 rc = sysctl_wire_old_buffer(req, 0);
316 sb = sbuf_new_for_sysctl(NULL, NULL,
SMT_SIZE, req);
321 for (i = 0; i < smt->
smt_size; i++, e++) {
327 sbuf_printf(sb,
" Idx "
328 "Ethernet address State Users");
331 sbuf_printf(sb,
"\n%4u %02x:%02x:%02x:%02x:%02x:%02x "
337 mtx_unlock(&e->
lock);
340 rc = sbuf_finish(sb);
void commit_wrq_wr(struct sge_wrq *, void *, struct wrq_cookie *)
void * start_wrq_wr(struct sge_wrq *, int, struct wrq_cookie *)
static int chip_id(struct adapter *adap)
#define INIT_TP_WR(w, tid)
uint8_t smac[ETHER_ADDR_LEN]
#define V_SMTW_OVLAN_IDX(x)
#define MK_OPCODE_TID(opcode, tid)
int t4_smt_set_switching(struct adapter *sc, struct smt_entry *e, uint16_t pfvf, uint8_t *smac)
int t4_free_smt(struct smt_data *s)
int t4_init_smt(struct adapter *sc, int flags)
int do_smt_write_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m)
static char smt_state(const struct smt_entry *e)
struct smt_entry * t4_find_or_alloc_sme(struct smt_data *s, uint8_t *smac)
int sysctl_smt(SYSCTL_HANDLER_ARGS)
struct smt_entry * t4_smt_alloc_switching(struct smt_data *s, uint8_t *smac)
int t4_write_sme(struct smt_entry *e)