xref: /linux/drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h (revision 5b361328ca649534d721e4eae20c96ccbe702ce7)
17d6f728cSVishwanathapura, Niranjana #ifndef _OPA_VNIC_ENCAP_H
27d6f728cSVishwanathapura, Niranjana #define _OPA_VNIC_ENCAP_H
37d6f728cSVishwanathapura, Niranjana /*
47d6f728cSVishwanathapura, Niranjana  * Copyright(c) 2017 Intel Corporation.
57d6f728cSVishwanathapura, Niranjana  *
67d6f728cSVishwanathapura, Niranjana  * This file is provided under a dual BSD/GPLv2 license.  When using or
77d6f728cSVishwanathapura, Niranjana  * redistributing this file, you may do so under either license.
87d6f728cSVishwanathapura, Niranjana  *
97d6f728cSVishwanathapura, Niranjana  * GPL LICENSE SUMMARY
107d6f728cSVishwanathapura, Niranjana  *
117d6f728cSVishwanathapura, Niranjana  * This program is free software; you can redistribute it and/or modify
127d6f728cSVishwanathapura, Niranjana  * it under the terms of version 2 of the GNU General Public License as
137d6f728cSVishwanathapura, Niranjana  * published by the Free Software Foundation.
147d6f728cSVishwanathapura, Niranjana  *
157d6f728cSVishwanathapura, Niranjana  * This program is distributed in the hope that it will be useful, but
167d6f728cSVishwanathapura, Niranjana  * WITHOUT ANY WARRANTY; without even the implied warranty of
177d6f728cSVishwanathapura, Niranjana  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
187d6f728cSVishwanathapura, Niranjana  * General Public License for more details.
197d6f728cSVishwanathapura, Niranjana  *
207d6f728cSVishwanathapura, Niranjana  * BSD LICENSE
217d6f728cSVishwanathapura, Niranjana  *
227d6f728cSVishwanathapura, Niranjana  * Redistribution and use in source and binary forms, with or without
237d6f728cSVishwanathapura, Niranjana  * modification, are permitted provided that the following conditions
247d6f728cSVishwanathapura, Niranjana  * are met:
257d6f728cSVishwanathapura, Niranjana  *
267d6f728cSVishwanathapura, Niranjana  *  - Redistributions of source code must retain the above copyright
277d6f728cSVishwanathapura, Niranjana  *    notice, this list of conditions and the following disclaimer.
287d6f728cSVishwanathapura, Niranjana  *  - Redistributions in binary form must reproduce the above copyright
297d6f728cSVishwanathapura, Niranjana  *    notice, this list of conditions and the following disclaimer in
307d6f728cSVishwanathapura, Niranjana  *    the documentation and/or other materials provided with the
317d6f728cSVishwanathapura, Niranjana  *    distribution.
327d6f728cSVishwanathapura, Niranjana  *  - Neither the name of Intel Corporation nor the names of its
337d6f728cSVishwanathapura, Niranjana  *    contributors may be used to endorse or promote products derived
347d6f728cSVishwanathapura, Niranjana  *    from this software without specific prior written permission.
357d6f728cSVishwanathapura, Niranjana  *
367d6f728cSVishwanathapura, Niranjana  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
377d6f728cSVishwanathapura, Niranjana  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
387d6f728cSVishwanathapura, Niranjana  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
397d6f728cSVishwanathapura, Niranjana  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
407d6f728cSVishwanathapura, Niranjana  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
417d6f728cSVishwanathapura, Niranjana  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
427d6f728cSVishwanathapura, Niranjana  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
437d6f728cSVishwanathapura, Niranjana  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
447d6f728cSVishwanathapura, Niranjana  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
457d6f728cSVishwanathapura, Niranjana  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
467d6f728cSVishwanathapura, Niranjana  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
477d6f728cSVishwanathapura, Niranjana  *
487d6f728cSVishwanathapura, Niranjana  */
497d6f728cSVishwanathapura, Niranjana 
507d6f728cSVishwanathapura, Niranjana /*
517d6f728cSVishwanathapura, Niranjana  * This file contains all OPA VNIC declaration required for encapsulation
527d6f728cSVishwanathapura, Niranjana  * and decapsulation of Ethernet packets
537d6f728cSVishwanathapura, Niranjana  */
547d6f728cSVishwanathapura, Niranjana 
5572dc7614SVishwanathapura, Niranjana #include <linux/types.h>
5672dc7614SVishwanathapura, Niranjana #include <rdma/ib_mad.h>
5772dc7614SVishwanathapura, Niranjana 
5872dc7614SVishwanathapura, Niranjana /* EMA class version */
5972dc7614SVishwanathapura, Niranjana #define OPA_EMA_CLASS_VERSION               0x80
6072dc7614SVishwanathapura, Niranjana 
6172dc7614SVishwanathapura, Niranjana /*
6272dc7614SVishwanathapura, Niranjana  * Define the Intel vendor management class for OPA
6372dc7614SVishwanathapura, Niranjana  * ETHERNET MANAGEMENT
6472dc7614SVishwanathapura, Niranjana  */
6572dc7614SVishwanathapura, Niranjana #define OPA_MGMT_CLASS_INTEL_EMA            0x34
6672dc7614SVishwanathapura, Niranjana 
6772dc7614SVishwanathapura, Niranjana /* EM attribute IDs */
6872dc7614SVishwanathapura, Niranjana #define OPA_EM_ATTR_CLASS_PORT_INFO                 0x0001
6972dc7614SVishwanathapura, Niranjana #define OPA_EM_ATTR_VESWPORT_INFO                   0x0011
7072dc7614SVishwanathapura, Niranjana #define OPA_EM_ATTR_VESWPORT_MAC_ENTRIES            0x0012
7172dc7614SVishwanathapura, Niranjana #define OPA_EM_ATTR_IFACE_UCAST_MACS                0x0013
7272dc7614SVishwanathapura, Niranjana #define OPA_EM_ATTR_IFACE_MCAST_MACS                0x0014
7372dc7614SVishwanathapura, Niranjana #define OPA_EM_ATTR_DELETE_VESW                     0x0015
7472dc7614SVishwanathapura, Niranjana #define OPA_EM_ATTR_VESWPORT_SUMMARY_COUNTERS       0x0020
7572dc7614SVishwanathapura, Niranjana #define OPA_EM_ATTR_VESWPORT_ERROR_COUNTERS         0x0022
7672dc7614SVishwanathapura, Niranjana 
777d6f728cSVishwanathapura, Niranjana /* VNIC configured and operational state values */
787d6f728cSVishwanathapura, Niranjana #define OPA_VNIC_STATE_DROP_ALL        0x1
797d6f728cSVishwanathapura, Niranjana #define OPA_VNIC_STATE_FORWARDING      0x3
807d6f728cSVishwanathapura, Niranjana 
817d6f728cSVishwanathapura, Niranjana #define OPA_VESW_MAX_NUM_DEF_PORT   16
827d6f728cSVishwanathapura, Niranjana #define OPA_VNIC_MAX_NUM_PCP        8
837d6f728cSVishwanathapura, Niranjana 
8472dc7614SVishwanathapura, Niranjana #define OPA_VNIC_EMA_DATA    (OPA_MGMT_MAD_SIZE - IB_MGMT_VENDOR_HDR)
8572dc7614SVishwanathapura, Niranjana 
8672dc7614SVishwanathapura, Niranjana /* Defines for vendor specific notice(trap) attributes */
8772dc7614SVishwanathapura, Niranjana #define OPA_INTEL_EMA_NOTICE_TYPE_INFO 0x04
8872dc7614SVishwanathapura, Niranjana 
8972dc7614SVishwanathapura, Niranjana /* INTEL OUI */
9072dc7614SVishwanathapura, Niranjana #define INTEL_OUI_1 0x00
9172dc7614SVishwanathapura, Niranjana #define INTEL_OUI_2 0x06
9272dc7614SVishwanathapura, Niranjana #define INTEL_OUI_3 0x6a
9372dc7614SVishwanathapura, Niranjana 
9472dc7614SVishwanathapura, Niranjana /* Trap opcodes sent from VNIC */
9572dc7614SVishwanathapura, Niranjana #define OPA_VESWPORT_TRAP_IFACE_UCAST_MAC_CHANGE 0x1
9672dc7614SVishwanathapura, Niranjana #define OPA_VESWPORT_TRAP_IFACE_MCAST_MAC_CHANGE 0x2
9772dc7614SVishwanathapura, Niranjana #define OPA_VESWPORT_TRAP_ETH_LINK_STATUS_CHANGE 0x3
9872dc7614SVishwanathapura, Niranjana 
9972dc7614SVishwanathapura, Niranjana #define OPA_VNIC_DLID_SD_IS_SRC_MAC(dlid_sd)  (!!((dlid_sd) & 0x20))
10072dc7614SVishwanathapura, Niranjana #define OPA_VNIC_DLID_SD_GET_DLID(dlid_sd)    ((dlid_sd) >> 8)
10172dc7614SVishwanathapura, Niranjana 
102cfd34f8eSVishwanathapura, Niranjana /* VNIC Ethernet link status */
103cfd34f8eSVishwanathapura, Niranjana #define OPA_VNIC_ETH_LINK_UP     1
104cfd34f8eSVishwanathapura, Niranjana #define OPA_VNIC_ETH_LINK_DOWN   2
105cfd34f8eSVishwanathapura, Niranjana 
106b209a368SNiranjana Vishwanathapura /* routing control */
107b209a368SNiranjana Vishwanathapura #define OPA_VNIC_ENCAP_RC_DEFAULT   0
108b209a368SNiranjana Vishwanathapura #define OPA_VNIC_ENCAP_RC_IPV4      4
109b209a368SNiranjana Vishwanathapura #define OPA_VNIC_ENCAP_RC_IPV4_UDP  8
110b209a368SNiranjana Vishwanathapura #define OPA_VNIC_ENCAP_RC_IPV4_TCP  12
111b209a368SNiranjana Vishwanathapura #define OPA_VNIC_ENCAP_RC_IPV6      16
112b209a368SNiranjana Vishwanathapura #define OPA_VNIC_ENCAP_RC_IPV6_TCP  20
113b209a368SNiranjana Vishwanathapura #define OPA_VNIC_ENCAP_RC_IPV6_UDP  24
114b209a368SNiranjana Vishwanathapura 
115b209a368SNiranjana Vishwanathapura #define OPA_VNIC_ENCAP_RC_EXT(w, b) (((w) >> OPA_VNIC_ENCAP_RC_ ## b) & 0x7)
116b209a368SNiranjana Vishwanathapura 
11772dc7614SVishwanathapura, Niranjana /**
11872dc7614SVishwanathapura, Niranjana  * struct opa_vesw_info - OPA vnic switch information
11972dc7614SVishwanathapura, Niranjana  * @fabric_id: 10-bit fabric id
12072dc7614SVishwanathapura, Niranjana  * @vesw_id: 12-bit virtual ethernet switch id
12172dc7614SVishwanathapura, Niranjana  * @def_port_mask: bitmask of default ports
12272dc7614SVishwanathapura, Niranjana  * @pkey: partition key
12372dc7614SVishwanathapura, Niranjana  * @u_mcast_dlid: unknown multicast dlid
12472dc7614SVishwanathapura, Niranjana  * @u_ucast_dlid: array of unknown unicast dlids
125b209a368SNiranjana Vishwanathapura  * @rc: routing control
12662f1e84eSNiranjana Vishwanathapura  * @eth_mtu: Ethernet MTU
12772dc7614SVishwanathapura, Niranjana  */
12872dc7614SVishwanathapura, Niranjana struct opa_vesw_info {
12972dc7614SVishwanathapura, Niranjana 	__be16  fabric_id;
13072dc7614SVishwanathapura, Niranjana 	__be16  vesw_id;
13172dc7614SVishwanathapura, Niranjana 
13272dc7614SVishwanathapura, Niranjana 	u8      rsvd0[6];
13372dc7614SVishwanathapura, Niranjana 	__be16  def_port_mask;
13472dc7614SVishwanathapura, Niranjana 
13572dc7614SVishwanathapura, Niranjana 	u8      rsvd1[2];
13672dc7614SVishwanathapura, Niranjana 	__be16  pkey;
13772dc7614SVishwanathapura, Niranjana 
13872dc7614SVishwanathapura, Niranjana 	u8      rsvd2[4];
13972dc7614SVishwanathapura, Niranjana 	__be32  u_mcast_dlid;
14072dc7614SVishwanathapura, Niranjana 	__be32  u_ucast_dlid[OPA_VESW_MAX_NUM_DEF_PORT];
14172dc7614SVishwanathapura, Niranjana 
142b209a368SNiranjana Vishwanathapura 	__be32  rc;
143b209a368SNiranjana Vishwanathapura 
144b209a368SNiranjana Vishwanathapura 	u8      rsvd3[56];
14562f1e84eSNiranjana Vishwanathapura 	__be16  eth_mtu;
14672dc7614SVishwanathapura, Niranjana 	u8      rsvd4[2];
14772dc7614SVishwanathapura, Niranjana } __packed;
14872dc7614SVishwanathapura, Niranjana 
14972dc7614SVishwanathapura, Niranjana /**
15072dc7614SVishwanathapura, Niranjana  * struct opa_per_veswport_info - OPA vnic per port information
15172dc7614SVishwanathapura, Niranjana  * @port_num: port number
15272dc7614SVishwanathapura, Niranjana  * @eth_link_status: current ethernet link state
15372dc7614SVishwanathapura, Niranjana  * @base_mac_addr: base mac address
15472dc7614SVishwanathapura, Niranjana  * @config_state: configured port state
15572dc7614SVishwanathapura, Niranjana  * @oper_state: operational port state
15672dc7614SVishwanathapura, Niranjana  * @max_mac_tbl_ent: max number of mac table entries
15772dc7614SVishwanathapura, Niranjana  * @max_smac_ent: max smac entries in mac table
15872dc7614SVishwanathapura, Niranjana  * @mac_tbl_digest: mac table digest
15972dc7614SVishwanathapura, Niranjana  * @encap_slid: base slid for the port
16072dc7614SVishwanathapura, Niranjana  * @pcp_to_sc_uc: sc by pcp index for unicast ethernet packets
16172dc7614SVishwanathapura, Niranjana  * @pcp_to_vl_uc: vl by pcp index for unicast ethernet packets
16272dc7614SVishwanathapura, Niranjana  * @pcp_to_sc_mc: sc by pcp index for multicast ethernet packets
16372dc7614SVishwanathapura, Niranjana  * @pcp_to_vl_mc: vl by pcp index for multicast ethernet packets
16472dc7614SVishwanathapura, Niranjana  * @non_vlan_sc_uc: sc for non-vlan unicast ethernet packets
16572dc7614SVishwanathapura, Niranjana  * @non_vlan_vl_uc: vl for non-vlan unicast ethernet packets
16672dc7614SVishwanathapura, Niranjana  * @non_vlan_sc_mc: sc for non-vlan multicast ethernet packets
16772dc7614SVishwanathapura, Niranjana  * @non_vlan_vl_mc: vl for non-vlan multicast ethernet packets
16872dc7614SVishwanathapura, Niranjana  * @uc_macs_gen_count: generation count for unicast macs list
16972dc7614SVishwanathapura, Niranjana  * @mc_macs_gen_count: generation count for multicast macs list
17072dc7614SVishwanathapura, Niranjana  */
17172dc7614SVishwanathapura, Niranjana struct opa_per_veswport_info {
17272dc7614SVishwanathapura, Niranjana 	__be32  port_num;
17372dc7614SVishwanathapura, Niranjana 
17472dc7614SVishwanathapura, Niranjana 	u8      eth_link_status;
17572dc7614SVishwanathapura, Niranjana 	u8      rsvd0[3];
17672dc7614SVishwanathapura, Niranjana 
17772dc7614SVishwanathapura, Niranjana 	u8      base_mac_addr[ETH_ALEN];
17872dc7614SVishwanathapura, Niranjana 	u8      config_state;
17972dc7614SVishwanathapura, Niranjana 	u8      oper_state;
18072dc7614SVishwanathapura, Niranjana 
18172dc7614SVishwanathapura, Niranjana 	__be16  max_mac_tbl_ent;
18272dc7614SVishwanathapura, Niranjana 	__be16  max_smac_ent;
18372dc7614SVishwanathapura, Niranjana 	__be32  mac_tbl_digest;
18472dc7614SVishwanathapura, Niranjana 	u8      rsvd1[4];
18572dc7614SVishwanathapura, Niranjana 
18672dc7614SVishwanathapura, Niranjana 	__be32  encap_slid;
18772dc7614SVishwanathapura, Niranjana 
18872dc7614SVishwanathapura, Niranjana 	u8      pcp_to_sc_uc[OPA_VNIC_MAX_NUM_PCP];
18972dc7614SVishwanathapura, Niranjana 	u8      pcp_to_vl_uc[OPA_VNIC_MAX_NUM_PCP];
19072dc7614SVishwanathapura, Niranjana 	u8      pcp_to_sc_mc[OPA_VNIC_MAX_NUM_PCP];
19172dc7614SVishwanathapura, Niranjana 	u8      pcp_to_vl_mc[OPA_VNIC_MAX_NUM_PCP];
19272dc7614SVishwanathapura, Niranjana 
19372dc7614SVishwanathapura, Niranjana 	u8      non_vlan_sc_uc;
19472dc7614SVishwanathapura, Niranjana 	u8      non_vlan_vl_uc;
19572dc7614SVishwanathapura, Niranjana 	u8      non_vlan_sc_mc;
19672dc7614SVishwanathapura, Niranjana 	u8      non_vlan_vl_mc;
19772dc7614SVishwanathapura, Niranjana 
19872dc7614SVishwanathapura, Niranjana 	u8      rsvd2[48];
19972dc7614SVishwanathapura, Niranjana 
20072dc7614SVishwanathapura, Niranjana 	__be16  uc_macs_gen_count;
20172dc7614SVishwanathapura, Niranjana 	__be16  mc_macs_gen_count;
20272dc7614SVishwanathapura, Niranjana 
20372dc7614SVishwanathapura, Niranjana 	u8      rsvd3[8];
20472dc7614SVishwanathapura, Niranjana } __packed;
20572dc7614SVishwanathapura, Niranjana 
20672dc7614SVishwanathapura, Niranjana /**
20772dc7614SVishwanathapura, Niranjana  * struct opa_veswport_info - OPA vnic port information
20872dc7614SVishwanathapura, Niranjana  * @vesw: OPA vnic switch information
20972dc7614SVishwanathapura, Niranjana  * @vport: OPA vnic per port information
21072dc7614SVishwanathapura, Niranjana  *
21172dc7614SVishwanathapura, Niranjana  * On host, each of the virtual ethernet ports belongs
21272dc7614SVishwanathapura, Niranjana  * to a different virtual ethernet switches.
21372dc7614SVishwanathapura, Niranjana  */
21472dc7614SVishwanathapura, Niranjana struct opa_veswport_info {
21572dc7614SVishwanathapura, Niranjana 	struct opa_vesw_info          vesw;
21672dc7614SVishwanathapura, Niranjana 	struct opa_per_veswport_info  vport;
21772dc7614SVishwanathapura, Niranjana };
21872dc7614SVishwanathapura, Niranjana 
21972dc7614SVishwanathapura, Niranjana /**
22072dc7614SVishwanathapura, Niranjana  * struct opa_veswport_mactable_entry - single entry in the forwarding table
22172dc7614SVishwanathapura, Niranjana  * @mac_addr: MAC address
22272dc7614SVishwanathapura, Niranjana  * @mac_addr_mask: MAC address bit mask
22372dc7614SVishwanathapura, Niranjana  * @dlid_sd: Matching DLID and side data
22472dc7614SVishwanathapura, Niranjana  *
22572dc7614SVishwanathapura, Niranjana  * On the host each virtual ethernet port will have
22672dc7614SVishwanathapura, Niranjana  * a forwarding table. These tables are used to
22772dc7614SVishwanathapura, Niranjana  * map a MAC to a LID and other data. For more
22872dc7614SVishwanathapura, Niranjana  * details see struct opa_veswport_mactable_entries.
22972dc7614SVishwanathapura, Niranjana  * This is the structure of a single mactable entry
23072dc7614SVishwanathapura, Niranjana  */
23172dc7614SVishwanathapura, Niranjana struct opa_veswport_mactable_entry {
23272dc7614SVishwanathapura, Niranjana 	u8      mac_addr[ETH_ALEN];
23372dc7614SVishwanathapura, Niranjana 	u8      mac_addr_mask[ETH_ALEN];
23472dc7614SVishwanathapura, Niranjana 	__be32  dlid_sd;
23572dc7614SVishwanathapura, Niranjana } __packed;
23672dc7614SVishwanathapura, Niranjana 
23772dc7614SVishwanathapura, Niranjana /**
23872dc7614SVishwanathapura, Niranjana  * struct opa_veswport_mactable - Forwarding table array
23972dc7614SVishwanathapura, Niranjana  * @offset: mac table starting offset
24072dc7614SVishwanathapura, Niranjana  * @num_entries: Number of entries to get or set
24172dc7614SVishwanathapura, Niranjana  * @mac_tbl_digest: mac table digest
24272dc7614SVishwanathapura, Niranjana  * @tbl_entries[]: Array of table entries
24372dc7614SVishwanathapura, Niranjana  *
24472dc7614SVishwanathapura, Niranjana  * The EM sends down this structure in a MAD indicating
24572dc7614SVishwanathapura, Niranjana  * the starting offset in the forwarding table that this
24672dc7614SVishwanathapura, Niranjana  * entry is to be loaded into and the number of entries
24772dc7614SVishwanathapura, Niranjana  * that that this MAD instance contains
24872dc7614SVishwanathapura, Niranjana  * The mac_tbl_digest has been added to this MAD structure. It will be set by
24972dc7614SVishwanathapura, Niranjana  * the EM and it will be used by the EM to check if there are any
25072dc7614SVishwanathapura, Niranjana  * discrepancies with this value and the value
25172dc7614SVishwanathapura, Niranjana  * maintained by the EM in the case of VNIC port being deleted or unloaded
25272dc7614SVishwanathapura, Niranjana  * A new instantiation of a VNIC will always have a value of zero.
25372dc7614SVishwanathapura, Niranjana  * This value is stored as part of the vnic adapter structure and will be
25472dc7614SVishwanathapura, Niranjana  * accessed by the GET and SET routines for both the mactable entries and the
25572dc7614SVishwanathapura, Niranjana  * veswport info.
25672dc7614SVishwanathapura, Niranjana  */
25772dc7614SVishwanathapura, Niranjana struct opa_veswport_mactable {
25872dc7614SVishwanathapura, Niranjana 	__be16                              offset;
25972dc7614SVishwanathapura, Niranjana 	__be16                              num_entries;
26072dc7614SVishwanathapura, Niranjana 	__be32                              mac_tbl_digest;
261*5b361328SGustavo A. R. Silva 	struct opa_veswport_mactable_entry  tbl_entries[];
26272dc7614SVishwanathapura, Niranjana } __packed;
26372dc7614SVishwanathapura, Niranjana 
26472dc7614SVishwanathapura, Niranjana /**
26572dc7614SVishwanathapura, Niranjana  * struct opa_veswport_summary_counters - summary counters
26672dc7614SVishwanathapura, Niranjana  * @vp_instance: vport instance on the OPA port
26772dc7614SVishwanathapura, Niranjana  * @vesw_id: virtual ethernet switch id
26872dc7614SVishwanathapura, Niranjana  * @veswport_num: virtual ethernet switch port number
26972dc7614SVishwanathapura, Niranjana  * @tx_errors: transmit errors
27072dc7614SVishwanathapura, Niranjana  * @rx_errors: receive errors
27172dc7614SVishwanathapura, Niranjana  * @tx_packets: transmit packets
27272dc7614SVishwanathapura, Niranjana  * @rx_packets: receive packets
27372dc7614SVishwanathapura, Niranjana  * @tx_bytes: transmit bytes
27472dc7614SVishwanathapura, Niranjana  * @rx_bytes: receive bytes
27572dc7614SVishwanathapura, Niranjana  * @tx_unicast: unicast packets transmitted
27672dc7614SVishwanathapura, Niranjana  * @tx_mcastbcast: multicast/broadcast packets transmitted
27772dc7614SVishwanathapura, Niranjana  * @tx_untagged: non-vlan packets transmitted
27872dc7614SVishwanathapura, Niranjana  * @tx_vlan: vlan packets transmitted
27972dc7614SVishwanathapura, Niranjana  * @tx_64_size: transmit packet length is 64 bytes
28072dc7614SVishwanathapura, Niranjana  * @tx_65_127: transmit packet length is >=65 and < 127 bytes
28172dc7614SVishwanathapura, Niranjana  * @tx_128_255: transmit packet length is >=128 and < 255 bytes
28272dc7614SVishwanathapura, Niranjana  * @tx_256_511: transmit packet length is >=256 and < 511 bytes
28372dc7614SVishwanathapura, Niranjana  * @tx_512_1023: transmit packet length is >=512 and < 1023 bytes
28472dc7614SVishwanathapura, Niranjana  * @tx_1024_1518: transmit packet length is >=1024 and < 1518 bytes
28572dc7614SVishwanathapura, Niranjana  * @tx_1519_max: transmit packet length >= 1519 bytes
28672dc7614SVishwanathapura, Niranjana  * @rx_unicast: unicast packets received
28772dc7614SVishwanathapura, Niranjana  * @rx_mcastbcast: multicast/broadcast packets received
28872dc7614SVishwanathapura, Niranjana  * @rx_untagged: non-vlan packets received
28972dc7614SVishwanathapura, Niranjana  * @rx_vlan: vlan packets received
29072dc7614SVishwanathapura, Niranjana  * @rx_64_size: received packet length is 64 bytes
29172dc7614SVishwanathapura, Niranjana  * @rx_65_127: received packet length is >=65 and < 127 bytes
29272dc7614SVishwanathapura, Niranjana  * @rx_128_255: received packet length is >=128 and < 255 bytes
29372dc7614SVishwanathapura, Niranjana  * @rx_256_511: received packet length is >=256 and < 511 bytes
29472dc7614SVishwanathapura, Niranjana  * @rx_512_1023: received packet length is >=512 and < 1023 bytes
29572dc7614SVishwanathapura, Niranjana  * @rx_1024_1518: received packet length is >=1024 and < 1518 bytes
29672dc7614SVishwanathapura, Niranjana  * @rx_1519_max: received packet length >= 1519 bytes
29772dc7614SVishwanathapura, Niranjana  *
29872dc7614SVishwanathapura, Niranjana  * All the above are counters of corresponding conditions.
29972dc7614SVishwanathapura, Niranjana  */
30072dc7614SVishwanathapura, Niranjana struct opa_veswport_summary_counters {
30172dc7614SVishwanathapura, Niranjana 	__be16  vp_instance;
30272dc7614SVishwanathapura, Niranjana 	__be16  vesw_id;
30372dc7614SVishwanathapura, Niranjana 	__be32  veswport_num;
30472dc7614SVishwanathapura, Niranjana 
30572dc7614SVishwanathapura, Niranjana 	__be64  tx_errors;
30672dc7614SVishwanathapura, Niranjana 	__be64  rx_errors;
30772dc7614SVishwanathapura, Niranjana 	__be64  tx_packets;
30872dc7614SVishwanathapura, Niranjana 	__be64  rx_packets;
30972dc7614SVishwanathapura, Niranjana 	__be64  tx_bytes;
31072dc7614SVishwanathapura, Niranjana 	__be64  rx_bytes;
31172dc7614SVishwanathapura, Niranjana 
31272dc7614SVishwanathapura, Niranjana 	__be64  tx_unicast;
31372dc7614SVishwanathapura, Niranjana 	__be64  tx_mcastbcast;
31472dc7614SVishwanathapura, Niranjana 
31572dc7614SVishwanathapura, Niranjana 	__be64  tx_untagged;
31672dc7614SVishwanathapura, Niranjana 	__be64  tx_vlan;
31772dc7614SVishwanathapura, Niranjana 
31872dc7614SVishwanathapura, Niranjana 	__be64  tx_64_size;
31972dc7614SVishwanathapura, Niranjana 	__be64  tx_65_127;
32072dc7614SVishwanathapura, Niranjana 	__be64  tx_128_255;
32172dc7614SVishwanathapura, Niranjana 	__be64  tx_256_511;
32272dc7614SVishwanathapura, Niranjana 	__be64  tx_512_1023;
32372dc7614SVishwanathapura, Niranjana 	__be64  tx_1024_1518;
32472dc7614SVishwanathapura, Niranjana 	__be64  tx_1519_max;
32572dc7614SVishwanathapura, Niranjana 
32672dc7614SVishwanathapura, Niranjana 	__be64  rx_unicast;
32772dc7614SVishwanathapura, Niranjana 	__be64  rx_mcastbcast;
32872dc7614SVishwanathapura, Niranjana 
32972dc7614SVishwanathapura, Niranjana 	__be64  rx_untagged;
33072dc7614SVishwanathapura, Niranjana 	__be64  rx_vlan;
33172dc7614SVishwanathapura, Niranjana 
33272dc7614SVishwanathapura, Niranjana 	__be64  rx_64_size;
33372dc7614SVishwanathapura, Niranjana 	__be64  rx_65_127;
33472dc7614SVishwanathapura, Niranjana 	__be64  rx_128_255;
33572dc7614SVishwanathapura, Niranjana 	__be64  rx_256_511;
33672dc7614SVishwanathapura, Niranjana 	__be64  rx_512_1023;
33772dc7614SVishwanathapura, Niranjana 	__be64  rx_1024_1518;
33872dc7614SVishwanathapura, Niranjana 	__be64  rx_1519_max;
33972dc7614SVishwanathapura, Niranjana 
34072dc7614SVishwanathapura, Niranjana 	__be64  reserved[16];
34172dc7614SVishwanathapura, Niranjana } __packed;
34272dc7614SVishwanathapura, Niranjana 
34372dc7614SVishwanathapura, Niranjana /**
34472dc7614SVishwanathapura, Niranjana  * struct opa_veswport_error_counters - error counters
34572dc7614SVishwanathapura, Niranjana  * @vp_instance: vport instance on the OPA port
34672dc7614SVishwanathapura, Niranjana  * @vesw_id: virtual ethernet switch id
34772dc7614SVishwanathapura, Niranjana  * @veswport_num: virtual ethernet switch port number
34872dc7614SVishwanathapura, Niranjana  * @tx_errors: transmit errors
34972dc7614SVishwanathapura, Niranjana  * @rx_errors: receive errors
35072dc7614SVishwanathapura, Niranjana  * @tx_smac_filt: smac filter errors
35172dc7614SVishwanathapura, Niranjana  * @tx_dlid_zero: transmit packets with invalid dlid
35272dc7614SVishwanathapura, Niranjana  * @tx_logic: other transmit errors
35372dc7614SVishwanathapura, Niranjana  * @tx_drop_state: packet tansmission in non-forward port state
35472dc7614SVishwanathapura, Niranjana  * @rx_bad_veswid: received packet with invalid vesw id
35572dc7614SVishwanathapura, Niranjana  * @rx_runt: received ethernet packet with length < 64 bytes
35672dc7614SVishwanathapura, Niranjana  * @rx_oversize: received ethernet packet with length > MTU size
35772dc7614SVishwanathapura, Niranjana  * @rx_eth_down: received packets when interface is down
35872dc7614SVishwanathapura, Niranjana  * @rx_drop_state: received packets in non-forwarding port state
35972dc7614SVishwanathapura, Niranjana  * @rx_logic: other receive errors
36072dc7614SVishwanathapura, Niranjana  *
3617f04c71fSDillon Brock  * All the above are counters of corresponding error conditions.
36272dc7614SVishwanathapura, Niranjana  */
36372dc7614SVishwanathapura, Niranjana struct opa_veswport_error_counters {
36472dc7614SVishwanathapura, Niranjana 	__be16  vp_instance;
36572dc7614SVishwanathapura, Niranjana 	__be16  vesw_id;
36672dc7614SVishwanathapura, Niranjana 	__be32  veswport_num;
36772dc7614SVishwanathapura, Niranjana 
36872dc7614SVishwanathapura, Niranjana 	__be64  tx_errors;
36972dc7614SVishwanathapura, Niranjana 	__be64  rx_errors;
37072dc7614SVishwanathapura, Niranjana 
37172dc7614SVishwanathapura, Niranjana 	__be64  rsvd0;
37272dc7614SVishwanathapura, Niranjana 	__be64  tx_smac_filt;
37372dc7614SVishwanathapura, Niranjana 	__be64  rsvd1;
37472dc7614SVishwanathapura, Niranjana 	__be64  rsvd2;
37572dc7614SVishwanathapura, Niranjana 	__be64  rsvd3;
37672dc7614SVishwanathapura, Niranjana 	__be64  tx_dlid_zero;
37772dc7614SVishwanathapura, Niranjana 	__be64  rsvd4;
37872dc7614SVishwanathapura, Niranjana 	__be64  tx_logic;
37972dc7614SVishwanathapura, Niranjana 	__be64  rsvd5;
38072dc7614SVishwanathapura, Niranjana 	__be64  tx_drop_state;
38172dc7614SVishwanathapura, Niranjana 
38272dc7614SVishwanathapura, Niranjana 	__be64  rx_bad_veswid;
38372dc7614SVishwanathapura, Niranjana 	__be64  rsvd6;
38472dc7614SVishwanathapura, Niranjana 	__be64  rx_runt;
38572dc7614SVishwanathapura, Niranjana 	__be64  rx_oversize;
38672dc7614SVishwanathapura, Niranjana 	__be64  rsvd7;
38772dc7614SVishwanathapura, Niranjana 	__be64  rx_eth_down;
38872dc7614SVishwanathapura, Niranjana 	__be64  rx_drop_state;
38972dc7614SVishwanathapura, Niranjana 	__be64  rx_logic;
39072dc7614SVishwanathapura, Niranjana 	__be64  rsvd8;
39172dc7614SVishwanathapura, Niranjana 
39272dc7614SVishwanathapura, Niranjana 	__be64  rsvd9[16];
39372dc7614SVishwanathapura, Niranjana } __packed;
39472dc7614SVishwanathapura, Niranjana 
39572dc7614SVishwanathapura, Niranjana /**
39672dc7614SVishwanathapura, Niranjana  * struct opa_veswport_trap - Trap message sent to EM by VNIC
39772dc7614SVishwanathapura, Niranjana  * @fabric_id: 10 bit fabric id
39872dc7614SVishwanathapura, Niranjana  * @veswid: 12 bit virtual ethernet switch id
39972dc7614SVishwanathapura, Niranjana  * @veswportnum: logical port number on the Virtual switch
40072dc7614SVishwanathapura, Niranjana  * @opaportnum: physical port num (redundant on host)
40172dc7614SVishwanathapura, Niranjana  * @veswportindex: switch port index on opa port 0 based
40272dc7614SVishwanathapura, Niranjana  * @opcode: operation
40372dc7614SVishwanathapura, Niranjana  * @reserved: 32 bit for alignment
40472dc7614SVishwanathapura, Niranjana  *
40572dc7614SVishwanathapura, Niranjana  * The VNIC will send trap messages to the Ethernet manager to
40672dc7614SVishwanathapura, Niranjana  * inform it about changes to the VNIC config, behaviour etc.
40772dc7614SVishwanathapura, Niranjana  * This is the format of the trap payload.
40872dc7614SVishwanathapura, Niranjana  */
40972dc7614SVishwanathapura, Niranjana struct opa_veswport_trap {
41072dc7614SVishwanathapura, Niranjana 	__be16  fabric_id;
41172dc7614SVishwanathapura, Niranjana 	__be16  veswid;
41272dc7614SVishwanathapura, Niranjana 	__be32  veswportnum;
41372dc7614SVishwanathapura, Niranjana 	__be16  opaportnum;
41472dc7614SVishwanathapura, Niranjana 	u8      veswportindex;
41572dc7614SVishwanathapura, Niranjana 	u8      opcode;
41672dc7614SVishwanathapura, Niranjana 	__be32  reserved;
41772dc7614SVishwanathapura, Niranjana } __packed;
41872dc7614SVishwanathapura, Niranjana 
41972dc7614SVishwanathapura, Niranjana /**
42072dc7614SVishwanathapura, Niranjana  * struct opa_vnic_iface_macs_entry - single entry in the mac list
42172dc7614SVishwanathapura, Niranjana  * @mac_addr: MAC address
42272dc7614SVishwanathapura, Niranjana  */
42372dc7614SVishwanathapura, Niranjana struct opa_vnic_iface_mac_entry {
42472dc7614SVishwanathapura, Niranjana 	u8 mac_addr[ETH_ALEN];
42572dc7614SVishwanathapura, Niranjana };
42672dc7614SVishwanathapura, Niranjana 
42772dc7614SVishwanathapura, Niranjana /**
42872dc7614SVishwanathapura, Niranjana  * struct opa_veswport_iface_macs - Msg to set globally administered MAC
42972dc7614SVishwanathapura, Niranjana  * @start_idx: position of first entry (0 based)
43072dc7614SVishwanathapura, Niranjana  * @num_macs_in_msg: number of MACs in this message
43172dc7614SVishwanathapura, Niranjana  * @tot_macs_in_lst: The total number of MACs the agent has
43272dc7614SVishwanathapura, Niranjana  * @gen_count: gen_count to indicate change
43372dc7614SVishwanathapura, Niranjana  * @entry: The mac list entry
43472dc7614SVishwanathapura, Niranjana  *
43572dc7614SVishwanathapura, Niranjana  * Same attribute IDS and attribute modifiers as in locally administered
43672dc7614SVishwanathapura, Niranjana  * addresses used to set globally administered addresses
43772dc7614SVishwanathapura, Niranjana  */
43872dc7614SVishwanathapura, Niranjana struct opa_veswport_iface_macs {
43972dc7614SVishwanathapura, Niranjana 	__be16 start_idx;
44072dc7614SVishwanathapura, Niranjana 	__be16 num_macs_in_msg;
44172dc7614SVishwanathapura, Niranjana 	__be16 tot_macs_in_lst;
44272dc7614SVishwanathapura, Niranjana 	__be16 gen_count;
443*5b361328SGustavo A. R. Silva 	struct opa_vnic_iface_mac_entry entry[];
44472dc7614SVishwanathapura, Niranjana } __packed;
44572dc7614SVishwanathapura, Niranjana 
44672dc7614SVishwanathapura, Niranjana /**
44772dc7614SVishwanathapura, Niranjana  * struct opa_vnic_vema_mad - Generic VEMA MAD
44872dc7614SVishwanathapura, Niranjana  * @mad_hdr: Generic MAD header
44972dc7614SVishwanathapura, Niranjana  * @rmpp_hdr: RMPP header for vendor specific MADs
45072dc7614SVishwanathapura, Niranjana  * @oui: Unique org identifier
45172dc7614SVishwanathapura, Niranjana  * @data: MAD data
45272dc7614SVishwanathapura, Niranjana  */
45372dc7614SVishwanathapura, Niranjana struct opa_vnic_vema_mad {
45472dc7614SVishwanathapura, Niranjana 	struct ib_mad_hdr  mad_hdr;
45572dc7614SVishwanathapura, Niranjana 	struct ib_rmpp_hdr rmpp_hdr;
45672dc7614SVishwanathapura, Niranjana 	u8                 reserved;
45772dc7614SVishwanathapura, Niranjana 	u8                 oui[3];
45872dc7614SVishwanathapura, Niranjana 	u8                 data[OPA_VNIC_EMA_DATA];
45972dc7614SVishwanathapura, Niranjana };
46072dc7614SVishwanathapura, Niranjana 
46172dc7614SVishwanathapura, Niranjana /**
46272dc7614SVishwanathapura, Niranjana  * struct opa_vnic_notice_attr - Generic Notice MAD
46372dc7614SVishwanathapura, Niranjana  * @gen_type: Generic/Specific bit and type of notice
46472dc7614SVishwanathapura, Niranjana  * @oui_1: Vendor ID byte 1
46572dc7614SVishwanathapura, Niranjana  * @oui_2: Vendor ID byte 2
46672dc7614SVishwanathapura, Niranjana  * @oui_3: Vendor ID byte 3
46772dc7614SVishwanathapura, Niranjana  * @trap_num: Trap number
46872dc7614SVishwanathapura, Niranjana  * @toggle_count: Notice toggle bit and count value
46972dc7614SVishwanathapura, Niranjana  * @issuer_lid: Trap issuer's lid
47072dc7614SVishwanathapura, Niranjana  * @issuer_gid: Issuer GID (only if Report method)
47172dc7614SVishwanathapura, Niranjana  * @raw_data: Trap message body
47272dc7614SVishwanathapura, Niranjana  */
47372dc7614SVishwanathapura, Niranjana struct opa_vnic_notice_attr {
47472dc7614SVishwanathapura, Niranjana 	u8     gen_type;
47572dc7614SVishwanathapura, Niranjana 	u8     oui_1;
47672dc7614SVishwanathapura, Niranjana 	u8     oui_2;
47772dc7614SVishwanathapura, Niranjana 	u8     oui_3;
47872dc7614SVishwanathapura, Niranjana 	__be16 trap_num;
47972dc7614SVishwanathapura, Niranjana 	__be16 toggle_count;
48072dc7614SVishwanathapura, Niranjana 	__be32 issuer_lid;
48172dc7614SVishwanathapura, Niranjana 	__be32 reserved;
48272dc7614SVishwanathapura, Niranjana 	u8     issuer_gid[16];
48372dc7614SVishwanathapura, Niranjana 	u8     raw_data[64];
48472dc7614SVishwanathapura, Niranjana } __packed;
48572dc7614SVishwanathapura, Niranjana 
48672dc7614SVishwanathapura, Niranjana /**
48772dc7614SVishwanathapura, Niranjana  * struct opa_vnic_vema_mad_trap - Generic VEMA MAD Trap
48872dc7614SVishwanathapura, Niranjana  * @mad_hdr: Generic MAD header
48972dc7614SVishwanathapura, Niranjana  * @rmpp_hdr: RMPP header for vendor specific MADs
49072dc7614SVishwanathapura, Niranjana  * @oui: Unique org identifier
49172dc7614SVishwanathapura, Niranjana  * @notice: Notice structure
49272dc7614SVishwanathapura, Niranjana  */
49372dc7614SVishwanathapura, Niranjana struct opa_vnic_vema_mad_trap {
49472dc7614SVishwanathapura, Niranjana 	struct ib_mad_hdr            mad_hdr;
49572dc7614SVishwanathapura, Niranjana 	struct ib_rmpp_hdr           rmpp_hdr;
49672dc7614SVishwanathapura, Niranjana 	u8                           reserved;
49772dc7614SVishwanathapura, Niranjana 	u8                           oui[3];
49872dc7614SVishwanathapura, Niranjana 	struct opa_vnic_notice_attr  notice;
49972dc7614SVishwanathapura, Niranjana };
50072dc7614SVishwanathapura, Niranjana 
5017d6f728cSVishwanathapura, Niranjana #endif /* _OPA_VNIC_ENCAP_H */
502