1*3bdb376eSKumar Sanghvi /* 2*3bdb376eSKumar Sanghvi * This file is part of the Chelsio T4/T5/T6 Ethernet driver for Linux. 3*3bdb376eSKumar Sanghvi * 4*3bdb376eSKumar Sanghvi * Copyright (c) 2017 Chelsio Communications, Inc. All rights reserved. 5*3bdb376eSKumar Sanghvi * 6*3bdb376eSKumar Sanghvi * This software is available to you under a choice of one of two 7*3bdb376eSKumar Sanghvi * licenses. You may choose to be licensed under the terms of the GNU 8*3bdb376eSKumar Sanghvi * General Public License (GPL) Version 2, available from the file 9*3bdb376eSKumar Sanghvi * COPYING in the main directory of this source tree, or the 10*3bdb376eSKumar Sanghvi * OpenIB.org BSD license below: 11*3bdb376eSKumar Sanghvi * 12*3bdb376eSKumar Sanghvi * Redistribution and use in source and binary forms, with or 13*3bdb376eSKumar Sanghvi * without modification, are permitted provided that the following 14*3bdb376eSKumar Sanghvi * conditions are met: 15*3bdb376eSKumar Sanghvi * 16*3bdb376eSKumar Sanghvi * - Redistributions of source code must retain the above 17*3bdb376eSKumar Sanghvi * copyright notice, this list of conditions and the following 18*3bdb376eSKumar Sanghvi * disclaimer. 19*3bdb376eSKumar Sanghvi * 20*3bdb376eSKumar Sanghvi * - Redistributions in binary form must reproduce the above 21*3bdb376eSKumar Sanghvi * copyright notice, this list of conditions and the following 22*3bdb376eSKumar Sanghvi * disclaimer in the documentation and/or other materials 23*3bdb376eSKumar Sanghvi * provided with the distribution. 24*3bdb376eSKumar Sanghvi * 25*3bdb376eSKumar Sanghvi * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26*3bdb376eSKumar Sanghvi * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27*3bdb376eSKumar Sanghvi * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28*3bdb376eSKumar Sanghvi * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29*3bdb376eSKumar Sanghvi * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30*3bdb376eSKumar Sanghvi * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31*3bdb376eSKumar Sanghvi * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32*3bdb376eSKumar Sanghvi * SOFTWARE. 33*3bdb376eSKumar Sanghvi */ 34*3bdb376eSKumar Sanghvi 35*3bdb376eSKumar Sanghvi #ifndef __CXGB4_SMT_H 36*3bdb376eSKumar Sanghvi #define __CXGB4_SMT_H 37*3bdb376eSKumar Sanghvi 38*3bdb376eSKumar Sanghvi #include <linux/spinlock.h> 39*3bdb376eSKumar Sanghvi #include <linux/if_ether.h> 40*3bdb376eSKumar Sanghvi #include <linux/atomic.h> 41*3bdb376eSKumar Sanghvi 42*3bdb376eSKumar Sanghvi struct adapter; 43*3bdb376eSKumar Sanghvi struct cpl_smt_write_rpl; 44*3bdb376eSKumar Sanghvi 45*3bdb376eSKumar Sanghvi /* SMT related handling. Heavily adapted based on l2t ops in l2t.h/l2t.c 46*3bdb376eSKumar Sanghvi */ 47*3bdb376eSKumar Sanghvi enum { 48*3bdb376eSKumar Sanghvi SMT_STATE_SWITCHING, 49*3bdb376eSKumar Sanghvi SMT_STATE_UNUSED, 50*3bdb376eSKumar Sanghvi SMT_STATE_ERROR 51*3bdb376eSKumar Sanghvi }; 52*3bdb376eSKumar Sanghvi 53*3bdb376eSKumar Sanghvi enum { 54*3bdb376eSKumar Sanghvi SMT_SIZE = 256 55*3bdb376eSKumar Sanghvi }; 56*3bdb376eSKumar Sanghvi 57*3bdb376eSKumar Sanghvi struct smt_entry { 58*3bdb376eSKumar Sanghvi u16 state; 59*3bdb376eSKumar Sanghvi u16 idx; 60*3bdb376eSKumar Sanghvi u16 pfvf; 61*3bdb376eSKumar Sanghvi u8 src_mac[ETH_ALEN]; 62*3bdb376eSKumar Sanghvi atomic_t refcnt; 63*3bdb376eSKumar Sanghvi spinlock_t lock; /* protect smt entry add,removal */ 64*3bdb376eSKumar Sanghvi }; 65*3bdb376eSKumar Sanghvi 66*3bdb376eSKumar Sanghvi struct smt_data { 67*3bdb376eSKumar Sanghvi unsigned int smt_size; 68*3bdb376eSKumar Sanghvi rwlock_t lock; 69*3bdb376eSKumar Sanghvi struct smt_entry smtab[0]; 70*3bdb376eSKumar Sanghvi }; 71*3bdb376eSKumar Sanghvi 72*3bdb376eSKumar Sanghvi struct smt_data *t4_init_smt(void); 73*3bdb376eSKumar Sanghvi struct smt_entry *cxgb4_smt_alloc_switching(struct net_device *dev, u8 *smac); 74*3bdb376eSKumar Sanghvi void cxgb4_smt_release(struct smt_entry *e); 75*3bdb376eSKumar Sanghvi void do_smt_write_rpl(struct adapter *p, const struct cpl_smt_write_rpl *rpl); 76*3bdb376eSKumar Sanghvi #endif /* __CXGB4_SMT_H */ 77