Lines Matching refs:mact_entry
242 struct sparx5_mact_entry *mact_entry; in alloc_mact_entry() local
244 mact_entry = devm_kzalloc(sparx5->dev, in alloc_mact_entry()
245 sizeof(*mact_entry), GFP_ATOMIC); in alloc_mact_entry()
246 if (!mact_entry) in alloc_mact_entry()
249 memcpy(mact_entry->mac, mac, ETH_ALEN); in alloc_mact_entry()
250 mact_entry->vid = vid; in alloc_mact_entry()
251 mact_entry->port = port_index; in alloc_mact_entry()
252 return mact_entry; in alloc_mact_entry()
259 struct sparx5_mact_entry *mact_entry; in find_mact_entry() local
263 list_for_each_entry(mact_entry, &sparx5->mact_entries, list) { in find_mact_entry()
264 if (mact_entry->vid == vid && in find_mact_entry()
265 ether_addr_equal(mac, mact_entry->mac) && in find_mact_entry()
266 mact_entry->port == port_index) { in find_mact_entry()
267 res = mact_entry; in find_mact_entry()
292 struct sparx5_mact_entry *mact_entry; in sparx5_add_mact_entry() local
305 mact_entry = find_mact_entry(sparx5, addr, vid, port->portno); in sparx5_add_mact_entry()
306 if (mact_entry) in sparx5_add_mact_entry()
312 mact_entry = alloc_mact_entry(sparx5, addr, vid, port->portno); in sparx5_add_mact_entry()
313 if (!mact_entry) in sparx5_add_mact_entry()
317 list_add_tail(&mact_entry->list, &sparx5->mact_entries); in sparx5_add_mact_entry()
324 if (mact_entry->flags == 0) { in sparx5_add_mact_entry()
325 mact_entry->flags |= MAC_ENT_LOCK; /* Don't age this */ in sparx5_add_mact_entry()
337 struct sparx5_mact_entry *mact_entry, *tmp; in sparx5_del_mact_entry() local
343 list_for_each_entry_safe(mact_entry, tmp, &sparx5->mact_entries, in sparx5_del_mact_entry()
345 if ((vid == 0 || mact_entry->vid == vid) && in sparx5_del_mact_entry()
346 ether_addr_equal(addr, mact_entry->mac)) { in sparx5_del_mact_entry()
347 list_del(&mact_entry->list); in sparx5_del_mact_entry()
348 devm_kfree(sparx5->dev, mact_entry); in sparx5_del_mact_entry()
350 sparx5_mact_forget(sparx5, addr, mact_entry->vid); in sparx5_del_mact_entry()
362 struct sparx5_mact_entry *mact_entry; in sparx5_mact_handle_entry() local
378 list_for_each_entry(mact_entry, &sparx5->mact_entries, list) { in sparx5_mact_handle_entry()
379 if (mact_entry->vid == vid && in sparx5_mact_handle_entry()
380 ether_addr_equal(mac, mact_entry->mac)) { in sparx5_mact_handle_entry()
382 mact_entry->flags |= MAC_ENT_ALIVE; in sparx5_mact_handle_entry()
383 if (mact_entry->port != port) { in sparx5_mact_handle_entry()
385 mact_entry->port, port); in sparx5_mact_handle_entry()
386 mact_entry->port = port; in sparx5_mact_handle_entry()
387 mact_entry->flags |= MAC_ENT_MOVED; in sparx5_mact_handle_entry()
395 if (found && !(mact_entry->flags & MAC_ENT_MOVED)) in sparx5_mact_handle_entry()
401 mact_entry = alloc_mact_entry(sparx5, mac, vid, port); in sparx5_mact_handle_entry()
402 if (!mact_entry) in sparx5_mact_handle_entry()
405 mact_entry->flags |= MAC_ENT_ALIVE; in sparx5_mact_handle_entry()
407 list_add_tail(&mact_entry->list, &sparx5->mact_entries); in sparx5_mact_handle_entry()
422 struct sparx5_mact_entry *mact_entry, *tmp; in sparx5_mact_pull_work() local
430 list_for_each_entry(mact_entry, &sparx5->mact_entries, list) in sparx5_mact_pull_work()
431 mact_entry->flags &= MAC_ENT_LOCK; in sparx5_mact_pull_work()
455 list_for_each_entry_safe(mact_entry, tmp, &sparx5->mact_entries, in sparx5_mact_pull_work()
458 if (mact_entry->flags & (MAC_ENT_ALIVE | MAC_ENT_LOCK)) in sparx5_mact_pull_work()
462 mact_entry->mac, mact_entry->vid, in sparx5_mact_pull_work()
463 sparx5->ports[mact_entry->port]->ndev, in sparx5_mact_pull_work()
466 list_del(&mact_entry->list); in sparx5_mact_pull_work()
467 devm_kfree(sparx5->dev, mact_entry); in sparx5_mact_pull_work()