aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-06-24 19:49:49 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-06-24 19:49:49 -0400
commite0456717e483bb8a9431b80a5bdc99a928b9b003 (patch)
tree5eb5add2bafd1f20326d70f5cb3b711d00a40b10 /include/linux
parent98ec21a01896751b673b6c731ca8881daa8b2c6d (diff)
parent1ea2d020ba477cb7011a7174e8501a9e04a325d4 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Pull networking updates from David Miller: 1) Add TX fast path in mac80211, from Johannes Berg. 2) Add TSO/GRO support to ibmveth, from Thomas Falcon 3) Move away from cached routes in ipv6, just like ipv4, from Martin KaFai Lau. 4) Lots of new rhashtable tests, from Thomas Graf. 5) Run ingress qdisc lockless, from Alexei Starovoitov. 6) Allow servers to fetch TCP packet headers for SYN packets of new connections, for fingerprinting. From Eric Dumazet. 7) Add mode parameter to pktgen, for testing receive. From Alexei Starovoitov. 8) Cache access optimizations via simplifications of build_skb(), from Alexander Duyck. 9) Move page frag allocator under mm/, also from Alexander. 10) Add xmit_more support to hv_netvsc, from KY Srinivasan. 11) Add a counter guard in case we try to perform endless reclassify loops in the packet scheduler. 12) Extern flow dissector to be programmable and use it in new "Flower" classifier. From Jiri Pirko. 13) AF_PACKET fanout rollover fixes, performance improvements, and new statistics. From Willem de Bruijn. 14) Add netdev driver for GENEVE tunnels, from John W Linville. 15) Add ingress netfilter hooks and filtering, from Pablo Neira Ayuso. 16) Fix handling of epoll edge triggers in TCP, from Eric Dumazet. 17) Add an ECN retry fallback for the initial TCP handshake, from Daniel Borkmann. 18) Add tail call support to BPF, from Alexei Starovoitov. 19) Add several pktgen helper scripts, from Jesper Dangaard Brouer. 20) Add zerocopy support to AF_UNIX, from Hannes Frederic Sowa. 21) Favor even port numbers for allocation to connect() requests, and odd port numbers for bind(0), in an effort to help avoid ip_local_port_range exhaustion. From Eric Dumazet. 22) Add Cavium ThunderX driver, from Sunil Goutham. 23) Allow bpf programs to access skb_iif and dev->ifindex SKB metadata, from Alexei Starovoitov. 24) Add support for T6 chips in cxgb4vf driver, from Hariprasad Shenai. 25) Double TCP Small Queues default to 256K to accomodate situations like the XEN driver and wireless aggregation. From Wei Liu. 26) Add more entropy inputs to flow dissector, from Tom Herbert. 27) Add CDG congestion control algorithm to TCP, from Kenneth Klette Jonassen. 28) Convert ipset over to RCU locking, from Jozsef Kadlecsik. 29) Track and act upon link status of ipv4 route nexthops, from Andy Gospodarek. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1670 commits) bridge: vlan: flush the dynamically learned entries on port vlan delete bridge: multicast: add a comment to br_port_state_selection about blocking state net: inet_diag: export IPV6_V6ONLY sockopt stmmac: troubleshoot unexpected bits in des0 & des1 net: ipv4 sysctl option to ignore routes when nexthop link is down net: track link-status of ipv4 nexthops net: switchdev: ignore unsupported bridge flags net: Cavium: Fix MAC address setting in shutdown state drivers: net: xgene: fix for ACPI support without ACPI ip: report the original address of ICMP messages net/mlx5e: Prefetch skb data on RX net/mlx5e: Pop cq outside mlx5e_get_cqe net/mlx5e: Remove mlx5e_cq.sqrq back-pointer net/mlx5e: Remove extra spaces net/mlx5e: Avoid TX CQE generation if more xmit packets expected net/mlx5e: Avoid redundant dev_kfree_skb() upon NOP completion net/mlx5e: Remove re-assignment of wq type in mlx5e_enable_rq() net/mlx5e: Use skb_shinfo(skb)->gso_segs rather than counting them net/mlx5e: Static mapping of netdev priv resources to/from netdev TX queues net/mlx4_en: Use HW counters for rx/tx bytes/packets in PF device ...
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/bcma/bcma.h9
-rw-r--r--include/linux/bcma/bcma_driver_pci.h11
-rw-r--r--include/linux/bpf.h36
-rw-r--r--include/linux/brcmphy.h7
-rw-r--r--include/linux/etherdevice.h42
-rw-r--r--include/linux/filter.h30
-rw-r--r--include/linux/gfp.h5
-rw-r--r--include/linux/ieee802154.h16
-rw-r--r--include/linux/if_link.h9
-rw-r--r--include/linux/if_macvlan.h2
-rw-r--r--include/linux/if_pppox.h2
-rw-r--r--include/linux/if_vlan.h28
-rw-r--r--include/linux/igmp.h1
-rw-r--r--include/linux/inet_diag.h1
-rw-r--r--include/linux/inetdevice.h3
-rw-r--r--include/linux/mdio-gpio.h3
-rw-r--r--include/linux/mlx4/cmd.h6
-rw-r--r--include/linux/mlx4/device.h21
-rw-r--r--include/linux/mlx5/cq.h3
-rw-r--r--include/linux/mlx5/device.h215
-rw-r--r--include/linux/mlx5/driver.h171
-rw-r--r--include/linux/mlx5/flow_table.h54
-rw-r--r--include/linux/mlx5/mlx5_ifc.h6584
-rw-r--r--include/linux/mlx5/qp.h25
-rw-r--r--include/linux/mlx5/vport.h55
-rw-r--r--include/linux/mm_types.h18
-rw-r--r--include/linux/net.h3
-rw-r--r--include/linux/netdev_features.h5
-rw-r--r--include/linux/netdevice.h31
-rw-r--r--include/linux/netfilter.h45
-rw-r--r--include/linux/netfilter/ipset/ip_set.h61
-rw-r--r--include/linux/netfilter/ipset/ip_set_comment.h38
-rw-r--r--include/linux/netfilter/ipset/ip_set_timeout.h27
-rw-r--r--include/linux/netfilter/x_tables.h60
-rw-r--r--include/linux/netfilter_bridge.h7
-rw-r--r--include/linux/netfilter_defs.h9
-rw-r--r--include/linux/netfilter_ingress.h41
-rw-r--r--include/linux/netfilter_ipv6.h3
-rw-r--r--include/linux/netlink.h2
-rw-r--r--include/linux/pci_ids.h2
-rw-r--r--include/linux/phy.h14
-rw-r--r--include/linux/platform_data/nfcmrvl.h40
-rw-r--r--include/linux/platform_data/st-nci.h (renamed from include/linux/platform_data/st21nfcb.h)14
-rw-r--r--include/linux/platform_data/st_nci.h29
-rw-r--r--include/linux/rtnetlink.h16
-rw-r--r--include/linux/skbuff.h77
-rw-r--r--include/linux/sock_diag.h42
-rw-r--r--include/linux/spi/cc2520.h1
-rw-r--r--include/linux/stmmac.h1
-rw-r--r--include/linux/tcp.h15
-rw-r--r--include/linux/u64_stats_sync.h7
51 files changed, 7598 insertions, 349 deletions
diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h
index e34f906647d3..2ff4a9961e1d 100644
--- a/include/linux/bcma/bcma.h
+++ b/include/linux/bcma/bcma.h
@@ -305,6 +305,15 @@ int __bcma_driver_register(struct bcma_driver *drv, struct module *owner);
305 305
306extern void bcma_driver_unregister(struct bcma_driver *drv); 306extern void bcma_driver_unregister(struct bcma_driver *drv);
307 307
308/* module_bcma_driver() - Helper macro for drivers that don't do
309 * anything special in module init/exit. This eliminates a lot of
310 * boilerplate. Each module may only use this macro once, and
311 * calling it replaces module_init() and module_exit()
312 */
313#define module_bcma_driver(__bcma_driver) \
314 module_driver(__bcma_driver, bcma_driver_register, \
315 bcma_driver_unregister)
316
308/* Set a fallback SPROM. 317/* Set a fallback SPROM.
309 * See kdoc at the function definition for complete documentation. */ 318 * See kdoc at the function definition for complete documentation. */
310extern int bcma_arch_register_fallback_sprom( 319extern int bcma_arch_register_fallback_sprom(
diff --git a/include/linux/bcma/bcma_driver_pci.h b/include/linux/bcma/bcma_driver_pci.h
index 5ba6918ca20b..9657f11d48a7 100644
--- a/include/linux/bcma/bcma_driver_pci.h
+++ b/include/linux/bcma/bcma_driver_pci.h
@@ -246,7 +246,18 @@ static inline void bcma_core_pci_power_save(struct bcma_bus *bus, bool up)
246} 246}
247#endif 247#endif
248 248
249#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
249extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); 250extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
250extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); 251extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
252#else
253static inline int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev)
254{
255 return -ENOTSUPP;
256}
257static inline int bcma_core_pci_plat_dev_init(struct pci_dev *dev)
258{
259 return -ENOTSUPP;
260}
261#endif
251 262
252#endif /* LINUX_BCMA_DRIVER_PCI_H_ */ 263#endif /* LINUX_BCMA_DRIVER_PCI_H_ */
diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index d5cda067115a..4383476a0d48 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -105,7 +105,8 @@ struct bpf_verifier_ops {
105 */ 105 */
106 bool (*is_valid_access)(int off, int size, enum bpf_access_type type); 106 bool (*is_valid_access)(int off, int size, enum bpf_access_type type);
107 107
108 u32 (*convert_ctx_access)(int dst_reg, int src_reg, int ctx_off, 108 u32 (*convert_ctx_access)(enum bpf_access_type type, int dst_reg,
109 int src_reg, int ctx_off,
109 struct bpf_insn *insn); 110 struct bpf_insn *insn);
110}; 111};
111 112
@@ -123,15 +124,41 @@ struct bpf_prog_aux {
123 const struct bpf_verifier_ops *ops; 124 const struct bpf_verifier_ops *ops;
124 struct bpf_map **used_maps; 125 struct bpf_map **used_maps;
125 struct bpf_prog *prog; 126 struct bpf_prog *prog;
126 struct work_struct work; 127 union {
128 struct work_struct work;
129 struct rcu_head rcu;
130 };
127}; 131};
128 132
133struct bpf_array {
134 struct bpf_map map;
135 u32 elem_size;
136 /* 'ownership' of prog_array is claimed by the first program that
137 * is going to use this map or by the first program which FD is stored
138 * in the map to make sure that all callers and callees have the same
139 * prog_type and JITed flag
140 */
141 enum bpf_prog_type owner_prog_type;
142 bool owner_jited;
143 union {
144 char value[0] __aligned(8);
145 struct bpf_prog *prog[0] __aligned(8);
146 };
147};
148#define MAX_TAIL_CALL_CNT 32
149
150u64 bpf_tail_call(u64 ctx, u64 r2, u64 index, u64 r4, u64 r5);
151void bpf_prog_array_map_clear(struct bpf_map *map);
152bool bpf_prog_array_compatible(struct bpf_array *array, const struct bpf_prog *fp);
153const struct bpf_func_proto *bpf_get_trace_printk_proto(void);
154
129#ifdef CONFIG_BPF_SYSCALL 155#ifdef CONFIG_BPF_SYSCALL
130void bpf_register_prog_type(struct bpf_prog_type_list *tl); 156void bpf_register_prog_type(struct bpf_prog_type_list *tl);
131void bpf_register_map_type(struct bpf_map_type_list *tl); 157void bpf_register_map_type(struct bpf_map_type_list *tl);
132 158
133struct bpf_prog *bpf_prog_get(u32 ufd); 159struct bpf_prog *bpf_prog_get(u32 ufd);
134void bpf_prog_put(struct bpf_prog *prog); 160void bpf_prog_put(struct bpf_prog *prog);
161void bpf_prog_put_rcu(struct bpf_prog *prog);
135 162
136struct bpf_map *bpf_map_get(struct fd f); 163struct bpf_map *bpf_map_get(struct fd f);
137void bpf_map_put(struct bpf_map *map); 164void bpf_map_put(struct bpf_map *map);
@@ -160,5 +187,10 @@ extern const struct bpf_func_proto bpf_map_delete_elem_proto;
160 187
161extern const struct bpf_func_proto bpf_get_prandom_u32_proto; 188extern const struct bpf_func_proto bpf_get_prandom_u32_proto;
162extern const struct bpf_func_proto bpf_get_smp_processor_id_proto; 189extern const struct bpf_func_proto bpf_get_smp_processor_id_proto;
190extern const struct bpf_func_proto bpf_tail_call_proto;
191extern const struct bpf_func_proto bpf_ktime_get_ns_proto;
192extern const struct bpf_func_proto bpf_get_current_pid_tgid_proto;
193extern const struct bpf_func_proto bpf_get_current_uid_gid_proto;
194extern const struct bpf_func_proto bpf_get_current_comm_proto;
163 195
164#endif /* _LINUX_BPF_H */ 196#endif /* _LINUX_BPF_H */
diff --git a/include/linux/brcmphy.h b/include/linux/brcmphy.h
index 656da2a12ffe..697ca7795bd9 100644
--- a/include/linux/brcmphy.h
+++ b/include/linux/brcmphy.h
@@ -1,6 +1,13 @@
1#ifndef _LINUX_BRCMPHY_H 1#ifndef _LINUX_BRCMPHY_H
2#define _LINUX_BRCMPHY_H 2#define _LINUX_BRCMPHY_H
3 3
4#include <linux/phy.h>
5
6/* All Broadcom Ethernet switches have a pseudo-PHY at address 30 which is used
7 * to configure the switch internal registers via MDIO accesses.
8 */
9#define BRCM_PSEUDO_PHY_ADDR 30
10
4#define PHY_ID_BCM50610 0x0143bd60 11#define PHY_ID_BCM50610 0x0143bd60
5#define PHY_ID_BCM50610M 0x0143bd70 12#define PHY_ID_BCM50610M 0x0143bd70
6#define PHY_ID_BCM5241 0x0143bc30 13#define PHY_ID_BCM5241 0x0143bc30
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
index 606563ef8a72..9012f8775208 100644
--- a/include/linux/etherdevice.h
+++ b/include/linux/etherdevice.h
@@ -110,7 +110,29 @@ static inline bool is_zero_ether_addr(const u8 *addr)
110 */ 110 */
111static inline bool is_multicast_ether_addr(const u8 *addr) 111static inline bool is_multicast_ether_addr(const u8 *addr)
112{ 112{
113 return 0x01 & addr[0]; 113#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
114 u32 a = *(const u32 *)addr;
115#else
116 u16 a = *(const u16 *)addr;
117#endif
118#ifdef __BIG_ENDIAN
119 return 0x01 & (a >> ((sizeof(a) * 8) - 8));
120#else
121 return 0x01 & a;
122#endif
123}
124
125static inline bool is_multicast_ether_addr_64bits(const u8 addr[6+2])
126{
127#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64
128#ifdef __BIG_ENDIAN
129 return 0x01 & ((*(const u64 *)addr) >> 56);
130#else
131 return 0x01 & (*(const u64 *)addr);
132#endif
133#else
134 return is_multicast_ether_addr(addr);
135#endif
114} 136}
115 137
116/** 138/**
@@ -169,6 +191,24 @@ static inline bool is_valid_ether_addr(const u8 *addr)
169} 191}
170 192
171/** 193/**
194 * eth_proto_is_802_3 - Determine if a given Ethertype/length is a protocol
195 * @proto: Ethertype/length value to be tested
196 *
197 * Check that the value from the Ethertype/length field is a valid Ethertype.
198 *
199 * Return true if the valid is an 802.3 supported Ethertype.
200 */
201static inline bool eth_proto_is_802_3(__be16 proto)
202{
203#ifndef __BIG_ENDIAN
204 /* if CPU is little endian mask off bits representing LSB */
205 proto &= htons(0xFF00);
206#endif
207 /* cast both to u16 and compare since LSB can be ignored */
208 return (__force u16)proto >= (__force u16)htons(ETH_P_802_3_MIN);
209}
210
211/**
172 * eth_random_addr - Generate software assigned random Ethernet address 212 * eth_random_addr - Generate software assigned random Ethernet address
173 * @addr: Pointer to a six-byte array containing the Ethernet address 213 * @addr: Pointer to a six-byte array containing the Ethernet address
174 * 214 *
diff --git a/include/linux/filter.h b/include/linux/filter.h
index fa11b3a367be..17724f6ea983 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -207,6 +207,16 @@ struct bpf_prog_aux;
207 .off = OFF, \ 207 .off = OFF, \
208 .imm = 0 }) 208 .imm = 0 })
209 209
210/* Atomic memory add, *(uint *)(dst_reg + off16) += src_reg */
211
212#define BPF_STX_XADD(SIZE, DST, SRC, OFF) \
213 ((struct bpf_insn) { \
214 .code = BPF_STX | BPF_SIZE(SIZE) | BPF_XADD, \
215 .dst_reg = DST, \
216 .src_reg = SRC, \
217 .off = OFF, \
218 .imm = 0 })
219
210/* Memory store, *(uint *) (dst_reg + off16) = imm32 */ 220/* Memory store, *(uint *) (dst_reg + off16) = imm32 */
211 221
212#define BPF_ST_MEM(SIZE, DST, OFF, IMM) \ 222#define BPF_ST_MEM(SIZE, DST, OFF, IMM) \
@@ -267,6 +277,14 @@ struct bpf_prog_aux;
267 .off = 0, \ 277 .off = 0, \
268 .imm = 0 }) 278 .imm = 0 })
269 279
280/* Internal classic blocks for direct assignment */
281
282#define __BPF_STMT(CODE, K) \
283 ((struct sock_filter) BPF_STMT(CODE, K))
284
285#define __BPF_JUMP(CODE, K, JT, JF) \
286 ((struct sock_filter) BPF_JUMP(CODE, K, JT, JF))
287
270#define bytes_to_bpf_size(bytes) \ 288#define bytes_to_bpf_size(bytes) \
271({ \ 289({ \
272 int bpf_size = -EINVAL; \ 290 int bpf_size = -EINVAL; \
@@ -360,12 +378,9 @@ static inline void bpf_prog_unlock_ro(struct bpf_prog *fp)
360 378
361int sk_filter(struct sock *sk, struct sk_buff *skb); 379int sk_filter(struct sock *sk, struct sk_buff *skb);
362 380
363void bpf_prog_select_runtime(struct bpf_prog *fp); 381int bpf_prog_select_runtime(struct bpf_prog *fp);
364void bpf_prog_free(struct bpf_prog *fp); 382void bpf_prog_free(struct bpf_prog *fp);
365 383
366int bpf_convert_filter(struct sock_filter *prog, int len,
367 struct bpf_insn *new_prog, int *new_len);
368
369struct bpf_prog *bpf_prog_alloc(unsigned int size, gfp_t gfp_extra_flags); 384struct bpf_prog *bpf_prog_alloc(unsigned int size, gfp_t gfp_extra_flags);
370struct bpf_prog *bpf_prog_realloc(struct bpf_prog *fp_old, unsigned int size, 385struct bpf_prog *bpf_prog_realloc(struct bpf_prog *fp_old, unsigned int size,
371 gfp_t gfp_extra_flags); 386 gfp_t gfp_extra_flags);
@@ -377,14 +392,17 @@ static inline void bpf_prog_unlock_free(struct bpf_prog *fp)
377 __bpf_prog_free(fp); 392 __bpf_prog_free(fp);
378} 393}
379 394
395typedef int (*bpf_aux_classic_check_t)(struct sock_filter *filter,
396 unsigned int flen);
397
380int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog); 398int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog);
399int bpf_prog_create_from_user(struct bpf_prog **pfp, struct sock_fprog *fprog,
400 bpf_aux_classic_check_t trans);
381void bpf_prog_destroy(struct bpf_prog *fp); 401void bpf_prog_destroy(struct bpf_prog *fp);
382 402
383int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); 403int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
384int sk_attach_bpf(u32 ufd, struct sock *sk); 404int sk_attach_bpf(u32 ufd, struct sock *sk);
385int sk_detach_filter(struct sock *sk); 405int sk_detach_filter(struct sock *sk);
386
387int bpf_check_classic(const struct sock_filter *filter, unsigned int flen);
388int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, 406int sk_get_filter(struct sock *sk, struct sock_filter __user *filter,
389 unsigned int len); 407 unsigned int len);
390 408
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 15928f0647e4..6ba7cf23748f 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -368,6 +368,11 @@ extern void free_pages(unsigned long addr, unsigned int order);
368extern void free_hot_cold_page(struct page *page, bool cold); 368extern void free_hot_cold_page(struct page *page, bool cold);
369extern void free_hot_cold_page_list(struct list_head *list, bool cold); 369extern void free_hot_cold_page_list(struct list_head *list, bool cold);
370 370
371struct page_frag_cache;
372extern void *__alloc_page_frag(struct page_frag_cache *nc,
373 unsigned int fragsz, gfp_t gfp_mask);
374extern void __free_page_frag(void *addr);
375
371extern void __free_kmem_pages(struct page *page, unsigned int order); 376extern void __free_kmem_pages(struct page *page, unsigned int order);
372extern void free_kmem_pages(unsigned long addr, unsigned int order); 377extern void free_kmem_pages(unsigned long addr, unsigned int order);
373 378
diff --git a/include/linux/ieee802154.h b/include/linux/ieee802154.h
index 8872ca103d06..1dc1f4ed4001 100644
--- a/include/linux/ieee802154.h
+++ b/include/linux/ieee802154.h
@@ -225,15 +225,13 @@ static inline bool ieee802154_is_valid_psdu_len(const u8 len)
225 * ieee802154_is_valid_psdu_len - check if extended addr is valid 225 * ieee802154_is_valid_psdu_len - check if extended addr is valid
226 * @addr: extended addr to check 226 * @addr: extended addr to check
227 */ 227 */
228static inline bool ieee802154_is_valid_extended_addr(const __le64 addr) 228static inline bool ieee802154_is_valid_extended_unicast_addr(const __le64 addr)
229{ 229{
230 /* These EUI-64 addresses are reserved by IEEE. 0xffffffffffffffff 230 /* Bail out if the address is all zero, or if the group
231 * is used internally as extended to short address broadcast mapping. 231 * address bit is set.
232 * This is currently a workaround because neighbor discovery can't
233 * deal with short addresses types right now.
234 */ 232 */
235 return ((addr != cpu_to_le64(0x0000000000000000ULL)) && 233 return ((addr != cpu_to_le64(0x0000000000000000ULL)) &&
236 (addr != cpu_to_le64(0xffffffffffffffffULL))); 234 !(addr & cpu_to_le64(0x0100000000000000ULL)));
237} 235}
238 236
239/** 237/**
@@ -244,9 +242,9 @@ static inline void ieee802154_random_extended_addr(__le64 *addr)
244{ 242{
245 get_random_bytes(addr, IEEE802154_EXTENDED_ADDR_LEN); 243 get_random_bytes(addr, IEEE802154_EXTENDED_ADDR_LEN);
246 244
247 /* toggle some bit if we hit an invalid extended addr */ 245 /* clear the group bit, and set the locally administered bit */
248 if (!ieee802154_is_valid_extended_addr(*addr)) 246 ((u8 *)addr)[IEEE802154_EXTENDED_ADDR_LEN - 1] &= ~0x01;
249 ((u8 *)addr)[IEEE802154_EXTENDED_ADDR_LEN - 1] ^= 0x01; 247 ((u8 *)addr)[IEEE802154_EXTENDED_ADDR_LEN - 1] |= 0x02;
250} 248}
251 249
252#endif /* LINUX_IEEE802154_H */ 250#endif /* LINUX_IEEE802154_H */
diff --git a/include/linux/if_link.h b/include/linux/if_link.h
index da4929927f69..ae5d0d22955d 100644
--- a/include/linux/if_link.h
+++ b/include/linux/if_link.h
@@ -5,6 +5,15 @@
5 5
6 6
7/* We don't want this structure exposed to user space */ 7/* We don't want this structure exposed to user space */
8struct ifla_vf_stats {
9 __u64 rx_packets;
10 __u64 tx_packets;
11 __u64 rx_bytes;
12 __u64 tx_bytes;
13 __u64 broadcast;
14 __u64 multicast;
15};
16
8struct ifla_vf_info { 17struct ifla_vf_info {
9 __u32 vf; 18 __u32 vf;
10 __u8 mac[32]; 19 __u8 mac[32];
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h
index 6f6929ea8a0c..a4ccc3122f93 100644
--- a/include/linux/if_macvlan.h
+++ b/include/linux/if_macvlan.h
@@ -29,7 +29,7 @@ struct macvtap_queue;
29 * Maximum times a macvtap device can be opened. This can be used to 29 * Maximum times a macvtap device can be opened. This can be used to
30 * configure the number of receive queue, e.g. for multiqueue virtio. 30 * configure the number of receive queue, e.g. for multiqueue virtio.
31 */ 31 */
32#define MAX_MACVTAP_QUEUES 16 32#define MAX_MACVTAP_QUEUES 256
33 33
34#define MACVLAN_MC_FILTER_BITS 8 34#define MACVLAN_MC_FILTER_BITS 8
35#define MACVLAN_MC_FILTER_SZ (1 << MACVLAN_MC_FILTER_BITS) 35#define MACVLAN_MC_FILTER_SZ (1 << MACVLAN_MC_FILTER_BITS)
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h
index 66a7d7600f43..b49cf923becc 100644
--- a/include/linux/if_pppox.h
+++ b/include/linux/if_pppox.h
@@ -74,7 +74,7 @@ static inline struct sock *sk_pppox(struct pppox_sock *po)
74struct module; 74struct module;
75 75
76struct pppox_proto { 76struct pppox_proto {
77 int (*create)(struct net *net, struct socket *sock); 77 int (*create)(struct net *net, struct socket *sock, int kern);
78 int (*ioctl)(struct socket *sock, unsigned int cmd, 78 int (*ioctl)(struct socket *sock, unsigned int cmd,
79 unsigned long arg); 79 unsigned long arg);
80 struct module *owner; 80 struct module *owner;
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
index 920e4457ce6e..67ce5bd3b56a 100644
--- a/include/linux/if_vlan.h
+++ b/include/linux/if_vlan.h
@@ -416,7 +416,7 @@ static inline void __vlan_hwaccel_put_tag(struct sk_buff *skb,
416/** 416/**
417 * __vlan_get_tag - get the VLAN ID that is part of the payload 417 * __vlan_get_tag - get the VLAN ID that is part of the payload
418 * @skb: skbuff to query 418 * @skb: skbuff to query
419 * @vlan_tci: buffer to store vlaue 419 * @vlan_tci: buffer to store value
420 * 420 *
421 * Returns error if the skb is not of VLAN type 421 * Returns error if the skb is not of VLAN type
422 */ 422 */
@@ -435,7 +435,7 @@ static inline int __vlan_get_tag(const struct sk_buff *skb, u16 *vlan_tci)
435/** 435/**
436 * __vlan_hwaccel_get_tag - get the VLAN ID that is in @skb->cb[] 436 * __vlan_hwaccel_get_tag - get the VLAN ID that is in @skb->cb[]
437 * @skb: skbuff to query 437 * @skb: skbuff to query
438 * @vlan_tci: buffer to store vlaue 438 * @vlan_tci: buffer to store value
439 * 439 *
440 * Returns error if @skb->vlan_tci is not set correctly 440 * Returns error if @skb->vlan_tci is not set correctly
441 */ 441 */
@@ -456,7 +456,7 @@ static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb,
456/** 456/**
457 * vlan_get_tag - get the VLAN ID from the skb 457 * vlan_get_tag - get the VLAN ID from the skb
458 * @skb: skbuff to query 458 * @skb: skbuff to query
459 * @vlan_tci: buffer to store vlaue 459 * @vlan_tci: buffer to store value
460 * 460 *
461 * Returns error if the skb is not VLAN tagged 461 * Returns error if the skb is not VLAN tagged
462 */ 462 */
@@ -539,7 +539,7 @@ static inline void vlan_set_encap_proto(struct sk_buff *skb,
539 */ 539 */
540 540
541 proto = vhdr->h_vlan_encapsulated_proto; 541 proto = vhdr->h_vlan_encapsulated_proto;
542 if (ntohs(proto) >= ETH_P_802_3_MIN) { 542 if (eth_proto_is_802_3(proto)) {
543 skb->protocol = proto; 543 skb->protocol = proto;
544 return; 544 return;
545 } 545 }
@@ -628,4 +628,24 @@ static inline netdev_features_t vlan_features_check(const struct sk_buff *skb,
628 return features; 628 return features;
629} 629}
630 630
631/**
632 * compare_vlan_header - Compare two vlan headers
633 * @h1: Pointer to vlan header
634 * @h2: Pointer to vlan header
635 *
636 * Compare two vlan headers, returns 0 if equal.
637 *
638 * Please note that alignment of h1 & h2 are only guaranteed to be 16 bits.
639 */
640static inline unsigned long compare_vlan_header(const struct vlan_hdr *h1,
641 const struct vlan_hdr *h2)
642{
643#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
644 return *(u32 *)h1 ^ *(u32 *)h2;
645#else
646 return ((__force u32)h1->h_vlan_TCI ^ (__force u32)h2->h_vlan_TCI) |
647 ((__force u32)h1->h_vlan_encapsulated_proto ^
648 (__force u32)h2->h_vlan_encapsulated_proto);
649#endif
650}
631#endif /* !(_LINUX_IF_VLAN_H_) */ 651#endif /* !(_LINUX_IF_VLAN_H_) */
diff --git a/include/linux/igmp.h b/include/linux/igmp.h
index 2c677afeea47..193ad488d3e2 100644
--- a/include/linux/igmp.h
+++ b/include/linux/igmp.h
@@ -130,5 +130,6 @@ extern void ip_mc_unmap(struct in_device *);
130extern void ip_mc_remap(struct in_device *); 130extern void ip_mc_remap(struct in_device *);
131extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr); 131extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr);
132extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr); 132extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr);
133int ip_mc_check_igmp(struct sk_buff *skb, struct sk_buff **skb_trimmed);
133 134
134#endif 135#endif
diff --git a/include/linux/inet_diag.h b/include/linux/inet_diag.h
index ac48b10c9395..0e707f0c1a3e 100644
--- a/include/linux/inet_diag.h
+++ b/include/linux/inet_diag.h
@@ -24,6 +24,7 @@ struct inet_diag_handler {
24 struct inet_diag_msg *r, 24 struct inet_diag_msg *r,
25 void *info); 25 void *info);
26 __u16 idiag_type; 26 __u16 idiag_type;
27 __u16 idiag_info_size;
27}; 28};
28 29
29struct inet_connection_sock; 30struct inet_connection_sock;
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h
index 0a21fbefdfbe..a4328cea376a 100644
--- a/include/linux/inetdevice.h
+++ b/include/linux/inetdevice.h
@@ -120,6 +120,9 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev)
120 || (!IN_DEV_FORWARD(in_dev) && \ 120 || (!IN_DEV_FORWARD(in_dev) && \
121 IN_DEV_ORCONF((in_dev), ACCEPT_REDIRECTS))) 121 IN_DEV_ORCONF((in_dev), ACCEPT_REDIRECTS)))
122 122
123#define IN_DEV_IGNORE_ROUTES_WITH_LINKDOWN(in_dev) \
124 IN_DEV_CONF_GET((in_dev), IGNORE_ROUTES_WITH_LINKDOWN)
125
123#define IN_DEV_ARPFILTER(in_dev) IN_DEV_ORCONF((in_dev), ARPFILTER) 126#define IN_DEV_ARPFILTER(in_dev) IN_DEV_ORCONF((in_dev), ARPFILTER)
124#define IN_DEV_ARP_ACCEPT(in_dev) IN_DEV_ORCONF((in_dev), ARP_ACCEPT) 127#define IN_DEV_ARP_ACCEPT(in_dev) IN_DEV_ORCONF((in_dev), ARP_ACCEPT)
125#define IN_DEV_ARP_ANNOUNCE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_ANNOUNCE) 128#define IN_DEV_ARP_ANNOUNCE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_ANNOUNCE)
diff --git a/include/linux/mdio-gpio.h b/include/linux/mdio-gpio.h
index 66c30a763b10..11f00cdabe3d 100644
--- a/include/linux/mdio-gpio.h
+++ b/include/linux/mdio-gpio.h
@@ -23,7 +23,8 @@ struct mdio_gpio_platform_data {
23 bool mdio_active_low; 23 bool mdio_active_low;
24 bool mdo_active_low; 24 bool mdo_active_low;
25 25
26 unsigned int phy_mask; 26 u32 phy_mask;
27 u32 phy_ignore_ta_mask;
27 int irqs[PHY_MAX_ADDR]; 28 int irqs[PHY_MAX_ADDR];
28 /* reset callback */ 29 /* reset callback */
29 int (*reset)(struct mii_bus *bus); 30 int (*reset)(struct mii_bus *bus);
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h
index f62e7cf227c6..58391f2e0414 100644
--- a/include/linux/mlx4/cmd.h
+++ b/include/linux/mlx4/cmd.h
@@ -35,6 +35,8 @@
35 35
36#include <linux/dma-mapping.h> 36#include <linux/dma-mapping.h>
37#include <linux/if_link.h> 37#include <linux/if_link.h>
38#include <linux/mlx4/device.h>
39#include <linux/netdevice.h>
38 40
39enum { 41enum {
40 /* initialization and general commands */ 42 /* initialization and general commands */
@@ -300,6 +302,10 @@ static inline int mlx4_cmd_imm(struct mlx4_dev *dev, u64 in_param, u64 *out_para
300struct mlx4_cmd_mailbox *mlx4_alloc_cmd_mailbox(struct mlx4_dev *dev); 302struct mlx4_cmd_mailbox *mlx4_alloc_cmd_mailbox(struct mlx4_dev *dev);
301void mlx4_free_cmd_mailbox(struct mlx4_dev *dev, struct mlx4_cmd_mailbox *mailbox); 303void mlx4_free_cmd_mailbox(struct mlx4_dev *dev, struct mlx4_cmd_mailbox *mailbox);
302 304
305int mlx4_get_counter_stats(struct mlx4_dev *dev, int counter_index,
306 struct mlx4_counter *counter_stats, int reset);
307int mlx4_get_vf_stats(struct mlx4_dev *dev, int port, int vf_idx,
308 struct ifla_vf_stats *vf_stats);
303u32 mlx4_comm_get_version(void); 309u32 mlx4_comm_get_version(void);
304int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac); 310int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac);
305int mlx4_set_vf_vlan(struct mlx4_dev *dev, int port, int vf, u16 vlan, u8 qos); 311int mlx4_set_vf_vlan(struct mlx4_dev *dev, int port, int vf, u16 vlan, u8 qos);
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index f94984fb8bb2..fd13c1ce3b4a 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -46,8 +46,9 @@
46 46
47#define MAX_MSIX_P_PORT 17 47#define MAX_MSIX_P_PORT 17
48#define MAX_MSIX 64 48#define MAX_MSIX 64
49#define MSIX_LEGACY_SZ 4
50#define MIN_MSIX_P_PORT 5 49#define MIN_MSIX_P_PORT 5
50#define MLX4_IS_LEGACY_EQ_MODE(dev_cap) ((dev_cap).num_comp_vectors < \
51 (dev_cap).num_ports * MIN_MSIX_P_PORT)
51 52
52#define MLX4_MAX_100M_UNITS_VAL 255 /* 53#define MLX4_MAX_100M_UNITS_VAL 255 /*
53 * work around: can't set values 54 * work around: can't set values
@@ -528,7 +529,6 @@ struct mlx4_caps {
528 int num_eqs; 529 int num_eqs;
529 int reserved_eqs; 530 int reserved_eqs;
530 int num_comp_vectors; 531 int num_comp_vectors;
531 int comp_pool;
532 int num_mpts; 532 int num_mpts;
533 int max_fmr_maps; 533 int max_fmr_maps;
534 int num_mtts; 534 int num_mtts;
@@ -771,6 +771,14 @@ union mlx4_ext_av {
771 struct mlx4_eth_av eth; 771 struct mlx4_eth_av eth;
772}; 772};
773 773
774/* Counters should be saturate once they reach their maximum value */
775#define ASSIGN_32BIT_COUNTER(counter, value) do { \
776 if ((value) > U32_MAX) \
777 counter = cpu_to_be32(U32_MAX); \
778 else \
779 counter = cpu_to_be32(value); \
780} while (0)
781
774struct mlx4_counter { 782struct mlx4_counter {
775 u8 reserved1[3]; 783 u8 reserved1[3];
776 u8 counter_mode; 784 u8 counter_mode;
@@ -963,6 +971,7 @@ struct mlx4_mad_ifc {
963 ((dev)->caps.flags & MLX4_DEV_CAP_FLAG_IBOE)) 971 ((dev)->caps.flags & MLX4_DEV_CAP_FLAG_IBOE))
964 972
965#define MLX4_INVALID_SLAVE_ID 0xFF 973#define MLX4_INVALID_SLAVE_ID 0xFF
974#define MLX4_SINK_COUNTER_INDEX(dev) (dev->caps.max_counters - 1)
966 975
967void handle_port_mgmt_change_event(struct work_struct *work); 976void handle_port_mgmt_change_event(struct work_struct *work);
968 977
@@ -1338,10 +1347,13 @@ void mlx4_fmr_unmap(struct mlx4_dev *dev, struct mlx4_fmr *fmr,
1338int mlx4_fmr_free(struct mlx4_dev *dev, struct mlx4_fmr *fmr); 1347int mlx4_fmr_free(struct mlx4_dev *dev, struct mlx4_fmr *fmr);
1339int mlx4_SYNC_TPT(struct mlx4_dev *dev); 1348int mlx4_SYNC_TPT(struct mlx4_dev *dev);
1340int mlx4_test_interrupts(struct mlx4_dev *dev); 1349int mlx4_test_interrupts(struct mlx4_dev *dev);
1341int mlx4_assign_eq(struct mlx4_dev *dev, char *name, struct cpu_rmap *rmap, 1350u32 mlx4_get_eqs_per_port(struct mlx4_dev *dev, u8 port);
1342 int *vector); 1351bool mlx4_is_eq_vector_valid(struct mlx4_dev *dev, u8 port, int vector);
1352struct cpu_rmap *mlx4_get_cpu_rmap(struct mlx4_dev *dev, int port);
1353int mlx4_assign_eq(struct mlx4_dev *dev, u8 port, int *vector);
1343void mlx4_release_eq(struct mlx4_dev *dev, int vec); 1354void mlx4_release_eq(struct mlx4_dev *dev, int vec);
1344 1355
1356int mlx4_is_eq_shared(struct mlx4_dev *dev, int vector);
1345int mlx4_eq_get_irq(struct mlx4_dev *dev, int vec); 1357int mlx4_eq_get_irq(struct mlx4_dev *dev, int vec);
1346 1358
1347int mlx4_get_phys_port_id(struct mlx4_dev *dev); 1359int mlx4_get_phys_port_id(struct mlx4_dev *dev);
@@ -1350,6 +1362,7 @@ int mlx4_wol_write(struct mlx4_dev *dev, u64 config, int port);
1350 1362
1351int mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx); 1363int mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx);
1352void mlx4_counter_free(struct mlx4_dev *dev, u32 idx); 1364void mlx4_counter_free(struct mlx4_dev *dev, u32 idx);
1365int mlx4_get_default_counter_index(struct mlx4_dev *dev, int port);
1353 1366
1354void mlx4_set_admin_guid(struct mlx4_dev *dev, __be64 guid, int entry, 1367void mlx4_set_admin_guid(struct mlx4_dev *dev, __be64 guid, int entry,
1355 int port); 1368 int port);
diff --git a/include/linux/mlx5/cq.h b/include/linux/mlx5/cq.h
index 2695ced222df..abc4767695e4 100644
--- a/include/linux/mlx5/cq.h
+++ b/include/linux/mlx5/cq.h
@@ -169,6 +169,9 @@ int mlx5_core_query_cq(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq,
169 struct mlx5_query_cq_mbox_out *out); 169 struct mlx5_query_cq_mbox_out *out);
170int mlx5_core_modify_cq(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq, 170int mlx5_core_modify_cq(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq,
171 struct mlx5_modify_cq_mbox_in *in, int in_sz); 171 struct mlx5_modify_cq_mbox_in *in, int in_sz);
172int mlx5_core_modify_cq_moderation(struct mlx5_core_dev *dev,
173 struct mlx5_core_cq *cq, u16 cq_period,
174 u16 cq_max_count);
172int mlx5_debug_cq_add(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq); 175int mlx5_debug_cq_add(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq);
173void mlx5_debug_cq_remove(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq); 176void mlx5_debug_cq_remove(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq);
174 177
diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h
index abf65c790421..b943cd9e2097 100644
--- a/include/linux/mlx5/device.h
+++ b/include/linux/mlx5/device.h
@@ -35,6 +35,7 @@
35 35
36#include <linux/types.h> 36#include <linux/types.h>
37#include <rdma/ib_verbs.h> 37#include <rdma/ib_verbs.h>
38#include <linux/mlx5/mlx5_ifc.h>
38 39
39#if defined(__LITTLE_ENDIAN) 40#if defined(__LITTLE_ENDIAN)
40#define MLX5_SET_HOST_ENDIANNESS 0 41#define MLX5_SET_HOST_ENDIANNESS 0
@@ -58,6 +59,8 @@
58#define MLX5_FLD_SZ_BYTES(typ, fld) (__mlx5_bit_sz(typ, fld) / 8) 59#define MLX5_FLD_SZ_BYTES(typ, fld) (__mlx5_bit_sz(typ, fld) / 8)
59#define MLX5_ST_SZ_BYTES(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 8) 60#define MLX5_ST_SZ_BYTES(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 8)
60#define MLX5_ST_SZ_DW(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 32) 61#define MLX5_ST_SZ_DW(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 32)
62#define MLX5_UN_SZ_BYTES(typ) (sizeof(union mlx5_ifc_##typ##_bits) / 8)
63#define MLX5_UN_SZ_DW(typ) (sizeof(union mlx5_ifc_##typ##_bits) / 32)
61#define MLX5_BYTE_OFF(typ, fld) (__mlx5_bit_off(typ, fld) / 8) 64#define MLX5_BYTE_OFF(typ, fld) (__mlx5_bit_off(typ, fld) / 8)
62#define MLX5_ADDR_OF(typ, p, fld) ((char *)(p) + MLX5_BYTE_OFF(typ, fld)) 65#define MLX5_ADDR_OF(typ, p, fld) ((char *)(p) + MLX5_BYTE_OFF(typ, fld))
63 66
@@ -70,6 +73,14 @@
70 << __mlx5_dw_bit_off(typ, fld))); \ 73 << __mlx5_dw_bit_off(typ, fld))); \
71} while (0) 74} while (0)
72 75
76#define MLX5_SET_TO_ONES(typ, p, fld) do { \
77 BUILD_BUG_ON(__mlx5_st_sz_bits(typ) % 32); \
78 *((__be32 *)(p) + __mlx5_dw_off(typ, fld)) = \
79 cpu_to_be32((be32_to_cpu(*((__be32 *)(p) + __mlx5_dw_off(typ, fld))) & \
80 (~__mlx5_dw_mask(typ, fld))) | ((__mlx5_mask(typ, fld)) \
81 << __mlx5_dw_bit_off(typ, fld))); \
82} while (0)
83
73#define MLX5_GET(typ, p, fld) ((be32_to_cpu(*((__be32 *)(p) +\ 84#define MLX5_GET(typ, p, fld) ((be32_to_cpu(*((__be32 *)(p) +\
74__mlx5_dw_off(typ, fld))) >> __mlx5_dw_bit_off(typ, fld)) & \ 85__mlx5_dw_off(typ, fld))) >> __mlx5_dw_bit_off(typ, fld)) & \
75__mlx5_mask(typ, fld)) 86__mlx5_mask(typ, fld))
@@ -88,6 +99,12 @@ __mlx5_mask(typ, fld))
88 99
89#define MLX5_GET64(typ, p, fld) be64_to_cpu(*((__be64 *)(p) + __mlx5_64_off(typ, fld))) 100#define MLX5_GET64(typ, p, fld) be64_to_cpu(*((__be64 *)(p) + __mlx5_64_off(typ, fld)))
90 101
102#define MLX5_GET64_PR(typ, p, fld) ({ \
103 u64 ___t = MLX5_GET64(typ, p, fld); \
104 pr_debug(#fld " = 0x%llx\n", ___t); \
105 ___t; \
106})
107
91enum { 108enum {
92 MLX5_MAX_COMMANDS = 32, 109 MLX5_MAX_COMMANDS = 32,
93 MLX5_CMD_DATA_BLOCK_SIZE = 512, 110 MLX5_CMD_DATA_BLOCK_SIZE = 512,
@@ -115,6 +132,10 @@ enum {
115}; 132};
116 133
117enum { 134enum {
135 MLX5_HW_START_PADDING = MLX5_INLINE_SEG,
136};
137
138enum {
118 MLX5_MIN_PKEY_TABLE_SIZE = 128, 139 MLX5_MIN_PKEY_TABLE_SIZE = 128,
119 MLX5_MAX_LOG_PKEY_TABLE = 5, 140 MLX5_MAX_LOG_PKEY_TABLE = 5,
120}; 141};
@@ -264,6 +285,7 @@ enum {
264 MLX5_OPCODE_RDMA_WRITE_IMM = 0x09, 285 MLX5_OPCODE_RDMA_WRITE_IMM = 0x09,
265 MLX5_OPCODE_SEND = 0x0a, 286 MLX5_OPCODE_SEND = 0x0a,
266 MLX5_OPCODE_SEND_IMM = 0x0b, 287 MLX5_OPCODE_SEND_IMM = 0x0b,
288 MLX5_OPCODE_LSO = 0x0e,
267 MLX5_OPCODE_RDMA_READ = 0x10, 289 MLX5_OPCODE_RDMA_READ = 0x10,
268 MLX5_OPCODE_ATOMIC_CS = 0x11, 290 MLX5_OPCODE_ATOMIC_CS = 0x11,
269 MLX5_OPCODE_ATOMIC_FA = 0x12, 291 MLX5_OPCODE_ATOMIC_FA = 0x12,
@@ -312,13 +334,6 @@ enum {
312 MLX5_CAP_OFF_CMDIF_CSUM = 46, 334 MLX5_CAP_OFF_CMDIF_CSUM = 46,
313}; 335};
314 336
315enum {
316 HCA_CAP_OPMOD_GET_MAX = 0,
317 HCA_CAP_OPMOD_GET_CUR = 1,
318 HCA_CAP_OPMOD_GET_ODP_MAX = 4,
319 HCA_CAP_OPMOD_GET_ODP_CUR = 5
320};
321
322struct mlx5_inbox_hdr { 337struct mlx5_inbox_hdr {
323 __be16 opcode; 338 __be16 opcode;
324 u8 rsvd[4]; 339 u8 rsvd[4];
@@ -541,6 +556,10 @@ struct mlx5_cmd_prot_block {
541 u8 sig; 556 u8 sig;
542}; 557};
543 558
559enum {
560 MLX5_CQE_SYND_FLUSHED_IN_ERROR = 5,
561};
562
544struct mlx5_err_cqe { 563struct mlx5_err_cqe {
545 u8 rsvd0[32]; 564 u8 rsvd0[32];
546 __be32 srqn; 565 __be32 srqn;
@@ -554,13 +573,22 @@ struct mlx5_err_cqe {
554}; 573};
555 574
556struct mlx5_cqe64 { 575struct mlx5_cqe64 {
557 u8 rsvd0[17]; 576 u8 rsvd0[4];
577 u8 lro_tcppsh_abort_dupack;
578 u8 lro_min_ttl;
579 __be16 lro_tcp_win;
580 __be32 lro_ack_seq_num;
581 __be32 rss_hash_result;
582 u8 rss_hash_type;
558 u8 ml_path; 583 u8 ml_path;
559 u8 rsvd20[4]; 584 u8 rsvd20[2];
585 __be16 check_sum;
560 __be16 slid; 586 __be16 slid;
561 __be32 flags_rqpn; 587 __be32 flags_rqpn;
562 u8 rsvd28[4]; 588 u8 hds_ip_ext;
563 __be32 srqn; 589 u8 l4_hdr_type_etc;
590 __be16 vlan_info;
591 __be32 srqn; /* [31:24]: lro_num_seg, [23:0]: srqn */
564 __be32 imm_inval_pkey; 592 __be32 imm_inval_pkey;
565 u8 rsvd40[4]; 593 u8 rsvd40[4];
566 __be32 byte_cnt; 594 __be32 byte_cnt;
@@ -571,6 +599,40 @@ struct mlx5_cqe64 {
571 u8 op_own; 599 u8 op_own;
572}; 600};
573 601
602static inline int get_cqe_lro_tcppsh(struct mlx5_cqe64 *cqe)
603{
604 return (cqe->lro_tcppsh_abort_dupack >> 6) & 1;
605}
606
607static inline u8 get_cqe_l4_hdr_type(struct mlx5_cqe64 *cqe)
608{
609 return (cqe->l4_hdr_type_etc >> 4) & 0x7;
610}
611
612static inline int cqe_has_vlan(struct mlx5_cqe64 *cqe)
613{
614 return !!(cqe->l4_hdr_type_etc & 0x1);
615}
616
617enum {
618 CQE_L4_HDR_TYPE_NONE = 0x0,
619 CQE_L4_HDR_TYPE_TCP_NO_ACK = 0x1,
620 CQE_L4_HDR_TYPE_UDP = 0x2,
621 CQE_L4_HDR_TYPE_TCP_ACK_NO_DATA = 0x3,
622 CQE_L4_HDR_TYPE_TCP_ACK_AND_DATA = 0x4,
623};
624
625enum {
626 CQE_RSS_HTYPE_IP = 0x3 << 6,
627 CQE_RSS_HTYPE_L4 = 0x3 << 2,
628};
629
630enum {
631 CQE_L2_OK = 1 << 0,
632 CQE_L3_OK = 1 << 1,
633 CQE_L4_OK = 1 << 2,
634};
635
574struct mlx5_sig_err_cqe { 636struct mlx5_sig_err_cqe {
575 u8 rsvd0[16]; 637 u8 rsvd0[16];
576 __be32 expected_trans_sig; 638 __be32 expected_trans_sig;
@@ -996,4 +1058,135 @@ struct mlx5_destroy_psv_out {
996 u8 rsvd[8]; 1058 u8 rsvd[8];
997}; 1059};
998 1060
1061#define MLX5_CMD_OP_MAX 0x920
1062
1063enum {
1064 VPORT_STATE_DOWN = 0x0,
1065 VPORT_STATE_UP = 0x1,
1066};
1067
1068enum {
1069 MLX5_L3_PROT_TYPE_IPV4 = 0,
1070 MLX5_L3_PROT_TYPE_IPV6 = 1,
1071};
1072
1073enum {
1074 MLX5_L4_PROT_TYPE_TCP = 0,
1075 MLX5_L4_PROT_TYPE_UDP = 1,
1076};
1077
1078enum {
1079 MLX5_HASH_FIELD_SEL_SRC_IP = 1 << 0,
1080 MLX5_HASH_FIELD_SEL_DST_IP = 1 << 1,
1081 MLX5_HASH_FIELD_SEL_L4_SPORT = 1 << 2,
1082 MLX5_HASH_FIELD_SEL_L4_DPORT = 1 << 3,
1083 MLX5_HASH_FIELD_SEL_IPSEC_SPI = 1 << 4,
1084};
1085
1086enum {
1087 MLX5_MATCH_OUTER_HEADERS = 1 << 0,
1088 MLX5_MATCH_MISC_PARAMETERS = 1 << 1,
1089 MLX5_MATCH_INNER_HEADERS = 1 << 2,
1090
1091};
1092
1093enum {
1094 MLX5_FLOW_TABLE_TYPE_NIC_RCV = 0,
1095 MLX5_FLOW_TABLE_TYPE_ESWITCH = 4,
1096};
1097
1098enum {
1099 MLX5_FLOW_CONTEXT_DEST_TYPE_VPORT = 0,
1100 MLX5_FLOW_CONTEXT_DEST_TYPE_FLOW_TABLE = 1,
1101 MLX5_FLOW_CONTEXT_DEST_TYPE_TIR = 2,
1102};
1103
1104enum {
1105 MLX5_RQC_RQ_TYPE_MEMORY_RQ_INLINE = 0x0,
1106 MLX5_RQC_RQ_TYPE_MEMORY_RQ_RPM = 0x1,
1107};
1108
1109/* MLX5 DEV CAPs */
1110
1111/* TODO: EAT.ME */
1112enum mlx5_cap_mode {
1113 HCA_CAP_OPMOD_GET_MAX = 0,
1114 HCA_CAP_OPMOD_GET_CUR = 1,
1115};
1116
1117enum mlx5_cap_type {
1118 MLX5_CAP_GENERAL = 0,
1119 MLX5_CAP_ETHERNET_OFFLOADS,
1120 MLX5_CAP_ODP,
1121 MLX5_CAP_ATOMIC,
1122 MLX5_CAP_ROCE,
1123 MLX5_CAP_IPOIB_OFFLOADS,
1124 MLX5_CAP_EOIB_OFFLOADS,
1125 MLX5_CAP_FLOW_TABLE,
1126 /* NUM OF CAP Types */
1127 MLX5_CAP_NUM
1128};
1129
1130/* GET Dev Caps macros */
1131#define MLX5_CAP_GEN(mdev, cap) \
1132 MLX5_GET(cmd_hca_cap, mdev->hca_caps_cur[MLX5_CAP_GENERAL], cap)
1133
1134#define MLX5_CAP_GEN_MAX(mdev, cap) \
1135 MLX5_GET(cmd_hca_cap, mdev->hca_caps_max[MLX5_CAP_GENERAL], cap)
1136
1137#define MLX5_CAP_ETH(mdev, cap) \
1138 MLX5_GET(per_protocol_networking_offload_caps,\
1139 mdev->hca_caps_cur[MLX5_CAP_ETHERNET_OFFLOADS], cap)
1140
1141#define MLX5_CAP_ETH_MAX(mdev, cap) \
1142 MLX5_GET(per_protocol_networking_offload_caps,\
1143 mdev->hca_caps_max[MLX5_CAP_ETHERNET_OFFLOADS], cap)
1144
1145#define MLX5_CAP_ROCE(mdev, cap) \
1146 MLX5_GET(roce_cap, mdev->hca_caps_cur[MLX5_CAP_ROCE], cap)
1147
1148#define MLX5_CAP_ROCE_MAX(mdev, cap) \
1149 MLX5_GET(roce_cap, mdev->hca_caps_max[MLX5_CAP_ROCE], cap)
1150
1151#define MLX5_CAP_ATOMIC(mdev, cap) \
1152 MLX5_GET(atomic_caps, mdev->hca_caps_cur[MLX5_CAP_ATOMIC], cap)
1153
1154#define MLX5_CAP_ATOMIC_MAX(mdev, cap) \
1155 MLX5_GET(atomic_caps, mdev->hca_caps_max[MLX5_CAP_ATOMIC], cap)
1156
1157#define MLX5_CAP_FLOWTABLE(mdev, cap) \
1158 MLX5_GET(flow_table_nic_cap, mdev->hca_caps_cur[MLX5_CAP_FLOW_TABLE], cap)
1159
1160#define MLX5_CAP_FLOWTABLE_MAX(mdev, cap) \
1161 MLX5_GET(flow_table_nic_cap, mdev->hca_caps_max[MLX5_CAP_FLOW_TABLE], cap)
1162
1163#define MLX5_CAP_ODP(mdev, cap)\
1164 MLX5_GET(odp_cap, mdev->hca_caps_cur[MLX5_CAP_ODP], cap)
1165
1166enum {
1167 MLX5_CMD_STAT_OK = 0x0,
1168 MLX5_CMD_STAT_INT_ERR = 0x1,
1169 MLX5_CMD_STAT_BAD_OP_ERR = 0x2,
1170 MLX5_CMD_STAT_BAD_PARAM_ERR = 0x3,
1171 MLX5_CMD_STAT_BAD_SYS_STATE_ERR = 0x4,
1172 MLX5_CMD_STAT_BAD_RES_ERR = 0x5,
1173 MLX5_CMD_STAT_RES_BUSY = 0x6,
1174 MLX5_CMD_STAT_LIM_ERR = 0x8,
1175 MLX5_CMD_STAT_BAD_RES_STATE_ERR = 0x9,
1176 MLX5_CMD_STAT_IX_ERR = 0xa,
1177 MLX5_CMD_STAT_NO_RES_ERR = 0xf,
1178 MLX5_CMD_STAT_BAD_INP_LEN_ERR = 0x50,
1179 MLX5_CMD_STAT_BAD_OUTP_LEN_ERR = 0x51,
1180 MLX5_CMD_STAT_BAD_QP_STATE_ERR = 0x10,
1181 MLX5_CMD_STAT_BAD_PKT_ERR = 0x30,
1182 MLX5_CMD_STAT_BAD_SIZE_OUTS_CQES_ERR = 0x40,
1183};
1184
1185static inline u16 mlx5_to_sw_pkey_sz(int pkey_sz)
1186{
1187 if (pkey_sz > MLX5_MAX_LOG_PKEY_TABLE)
1188 return 0;
1189 return MLX5_MIN_PKEY_TABLE_SIZE << pkey_sz;
1190}
1191
999#endif /* MLX5_DEVICE_H */ 1192#endif /* MLX5_DEVICE_H */
diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
index 9ec7c93d6fa3..5722d88c2429 100644
--- a/include/linux/mlx5/driver.h
+++ b/include/linux/mlx5/driver.h
@@ -44,7 +44,6 @@
44 44
45#include <linux/mlx5/device.h> 45#include <linux/mlx5/device.h>
46#include <linux/mlx5/doorbell.h> 46#include <linux/mlx5/doorbell.h>
47#include <linux/mlx5/mlx5_ifc.h>
48 47
49enum { 48enum {
50 MLX5_BOARD_ID_LEN = 64, 49 MLX5_BOARD_ID_LEN = 64,
@@ -85,7 +84,7 @@ enum {
85}; 84};
86 85
87enum { 86enum {
88 MLX5_MAX_EQ_NAME = 32 87 MLX5_MAX_IRQ_NAME = 32
89}; 88};
90 89
91enum { 90enum {
@@ -108,6 +107,7 @@ enum {
108 MLX5_REG_PUDE = 0x5009, 107 MLX5_REG_PUDE = 0x5009,
109 MLX5_REG_PMPE = 0x5010, 108 MLX5_REG_PMPE = 0x5010,
110 MLX5_REG_PELC = 0x500e, 109 MLX5_REG_PELC = 0x500e,
110 MLX5_REG_PVLC = 0x500f,
111 MLX5_REG_PMLP = 0, /* TBD */ 111 MLX5_REG_PMLP = 0, /* TBD */
112 MLX5_REG_NODE_DESC = 0x6001, 112 MLX5_REG_NODE_DESC = 0x6001,
113 MLX5_REG_HOST_ENDIANNESS = 0x7004, 113 MLX5_REG_HOST_ENDIANNESS = 0x7004,
@@ -150,6 +150,11 @@ enum mlx5_dev_event {
150 MLX5_DEV_EVENT_CLIENT_REREG, 150 MLX5_DEV_EVENT_CLIENT_REREG,
151}; 151};
152 152
153enum mlx5_port_status {
154 MLX5_PORT_UP = 1 << 1,
155 MLX5_PORT_DOWN = 1 << 2,
156};
157
153struct mlx5_uuar_info { 158struct mlx5_uuar_info {
154 struct mlx5_uar *uars; 159 struct mlx5_uar *uars;
155 int num_uars; 160 int num_uars;
@@ -269,56 +274,7 @@ struct mlx5_cmd {
269struct mlx5_port_caps { 274struct mlx5_port_caps {
270 int gid_table_len; 275 int gid_table_len;
271 int pkey_table_len; 276 int pkey_table_len;
272}; 277 u8 ext_port_cap;
273
274struct mlx5_general_caps {
275 u8 log_max_eq;
276 u8 log_max_cq;
277 u8 log_max_qp;
278 u8 log_max_mkey;
279 u8 log_max_pd;
280 u8 log_max_srq;
281 u8 log_max_strq;
282 u8 log_max_mrw_sz;
283 u8 log_max_bsf_list_size;
284 u8 log_max_klm_list_size;
285 u32 max_cqes;
286 int max_wqes;
287 u32 max_eqes;
288 u32 max_indirection;
289 int max_sq_desc_sz;
290 int max_rq_desc_sz;
291 int max_dc_sq_desc_sz;
292 u64 flags;
293 u16 stat_rate_support;
294 int log_max_msg;
295 int num_ports;
296 u8 log_max_ra_res_qp;
297 u8 log_max_ra_req_qp;
298 int max_srq_wqes;
299 int bf_reg_size;
300 int bf_regs_per_page;
301 struct mlx5_port_caps port[MLX5_MAX_PORTS];
302 u8 ext_port_cap[MLX5_MAX_PORTS];
303 int max_vf;
304 u32 reserved_lkey;
305 u8 local_ca_ack_delay;
306 u8 log_max_mcg;
307 u32 max_qp_mcg;
308 int min_page_sz;
309 int pd_cap;
310 u32 max_qp_counters;
311 u32 pkey_table_size;
312 u8 log_max_ra_req_dc;
313 u8 log_max_ra_res_dc;
314 u32 uar_sz;
315 u8 min_log_pg_sz;
316 u8 log_max_xrcd;
317 u16 log_uar_page_sz;
318};
319
320struct mlx5_caps {
321 struct mlx5_general_caps gen;
322}; 278};
323 279
324struct mlx5_cmd_mailbox { 280struct mlx5_cmd_mailbox {
@@ -334,8 +290,6 @@ struct mlx5_buf_list {
334 290
335struct mlx5_buf { 291struct mlx5_buf {
336 struct mlx5_buf_list direct; 292 struct mlx5_buf_list direct;
337 struct mlx5_buf_list *page_list;
338 int nbufs;
339 int npages; 293 int npages;
340 int size; 294 int size;
341 u8 page_shift; 295 u8 page_shift;
@@ -351,7 +305,6 @@ struct mlx5_eq {
351 u8 eqn; 305 u8 eqn;
352 int nent; 306 int nent;
353 u64 mask; 307 u64 mask;
354 char name[MLX5_MAX_EQ_NAME];
355 struct list_head list; 308 struct list_head list;
356 int index; 309 int index;
357 struct mlx5_rsc_debug *dbg; 310 struct mlx5_rsc_debug *dbg;
@@ -387,6 +340,8 @@ struct mlx5_core_mr {
387 340
388enum mlx5_res_type { 341enum mlx5_res_type {
389 MLX5_RES_QP, 342 MLX5_RES_QP,
343 MLX5_RES_SRQ,
344 MLX5_RES_XSRQ,
390}; 345};
391 346
392struct mlx5_core_rsc_common { 347struct mlx5_core_rsc_common {
@@ -396,6 +351,7 @@ struct mlx5_core_rsc_common {
396}; 351};
397 352
398struct mlx5_core_srq { 353struct mlx5_core_srq {
354 struct mlx5_core_rsc_common common; /* must be first */
399 u32 srqn; 355 u32 srqn;
400 int max; 356 int max;
401 int max_gs; 357 int max_gs;
@@ -414,7 +370,6 @@ struct mlx5_eq_table {
414 struct mlx5_eq pages_eq; 370 struct mlx5_eq pages_eq;
415 struct mlx5_eq async_eq; 371 struct mlx5_eq async_eq;
416 struct mlx5_eq cmd_eq; 372 struct mlx5_eq cmd_eq;
417 struct msix_entry *msix_arr;
418 int num_comp_vectors; 373 int num_comp_vectors;
419 /* protect EQs list 374 /* protect EQs list
420 */ 375 */
@@ -467,9 +422,16 @@ struct mlx5_mr_table {
467 struct radix_tree_root tree; 422 struct radix_tree_root tree;
468}; 423};
469 424
425struct mlx5_irq_info {
426 cpumask_var_t mask;
427 char name[MLX5_MAX_IRQ_NAME];
428};
429
470struct mlx5_priv { 430struct mlx5_priv {
471 char name[MLX5_MAX_NAME_LEN]; 431 char name[MLX5_MAX_NAME_LEN];
472 struct mlx5_eq_table eq_table; 432 struct mlx5_eq_table eq_table;
433 struct msix_entry *msix_arr;
434 struct mlx5_irq_info *irq_info;
473 struct mlx5_uuar_info uuari; 435 struct mlx5_uuar_info uuari;
474 MLX5_DECLARE_DOORBELL_LOCK(cq_uar_lock); 436 MLX5_DECLARE_DOORBELL_LOCK(cq_uar_lock);
475 437
@@ -520,7 +482,9 @@ struct mlx5_core_dev {
520 u8 rev_id; 482 u8 rev_id;
521 char board_id[MLX5_BOARD_ID_LEN]; 483 char board_id[MLX5_BOARD_ID_LEN];
522 struct mlx5_cmd cmd; 484 struct mlx5_cmd cmd;
523 struct mlx5_caps caps; 485 struct mlx5_port_caps port_caps[MLX5_MAX_PORTS];
486 u32 hca_caps_cur[MLX5_CAP_NUM][MLX5_UN_SZ_DW(hca_cap_union)];
487 u32 hca_caps_max[MLX5_CAP_NUM][MLX5_UN_SZ_DW(hca_cap_union)];
524 phys_addr_t iseg_base; 488 phys_addr_t iseg_base;
525 struct mlx5_init_seg __iomem *iseg; 489 struct mlx5_init_seg __iomem *iseg;
526 void (*event) (struct mlx5_core_dev *dev, 490 void (*event) (struct mlx5_core_dev *dev,
@@ -529,6 +493,7 @@ struct mlx5_core_dev {
529 struct mlx5_priv priv; 493 struct mlx5_priv priv;
530 struct mlx5_profile *profile; 494 struct mlx5_profile *profile;
531 atomic_t num_qps; 495 atomic_t num_qps;
496 u32 issi;
532}; 497};
533 498
534struct mlx5_db { 499struct mlx5_db {
@@ -549,6 +514,11 @@ enum {
549 MLX5_COMP_EQ_SIZE = 1024, 514 MLX5_COMP_EQ_SIZE = 1024,
550}; 515};
551 516
517enum {
518 MLX5_PTYS_IB = 1 << 0,
519 MLX5_PTYS_EN = 1 << 2,
520};
521
552struct mlx5_db_pgdir { 522struct mlx5_db_pgdir {
553 struct list_head list; 523 struct list_head list;
554 DECLARE_BITMAP(bitmap, MLX5_DB_PER_PAGE); 524 DECLARE_BITMAP(bitmap, MLX5_DB_PER_PAGE);
@@ -584,13 +554,44 @@ struct mlx5_pas {
584 u8 log_sz; 554 u8 log_sz;
585}; 555};
586 556
557enum port_state_policy {
558 MLX5_AAA_000
559};
560
561enum phy_port_state {
562 MLX5_AAA_111
563};
564
565struct mlx5_hca_vport_context {
566 u32 field_select;
567 bool sm_virt_aware;
568 bool has_smi;
569 bool has_raw;
570 enum port_state_policy policy;
571 enum phy_port_state phys_state;
572 enum ib_port_state vport_state;
573 u8 port_physical_state;
574 u64 sys_image_guid;
575 u64 port_guid;
576 u64 node_guid;
577 u32 cap_mask1;
578 u32 cap_mask1_perm;
579 u32 cap_mask2;
580 u32 cap_mask2_perm;
581 u16 lid;
582 u8 init_type_reply; /* bitmask: see ib spec 14.2.5.6 InitTypeReply */
583 u8 lmc;
584 u8 subnet_timeout;
585 u16 sm_lid;
586 u8 sm_sl;
587 u16 qkey_violation_counter;
588 u16 pkey_violation_counter;
589 bool grh_required;
590};
591
587static inline void *mlx5_buf_offset(struct mlx5_buf *buf, int offset) 592static inline void *mlx5_buf_offset(struct mlx5_buf *buf, int offset)
588{ 593{
589 if (likely(BITS_PER_LONG == 64 || buf->nbufs == 1))
590 return buf->direct.buf + offset; 594 return buf->direct.buf + offset;
591 else
592 return buf->page_list[offset >> PAGE_SHIFT].buf +
593 (offset & (PAGE_SIZE - 1));
594} 595}
595 596
596extern struct workqueue_struct *mlx5_core_wq; 597extern struct workqueue_struct *mlx5_core_wq;
@@ -654,8 +655,8 @@ void mlx5_cmd_use_events(struct mlx5_core_dev *dev);
654void mlx5_cmd_use_polling(struct mlx5_core_dev *dev); 655void mlx5_cmd_use_polling(struct mlx5_core_dev *dev);
655int mlx5_cmd_status_to_err(struct mlx5_outbox_hdr *hdr); 656int mlx5_cmd_status_to_err(struct mlx5_outbox_hdr *hdr);
656int mlx5_cmd_status_to_err_v2(void *ptr); 657int mlx5_cmd_status_to_err_v2(void *ptr);
657int mlx5_core_get_caps(struct mlx5_core_dev *dev, struct mlx5_caps *caps, 658int mlx5_core_get_caps(struct mlx5_core_dev *dev, enum mlx5_cap_type cap_type,
658 u16 opmod); 659 enum mlx5_cap_mode cap_mode);
659int mlx5_cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out, 660int mlx5_cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
660 int out_size); 661 int out_size);
661int mlx5_cmd_exec_cb(struct mlx5_core_dev *dev, void *in, int in_size, 662int mlx5_cmd_exec_cb(struct mlx5_core_dev *dev, void *in, int in_size,
@@ -665,19 +666,21 @@ int mlx5_cmd_alloc_uar(struct mlx5_core_dev *dev, u32 *uarn);
665int mlx5_cmd_free_uar(struct mlx5_core_dev *dev, u32 uarn); 666int mlx5_cmd_free_uar(struct mlx5_core_dev *dev, u32 uarn);
666int mlx5_alloc_uuars(struct mlx5_core_dev *dev, struct mlx5_uuar_info *uuari); 667int mlx5_alloc_uuars(struct mlx5_core_dev *dev, struct mlx5_uuar_info *uuari);
667int mlx5_free_uuars(struct mlx5_core_dev *dev, struct mlx5_uuar_info *uuari); 668int mlx5_free_uuars(struct mlx5_core_dev *dev, struct mlx5_uuar_info *uuari);
669int mlx5_alloc_map_uar(struct mlx5_core_dev *mdev, struct mlx5_uar *uar);
670void mlx5_unmap_free_uar(struct mlx5_core_dev *mdev, struct mlx5_uar *uar);
668void mlx5_health_cleanup(void); 671void mlx5_health_cleanup(void);
669void __init mlx5_health_init(void); 672void __init mlx5_health_init(void);
670void mlx5_start_health_poll(struct mlx5_core_dev *dev); 673void mlx5_start_health_poll(struct mlx5_core_dev *dev);
671void mlx5_stop_health_poll(struct mlx5_core_dev *dev); 674void mlx5_stop_health_poll(struct mlx5_core_dev *dev);
672int mlx5_buf_alloc(struct mlx5_core_dev *dev, int size, int max_direct, 675int mlx5_buf_alloc(struct mlx5_core_dev *dev, int size, struct mlx5_buf *buf);
673 struct mlx5_buf *buf);
674void mlx5_buf_free(struct mlx5_core_dev *dev, struct mlx5_buf *buf); 676void mlx5_buf_free(struct mlx5_core_dev *dev, struct mlx5_buf *buf);
675struct mlx5_cmd_mailbox *mlx5_alloc_cmd_mailbox_chain(struct mlx5_core_dev *dev, 677struct mlx5_cmd_mailbox *mlx5_alloc_cmd_mailbox_chain(struct mlx5_core_dev *dev,
676 gfp_t flags, int npages); 678 gfp_t flags, int npages);
677void mlx5_free_cmd_mailbox_chain(struct mlx5_core_dev *dev, 679void mlx5_free_cmd_mailbox_chain(struct mlx5_core_dev *dev,
678 struct mlx5_cmd_mailbox *head); 680 struct mlx5_cmd_mailbox *head);
679int mlx5_core_create_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq, 681int mlx5_core_create_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
680 struct mlx5_create_srq_mbox_in *in, int inlen); 682 struct mlx5_create_srq_mbox_in *in, int inlen,
683 int is_xrc);
681int mlx5_core_destroy_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq); 684int mlx5_core_destroy_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq);
682int mlx5_core_query_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq, 685int mlx5_core_query_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
683 struct mlx5_query_srq_mbox_out *out); 686 struct mlx5_query_srq_mbox_out *out);
@@ -734,7 +737,32 @@ void mlx5_qp_debugfs_cleanup(struct mlx5_core_dev *dev);
734int mlx5_core_access_reg(struct mlx5_core_dev *dev, void *data_in, 737int mlx5_core_access_reg(struct mlx5_core_dev *dev, void *data_in,
735 int size_in, void *data_out, int size_out, 738 int size_in, void *data_out, int size_out,
736 u16 reg_num, int arg, int write); 739 u16 reg_num, int arg, int write);
740
737int mlx5_set_port_caps(struct mlx5_core_dev *dev, u8 port_num, u32 caps); 741int mlx5_set_port_caps(struct mlx5_core_dev *dev, u8 port_num, u32 caps);
742int mlx5_query_port_ptys(struct mlx5_core_dev *dev, u32 *ptys,
743 int ptys_size, int proto_mask, u8 local_port);
744int mlx5_query_port_proto_cap(struct mlx5_core_dev *dev,
745 u32 *proto_cap, int proto_mask);
746int mlx5_query_port_proto_admin(struct mlx5_core_dev *dev,
747 u32 *proto_admin, int proto_mask);
748int mlx5_query_port_link_width_oper(struct mlx5_core_dev *dev,
749 u8 *link_width_oper, u8 local_port);
750int mlx5_query_port_proto_oper(struct mlx5_core_dev *dev,
751 u8 *proto_oper, int proto_mask,
752 u8 local_port);
753int mlx5_set_port_proto(struct mlx5_core_dev *dev, u32 proto_admin,
754 int proto_mask);
755int mlx5_set_port_status(struct mlx5_core_dev *dev,
756 enum mlx5_port_status status);
757int mlx5_query_port_status(struct mlx5_core_dev *dev, u8 *status);
758
759int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port);
760void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu, u8 port);
761void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, int *oper_mtu,
762 u8 port);
763
764int mlx5_query_port_vl_hw_cap(struct mlx5_core_dev *dev,
765 u8 *vl_hw_cap, u8 local_port);
738 766
739int mlx5_debug_eq_add(struct mlx5_core_dev *dev, struct mlx5_eq *eq); 767int mlx5_debug_eq_add(struct mlx5_core_dev *dev, struct mlx5_eq *eq);
740void mlx5_debug_eq_remove(struct mlx5_core_dev *dev, struct mlx5_eq *eq); 768void mlx5_debug_eq_remove(struct mlx5_core_dev *dev, struct mlx5_eq *eq);
@@ -799,6 +827,7 @@ struct mlx5_interface {
799void *mlx5_get_protocol_dev(struct mlx5_core_dev *mdev, int protocol); 827void *mlx5_get_protocol_dev(struct mlx5_core_dev *mdev, int protocol);
800int mlx5_register_interface(struct mlx5_interface *intf); 828int mlx5_register_interface(struct mlx5_interface *intf);
801void mlx5_unregister_interface(struct mlx5_interface *intf); 829void mlx5_unregister_interface(struct mlx5_interface *intf);
830int mlx5_core_query_vendor_id(struct mlx5_core_dev *mdev, u32 *vendor_id);
802 831
803struct mlx5_profile { 832struct mlx5_profile {
804 u64 mask; 833 u64 mask;
@@ -809,4 +838,14 @@ struct mlx5_profile {
809 } mr_cache[MAX_MR_CACHE_ENTRIES]; 838 } mr_cache[MAX_MR_CACHE_ENTRIES];
810}; 839};
811 840
841static inline int mlx5_get_gid_table_len(u16 param)
842{
843 if (param > 4) {
844 pr_warn("gid table length is zero\n");
845 return 0;
846 }
847
848 return 8 * (1 << param);
849}
850
812#endif /* MLX5_DRIVER_H */ 851#endif /* MLX5_DRIVER_H */
diff --git a/include/linux/mlx5/flow_table.h b/include/linux/mlx5/flow_table.h
new file mode 100644
index 000000000000..5f922c6d4fc2
--- /dev/null
+++ b/include/linux/mlx5/flow_table.h
@@ -0,0 +1,54 @@
1/*
2 * Copyright (c) 2013-2015, Mellanox Technologies, Ltd. All rights reserved.
3 *
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 *
18 * - Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and/or other materials
21 * provided with the distribution.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE.
31 */
32
33#ifndef MLX5_FLOW_TABLE_H
34#define MLX5_FLOW_TABLE_H
35
36#include <linux/mlx5/driver.h>
37
38struct mlx5_flow_table_group {
39 u8 log_sz;
40 u8 match_criteria_enable;
41 u32 match_criteria[MLX5_ST_SZ_DW(fte_match_param)];
42};
43
44void *mlx5_create_flow_table(struct mlx5_core_dev *dev, u8 level, u8 table_type,
45 u16 num_groups,
46 struct mlx5_flow_table_group *group);
47void mlx5_destroy_flow_table(void *flow_table);
48int mlx5_add_flow_table_entry(void *flow_table, u8 match_criteria_enable,
49 void *match_criteria, void *flow_context,
50 u32 *flow_index);
51void mlx5_del_flow_table_entry(void *flow_table, u32 flow_index);
52u32 mlx5_get_flow_table_id(void *flow_table);
53
54#endif /* MLX5_FLOW_TABLE_H */
diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h
index cb3ad17edd1f..6d2f6fee041c 100644
--- a/include/linux/mlx5/mlx5_ifc.h
+++ b/include/linux/mlx5/mlx5_ifc.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2013-2015, Mellanox Technologies. All rights reserved. 2 * Copyright (c) 2013-2015, Mellanox Technologies, Ltd. All rights reserved.
3 * 3 *
4 * This software is available to you under a choice of one of two 4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU 5 * licenses. You may choose to be licensed under the terms of the GNU
@@ -28,12 +28,45 @@
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE. 30 * SOFTWARE.
31 */ 31*/
32
33#ifndef MLX5_IFC_H 32#ifndef MLX5_IFC_H
34#define MLX5_IFC_H 33#define MLX5_IFC_H
35 34
36enum { 35enum {
36 MLX5_EVENT_TYPE_CODING_COMPLETION_EVENTS = 0x0,
37 MLX5_EVENT_TYPE_CODING_PATH_MIGRATED_SUCCEEDED = 0x1,
38 MLX5_EVENT_TYPE_CODING_COMMUNICATION_ESTABLISHED = 0x2,
39 MLX5_EVENT_TYPE_CODING_SEND_QUEUE_DRAINED = 0x3,
40 MLX5_EVENT_TYPE_CODING_LAST_WQE_REACHED = 0x13,
41 MLX5_EVENT_TYPE_CODING_SRQ_LIMIT = 0x14,
42 MLX5_EVENT_TYPE_CODING_DCT_ALL_CONNECTIONS_CLOSED = 0x1c,
43 MLX5_EVENT_TYPE_CODING_DCT_ACCESS_KEY_VIOLATION = 0x1d,
44 MLX5_EVENT_TYPE_CODING_CQ_ERROR = 0x4,
45 MLX5_EVENT_TYPE_CODING_LOCAL_WQ_CATASTROPHIC_ERROR = 0x5,
46 MLX5_EVENT_TYPE_CODING_PATH_MIGRATION_FAILED = 0x7,
47 MLX5_EVENT_TYPE_CODING_PAGE_FAULT_EVENT = 0xc,
48 MLX5_EVENT_TYPE_CODING_INVALID_REQUEST_LOCAL_WQ_ERROR = 0x10,
49 MLX5_EVENT_TYPE_CODING_LOCAL_ACCESS_VIOLATION_WQ_ERROR = 0x11,
50 MLX5_EVENT_TYPE_CODING_LOCAL_SRQ_CATASTROPHIC_ERROR = 0x12,
51 MLX5_EVENT_TYPE_CODING_INTERNAL_ERROR = 0x8,
52 MLX5_EVENT_TYPE_CODING_PORT_STATE_CHANGE = 0x9,
53 MLX5_EVENT_TYPE_CODING_GPIO_EVENT = 0x15,
54 MLX5_EVENT_TYPE_CODING_REMOTE_CONFIGURATION_PROTOCOL_EVENT = 0x19,
55 MLX5_EVENT_TYPE_CODING_DOORBELL_BLUEFLAME_CONGESTION_EVENT = 0x1a,
56 MLX5_EVENT_TYPE_CODING_STALL_VL_EVENT = 0x1b,
57 MLX5_EVENT_TYPE_CODING_DROPPED_PACKET_LOGGED_EVENT = 0x1f,
58 MLX5_EVENT_TYPE_CODING_COMMAND_INTERFACE_COMPLETION = 0xa,
59 MLX5_EVENT_TYPE_CODING_PAGE_REQUEST = 0xb
60};
61
62enum {
63 MLX5_MODIFY_TIR_BITMASK_LRO = 0x0,
64 MLX5_MODIFY_TIR_BITMASK_INDIRECT_TABLE = 0x1,
65 MLX5_MODIFY_TIR_BITMASK_HASH = 0x2,
66 MLX5_MODIFY_TIR_BITMASK_TUNNELED_OFFLOAD_EN = 0x3
67};
68
69enum {
37 MLX5_CMD_OP_QUERY_HCA_CAP = 0x100, 70 MLX5_CMD_OP_QUERY_HCA_CAP = 0x100,
38 MLX5_CMD_OP_QUERY_ADAPTER = 0x101, 71 MLX5_CMD_OP_QUERY_ADAPTER = 0x101,
39 MLX5_CMD_OP_INIT_HCA = 0x102, 72 MLX5_CMD_OP_INIT_HCA = 0x102,
@@ -43,6 +76,8 @@ enum {
43 MLX5_CMD_OP_QUERY_PAGES = 0x107, 76 MLX5_CMD_OP_QUERY_PAGES = 0x107,
44 MLX5_CMD_OP_MANAGE_PAGES = 0x108, 77 MLX5_CMD_OP_MANAGE_PAGES = 0x108,
45 MLX5_CMD_OP_SET_HCA_CAP = 0x109, 78 MLX5_CMD_OP_SET_HCA_CAP = 0x109,
79 MLX5_CMD_OP_QUERY_ISSI = 0x10a,
80 MLX5_CMD_OP_SET_ISSI = 0x10b,
46 MLX5_CMD_OP_CREATE_MKEY = 0x200, 81 MLX5_CMD_OP_CREATE_MKEY = 0x200,
47 MLX5_CMD_OP_QUERY_MKEY = 0x201, 82 MLX5_CMD_OP_QUERY_MKEY = 0x201,
48 MLX5_CMD_OP_DESTROY_MKEY = 0x202, 83 MLX5_CMD_OP_DESTROY_MKEY = 0x202,
@@ -66,6 +101,7 @@ enum {
66 MLX5_CMD_OP_2ERR_QP = 0x507, 101 MLX5_CMD_OP_2ERR_QP = 0x507,
67 MLX5_CMD_OP_2RST_QP = 0x50a, 102 MLX5_CMD_OP_2RST_QP = 0x50a,
68 MLX5_CMD_OP_QUERY_QP = 0x50b, 103 MLX5_CMD_OP_QUERY_QP = 0x50b,
104 MLX5_CMD_OP_SQD_RTS_QP = 0x50c,
69 MLX5_CMD_OP_INIT2INIT_QP = 0x50e, 105 MLX5_CMD_OP_INIT2INIT_QP = 0x50e,
70 MLX5_CMD_OP_CREATE_PSV = 0x600, 106 MLX5_CMD_OP_CREATE_PSV = 0x600,
71 MLX5_CMD_OP_DESTROY_PSV = 0x601, 107 MLX5_CMD_OP_DESTROY_PSV = 0x601,
@@ -73,7 +109,10 @@ enum {
73 MLX5_CMD_OP_DESTROY_SRQ = 0x701, 109 MLX5_CMD_OP_DESTROY_SRQ = 0x701,
74 MLX5_CMD_OP_QUERY_SRQ = 0x702, 110 MLX5_CMD_OP_QUERY_SRQ = 0x702,
75 MLX5_CMD_OP_ARM_RQ = 0x703, 111 MLX5_CMD_OP_ARM_RQ = 0x703,
76 MLX5_CMD_OP_RESIZE_SRQ = 0x704, 112 MLX5_CMD_OP_CREATE_XRC_SRQ = 0x705,
113 MLX5_CMD_OP_DESTROY_XRC_SRQ = 0x706,
114 MLX5_CMD_OP_QUERY_XRC_SRQ = 0x707,
115 MLX5_CMD_OP_ARM_XRC_SRQ = 0x708,
77 MLX5_CMD_OP_CREATE_DCT = 0x710, 116 MLX5_CMD_OP_CREATE_DCT = 0x710,
78 MLX5_CMD_OP_DESTROY_DCT = 0x711, 117 MLX5_CMD_OP_DESTROY_DCT = 0x711,
79 MLX5_CMD_OP_DRAIN_DCT = 0x712, 118 MLX5_CMD_OP_DRAIN_DCT = 0x712,
@@ -85,8 +124,12 @@ enum {
85 MLX5_CMD_OP_MODIFY_ESW_VPORT_CONTEXT = 0x753, 124 MLX5_CMD_OP_MODIFY_ESW_VPORT_CONTEXT = 0x753,
86 MLX5_CMD_OP_QUERY_NIC_VPORT_CONTEXT = 0x754, 125 MLX5_CMD_OP_QUERY_NIC_VPORT_CONTEXT = 0x754,
87 MLX5_CMD_OP_MODIFY_NIC_VPORT_CONTEXT = 0x755, 126 MLX5_CMD_OP_MODIFY_NIC_VPORT_CONTEXT = 0x755,
88 MLX5_CMD_OP_QUERY_RCOE_ADDRESS = 0x760, 127 MLX5_CMD_OP_QUERY_ROCE_ADDRESS = 0x760,
89 MLX5_CMD_OP_SET_ROCE_ADDRESS = 0x761, 128 MLX5_CMD_OP_SET_ROCE_ADDRESS = 0x761,
129 MLX5_CMD_OP_QUERY_HCA_VPORT_CONTEXT = 0x762,
130 MLX5_CMD_OP_MODIFY_HCA_VPORT_CONTEXT = 0x763,
131 MLX5_CMD_OP_QUERY_HCA_VPORT_GID = 0x764,
132 MLX5_CMD_OP_QUERY_HCA_VPORT_PKEY = 0x765,
90 MLX5_CMD_OP_QUERY_VPORT_COUNTER = 0x770, 133 MLX5_CMD_OP_QUERY_VPORT_COUNTER = 0x770,
91 MLX5_CMD_OP_ALLOC_Q_COUNTER = 0x771, 134 MLX5_CMD_OP_ALLOC_Q_COUNTER = 0x771,
92 MLX5_CMD_OP_DEALLOC_Q_COUNTER = 0x772, 135 MLX5_CMD_OP_DEALLOC_Q_COUNTER = 0x772,
@@ -98,7 +141,7 @@ enum {
98 MLX5_CMD_OP_CONFIG_INT_MODERATION = 0x804, 141 MLX5_CMD_OP_CONFIG_INT_MODERATION = 0x804,
99 MLX5_CMD_OP_ACCESS_REG = 0x805, 142 MLX5_CMD_OP_ACCESS_REG = 0x805,
100 MLX5_CMD_OP_ATTACH_TO_MCG = 0x806, 143 MLX5_CMD_OP_ATTACH_TO_MCG = 0x806,
101 MLX5_CMD_OP_DETACH_FROM_MCG = 0x807, 144 MLX5_CMD_OP_DETTACH_FROM_MCG = 0x807,
102 MLX5_CMD_OP_GET_DROPPED_PACKET_LOG = 0x80a, 145 MLX5_CMD_OP_GET_DROPPED_PACKET_LOG = 0x80a,
103 MLX5_CMD_OP_MAD_IFC = 0x50d, 146 MLX5_CMD_OP_MAD_IFC = 0x50d,
104 MLX5_CMD_OP_QUERY_MAD_DEMUX = 0x80b, 147 MLX5_CMD_OP_QUERY_MAD_DEMUX = 0x80b,
@@ -106,23 +149,22 @@ enum {
106 MLX5_CMD_OP_NOP = 0x80d, 149 MLX5_CMD_OP_NOP = 0x80d,
107 MLX5_CMD_OP_ALLOC_XRCD = 0x80e, 150 MLX5_CMD_OP_ALLOC_XRCD = 0x80e,
108 MLX5_CMD_OP_DEALLOC_XRCD = 0x80f, 151 MLX5_CMD_OP_DEALLOC_XRCD = 0x80f,
109 MLX5_CMD_OP_SET_BURST_SIZE = 0x812, 152 MLX5_CMD_OP_ALLOC_TRANSPORT_DOMAIN = 0x816,
110 MLX5_CMD_OP_QUERY_BURST_SZIE = 0x813, 153 MLX5_CMD_OP_DEALLOC_TRANSPORT_DOMAIN = 0x817,
111 MLX5_CMD_OP_ACTIVATE_TRACER = 0x814, 154 MLX5_CMD_OP_QUERY_CONG_STATUS = 0x822,
112 MLX5_CMD_OP_DEACTIVATE_TRACER = 0x815, 155 MLX5_CMD_OP_MODIFY_CONG_STATUS = 0x823,
113 MLX5_CMD_OP_CREATE_SNIFFER_RULE = 0x820, 156 MLX5_CMD_OP_QUERY_CONG_PARAMS = 0x824,
114 MLX5_CMD_OP_DESTROY_SNIFFER_RULE = 0x821, 157 MLX5_CMD_OP_MODIFY_CONG_PARAMS = 0x825,
115 MLX5_CMD_OP_QUERY_CONG_PARAMS = 0x822, 158 MLX5_CMD_OP_QUERY_CONG_STATISTICS = 0x826,
116 MLX5_CMD_OP_MODIFY_CONG_PARAMS = 0x823, 159 MLX5_CMD_OP_ADD_VXLAN_UDP_DPORT = 0x827,
117 MLX5_CMD_OP_QUERY_CONG_STATISTICS = 0x824, 160 MLX5_CMD_OP_DELETE_VXLAN_UDP_DPORT = 0x828,
161 MLX5_CMD_OP_SET_L2_TABLE_ENTRY = 0x829,
162 MLX5_CMD_OP_QUERY_L2_TABLE_ENTRY = 0x82a,
163 MLX5_CMD_OP_DELETE_L2_TABLE_ENTRY = 0x82b,
118 MLX5_CMD_OP_CREATE_TIR = 0x900, 164 MLX5_CMD_OP_CREATE_TIR = 0x900,
119 MLX5_CMD_OP_MODIFY_TIR = 0x901, 165 MLX5_CMD_OP_MODIFY_TIR = 0x901,
120 MLX5_CMD_OP_DESTROY_TIR = 0x902, 166 MLX5_CMD_OP_DESTROY_TIR = 0x902,
121 MLX5_CMD_OP_QUERY_TIR = 0x903, 167 MLX5_CMD_OP_QUERY_TIR = 0x903,
122 MLX5_CMD_OP_CREATE_TIS = 0x912,
123 MLX5_CMD_OP_MODIFY_TIS = 0x913,
124 MLX5_CMD_OP_DESTROY_TIS = 0x914,
125 MLX5_CMD_OP_QUERY_TIS = 0x915,
126 MLX5_CMD_OP_CREATE_SQ = 0x904, 168 MLX5_CMD_OP_CREATE_SQ = 0x904,
127 MLX5_CMD_OP_MODIFY_SQ = 0x905, 169 MLX5_CMD_OP_MODIFY_SQ = 0x905,
128 MLX5_CMD_OP_DESTROY_SQ = 0x906, 170 MLX5_CMD_OP_DESTROY_SQ = 0x906,
@@ -135,9 +177,430 @@ enum {
135 MLX5_CMD_OP_MODIFY_RMP = 0x90d, 177 MLX5_CMD_OP_MODIFY_RMP = 0x90d,
136 MLX5_CMD_OP_DESTROY_RMP = 0x90e, 178 MLX5_CMD_OP_DESTROY_RMP = 0x90e,
137 MLX5_CMD_OP_QUERY_RMP = 0x90f, 179 MLX5_CMD_OP_QUERY_RMP = 0x90f,
138 MLX5_CMD_OP_SET_FLOW_TABLE_ENTRY = 0x910, 180 MLX5_CMD_OP_CREATE_TIS = 0x912,
139 MLX5_CMD_OP_QUERY_FLOW_TABLE_ENTRY = 0x911, 181 MLX5_CMD_OP_MODIFY_TIS = 0x913,
140 MLX5_CMD_OP_MAX = 0x911 182 MLX5_CMD_OP_DESTROY_TIS = 0x914,
183 MLX5_CMD_OP_QUERY_TIS = 0x915,
184 MLX5_CMD_OP_CREATE_RQT = 0x916,
185 MLX5_CMD_OP_MODIFY_RQT = 0x917,
186 MLX5_CMD_OP_DESTROY_RQT = 0x918,
187 MLX5_CMD_OP_QUERY_RQT = 0x919,
188 MLX5_CMD_OP_CREATE_FLOW_TABLE = 0x930,
189 MLX5_CMD_OP_DESTROY_FLOW_TABLE = 0x931,
190 MLX5_CMD_OP_QUERY_FLOW_TABLE = 0x932,
191 MLX5_CMD_OP_CREATE_FLOW_GROUP = 0x933,
192 MLX5_CMD_OP_DESTROY_FLOW_GROUP = 0x934,
193 MLX5_CMD_OP_QUERY_FLOW_GROUP = 0x935,
194 MLX5_CMD_OP_SET_FLOW_TABLE_ENTRY = 0x936,
195 MLX5_CMD_OP_QUERY_FLOW_TABLE_ENTRY = 0x937,
196 MLX5_CMD_OP_DELETE_FLOW_TABLE_ENTRY = 0x938
197};
198
199struct mlx5_ifc_flow_table_fields_supported_bits {
200 u8 outer_dmac[0x1];
201 u8 outer_smac[0x1];
202 u8 outer_ether_type[0x1];
203 u8 reserved_0[0x1];
204 u8 outer_first_prio[0x1];
205 u8 outer_first_cfi[0x1];
206 u8 outer_first_vid[0x1];
207 u8 reserved_1[0x1];
208 u8 outer_second_prio[0x1];
209 u8 outer_second_cfi[0x1];
210 u8 outer_second_vid[0x1];
211 u8 reserved_2[0x1];
212 u8 outer_sip[0x1];
213 u8 outer_dip[0x1];
214 u8 outer_frag[0x1];
215 u8 outer_ip_protocol[0x1];
216 u8 outer_ip_ecn[0x1];
217 u8 outer_ip_dscp[0x1];
218 u8 outer_udp_sport[0x1];
219 u8 outer_udp_dport[0x1];
220 u8 outer_tcp_sport[0x1];
221 u8 outer_tcp_dport[0x1];
222 u8 outer_tcp_flags[0x1];
223 u8 outer_gre_protocol[0x1];
224 u8 outer_gre_key[0x1];
225 u8 outer_vxlan_vni[0x1];
226 u8 reserved_3[0x5];
227 u8 source_eswitch_port[0x1];
228
229 u8 inner_dmac[0x1];
230 u8 inner_smac[0x1];
231 u8 inner_ether_type[0x1];
232 u8 reserved_4[0x1];
233 u8 inner_first_prio[0x1];
234 u8 inner_first_cfi[0x1];
235 u8 inner_first_vid[0x1];
236 u8 reserved_5[0x1];
237 u8 inner_second_prio[0x1];
238 u8 inner_second_cfi[0x1];
239 u8 inner_second_vid[0x1];
240 u8 reserved_6[0x1];
241 u8 inner_sip[0x1];
242 u8 inner_dip[0x1];
243 u8 inner_frag[0x1];
244 u8 inner_ip_protocol[0x1];
245 u8 inner_ip_ecn[0x1];
246 u8 inner_ip_dscp[0x1];
247 u8 inner_udp_sport[0x1];
248 u8 inner_udp_dport[0x1];
249 u8 inner_tcp_sport[0x1];
250 u8 inner_tcp_dport[0x1];
251 u8 inner_tcp_flags[0x1];
252 u8 reserved_7[0x9];
253
254 u8 reserved_8[0x40];
255};
256
257struct mlx5_ifc_flow_table_prop_layout_bits {
258 u8 ft_support[0x1];
259 u8 reserved_0[0x1f];
260
261 u8 reserved_1[0x2];
262 u8 log_max_ft_size[0x6];
263 u8 reserved_2[0x10];
264 u8 max_ft_level[0x8];
265
266 u8 reserved_3[0x20];
267
268 u8 reserved_4[0x18];
269 u8 log_max_ft_num[0x8];
270
271 u8 reserved_5[0x18];
272 u8 log_max_destination[0x8];
273
274 u8 reserved_6[0x18];
275 u8 log_max_flow[0x8];
276
277 u8 reserved_7[0x40];
278
279 struct mlx5_ifc_flow_table_fields_supported_bits ft_field_support;
280
281 struct mlx5_ifc_flow_table_fields_supported_bits ft_field_bitmask_support;
282};
283
284struct mlx5_ifc_odp_per_transport_service_cap_bits {
285 u8 send[0x1];
286 u8 receive[0x1];
287 u8 write[0x1];
288 u8 read[0x1];
289 u8 reserved_0[0x1];
290 u8 srq_receive[0x1];
291 u8 reserved_1[0x1a];
292};
293
294struct mlx5_ifc_fte_match_set_lyr_2_4_bits {
295 u8 smac_47_16[0x20];
296
297 u8 smac_15_0[0x10];
298 u8 ethertype[0x10];
299
300 u8 dmac_47_16[0x20];
301
302 u8 dmac_15_0[0x10];
303 u8 first_prio[0x3];
304 u8 first_cfi[0x1];
305 u8 first_vid[0xc];
306
307 u8 ip_protocol[0x8];
308 u8 ip_dscp[0x6];
309 u8 ip_ecn[0x2];
310 u8 vlan_tag[0x1];
311 u8 reserved_0[0x1];
312 u8 frag[0x1];
313 u8 reserved_1[0x4];
314 u8 tcp_flags[0x9];
315
316 u8 tcp_sport[0x10];
317 u8 tcp_dport[0x10];
318
319 u8 reserved_2[0x20];
320
321 u8 udp_sport[0x10];
322 u8 udp_dport[0x10];
323
324 u8 src_ip[4][0x20];
325
326 u8 dst_ip[4][0x20];
327};
328
329struct mlx5_ifc_fte_match_set_misc_bits {
330 u8 reserved_0[0x20];
331
332 u8 reserved_1[0x10];
333 u8 source_port[0x10];
334
335 u8 outer_second_prio[0x3];
336 u8 outer_second_cfi[0x1];
337 u8 outer_second_vid[0xc];
338 u8 inner_second_prio[0x3];
339 u8 inner_second_cfi[0x1];
340 u8 inner_second_vid[0xc];
341
342 u8 outer_second_vlan_tag[0x1];
343 u8 inner_second_vlan_tag[0x1];
344 u8 reserved_2[0xe];
345 u8 gre_protocol[0x10];
346
347 u8 gre_key_h[0x18];
348 u8 gre_key_l[0x8];
349
350 u8 vxlan_vni[0x18];
351 u8 reserved_3[0x8];
352
353 u8 reserved_4[0x20];
354
355 u8 reserved_5[0xc];
356 u8 outer_ipv6_flow_label[0x14];
357
358 u8 reserved_6[0xc];
359 u8 inner_ipv6_flow_label[0x14];
360
361 u8 reserved_7[0xe0];
362};
363
364struct mlx5_ifc_cmd_pas_bits {
365 u8 pa_h[0x20];
366
367 u8 pa_l[0x14];
368 u8 reserved_0[0xc];
369};
370
371struct mlx5_ifc_uint64_bits {
372 u8 hi[0x20];
373
374 u8 lo[0x20];
375};
376
377enum {
378 MLX5_ADS_STAT_RATE_NO_LIMIT = 0x0,
379 MLX5_ADS_STAT_RATE_2_5GBPS = 0x7,
380 MLX5_ADS_STAT_RATE_10GBPS = 0x8,
381 MLX5_ADS_STAT_RATE_30GBPS = 0x9,
382 MLX5_ADS_STAT_RATE_5GBPS = 0xa,
383 MLX5_ADS_STAT_RATE_20GBPS = 0xb,
384 MLX5_ADS_STAT_RATE_40GBPS = 0xc,
385 MLX5_ADS_STAT_RATE_60GBPS = 0xd,
386 MLX5_ADS_STAT_RATE_80GBPS = 0xe,
387 MLX5_ADS_STAT_RATE_120GBPS = 0xf,
388};
389
390struct mlx5_ifc_ads_bits {
391 u8 fl[0x1];
392 u8 free_ar[0x1];
393 u8 reserved_0[0xe];
394 u8 pkey_index[0x10];
395
396 u8 reserved_1[0x8];
397 u8 grh[0x1];
398 u8 mlid[0x7];
399 u8 rlid[0x10];
400
401 u8 ack_timeout[0x5];
402 u8 reserved_2[0x3];
403 u8 src_addr_index[0x8];
404 u8 reserved_3[0x4];
405 u8 stat_rate[0x4];
406 u8 hop_limit[0x8];
407
408 u8 reserved_4[0x4];
409 u8 tclass[0x8];
410 u8 flow_label[0x14];
411
412 u8 rgid_rip[16][0x8];
413
414 u8 reserved_5[0x4];
415 u8 f_dscp[0x1];
416 u8 f_ecn[0x1];
417 u8 reserved_6[0x1];
418 u8 f_eth_prio[0x1];
419 u8 ecn[0x2];
420 u8 dscp[0x6];
421 u8 udp_sport[0x10];
422
423 u8 dei_cfi[0x1];
424 u8 eth_prio[0x3];
425 u8 sl[0x4];
426 u8 port[0x8];
427 u8 rmac_47_32[0x10];
428
429 u8 rmac_31_0[0x20];
430};
431
432struct mlx5_ifc_flow_table_nic_cap_bits {
433 u8 reserved_0[0x200];
434
435 struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_receive;
436
437 u8 reserved_1[0x200];
438
439 struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_receive_sniffer;
440
441 struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_transmit;
442
443 u8 reserved_2[0x200];
444
445 struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_transmit_sniffer;
446
447 u8 reserved_3[0x7200];
448};
449
450struct mlx5_ifc_per_protocol_networking_offload_caps_bits {
451 u8 csum_cap[0x1];
452 u8 vlan_cap[0x1];
453 u8 lro_cap[0x1];
454 u8 lro_psh_flag[0x1];
455 u8 lro_time_stamp[0x1];
456 u8 reserved_0[0x6];
457 u8 max_lso_cap[0x5];
458 u8 reserved_1[0x4];
459 u8 rss_ind_tbl_cap[0x4];
460 u8 reserved_2[0x3];
461 u8 tunnel_lso_const_out_ip_id[0x1];
462 u8 reserved_3[0x2];
463 u8 tunnel_statless_gre[0x1];
464 u8 tunnel_stateless_vxlan[0x1];
465
466 u8 reserved_4[0x20];
467
468 u8 reserved_5[0x10];
469 u8 lro_min_mss_size[0x10];
470
471 u8 reserved_6[0x120];
472
473 u8 lro_timer_supported_periods[4][0x20];
474
475 u8 reserved_7[0x600];
476};
477
478struct mlx5_ifc_roce_cap_bits {
479 u8 roce_apm[0x1];
480 u8 reserved_0[0x1f];
481
482 u8 reserved_1[0x60];
483
484 u8 reserved_2[0xc];
485 u8 l3_type[0x4];
486 u8 reserved_3[0x8];
487 u8 roce_version[0x8];
488
489 u8 reserved_4[0x10];
490 u8 r_roce_dest_udp_port[0x10];
491
492 u8 r_roce_max_src_udp_port[0x10];
493 u8 r_roce_min_src_udp_port[0x10];
494
495 u8 reserved_5[0x10];
496 u8 roce_address_table_size[0x10];
497
498 u8 reserved_6[0x700];
499};
500
501enum {
502 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_QP_1_BYTE = 0x0,
503 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_QP_2_BYTES = 0x2,
504 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_QP_4_BYTES = 0x4,
505 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_QP_8_BYTES = 0x8,
506 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_QP_16_BYTES = 0x10,
507 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_QP_32_BYTES = 0x20,
508 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_QP_64_BYTES = 0x40,
509 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_QP_128_BYTES = 0x80,
510 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_QP_256_BYTES = 0x100,
511};
512
513enum {
514 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_DC_1_BYTE = 0x1,
515 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_DC_2_BYTES = 0x2,
516 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_DC_4_BYTES = 0x4,
517 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_DC_8_BYTES = 0x8,
518 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_DC_16_BYTES = 0x10,
519 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_DC_32_BYTES = 0x20,
520 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_DC_64_BYTES = 0x40,
521 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_DC_128_BYTES = 0x80,
522 MLX5_ATOMIC_CAPS_ATOMIC_SIZE_DC_256_BYTES = 0x100,
523};
524
525struct mlx5_ifc_atomic_caps_bits {
526 u8 reserved_0[0x40];
527
528 u8 atomic_req_endianness[0x1];
529 u8 reserved_1[0x1f];
530
531 u8 reserved_2[0x20];
532
533 u8 reserved_3[0x10];
534 u8 atomic_operations[0x10];
535
536 u8 reserved_4[0x10];
537 u8 atomic_size_qp[0x10];
538
539 u8 reserved_5[0x10];
540 u8 atomic_size_dc[0x10];
541
542 u8 reserved_6[0x720];
543};
544
545struct mlx5_ifc_odp_cap_bits {
546 u8 reserved_0[0x40];
547
548 u8 sig[0x1];
549 u8 reserved_1[0x1f];
550
551 u8 reserved_2[0x20];
552
553 struct mlx5_ifc_odp_per_transport_service_cap_bits rc_odp_caps;
554
555 struct mlx5_ifc_odp_per_transport_service_cap_bits uc_odp_caps;
556
557 struct mlx5_ifc_odp_per_transport_service_cap_bits ud_odp_caps;
558
559 u8 reserved_3[0x720];
560};
561
562enum {
563 MLX5_WQ_TYPE_LINKED_LIST = 0x0,
564 MLX5_WQ_TYPE_CYCLIC = 0x1,
565 MLX5_WQ_TYPE_STRQ = 0x2,
566};
567
568enum {
569 MLX5_WQ_END_PAD_MODE_NONE = 0x0,
570 MLX5_WQ_END_PAD_MODE_ALIGN = 0x1,
571};
572
573enum {
574 MLX5_CMD_HCA_CAP_GID_TABLE_SIZE_8_GID_ENTRIES = 0x0,
575 MLX5_CMD_HCA_CAP_GID_TABLE_SIZE_16_GID_ENTRIES = 0x1,
576 MLX5_CMD_HCA_CAP_GID_TABLE_SIZE_32_GID_ENTRIES = 0x2,
577 MLX5_CMD_HCA_CAP_GID_TABLE_SIZE_64_GID_ENTRIES = 0x3,
578 MLX5_CMD_HCA_CAP_GID_TABLE_SIZE_128_GID_ENTRIES = 0x4,
579};
580
581enum {
582 MLX5_CMD_HCA_CAP_PKEY_TABLE_SIZE_128_ENTRIES = 0x0,
583 MLX5_CMD_HCA_CAP_PKEY_TABLE_SIZE_256_ENTRIES = 0x1,
584 MLX5_CMD_HCA_CAP_PKEY_TABLE_SIZE_512_ENTRIES = 0x2,
585 MLX5_CMD_HCA_CAP_PKEY_TABLE_SIZE_1K_ENTRIES = 0x3,
586 MLX5_CMD_HCA_CAP_PKEY_TABLE_SIZE_2K_ENTRIES = 0x4,
587 MLX5_CMD_HCA_CAP_PKEY_TABLE_SIZE_4K_ENTRIES = 0x5,
588};
589
590enum {
591 MLX5_CMD_HCA_CAP_PORT_TYPE_IB = 0x0,
592 MLX5_CMD_HCA_CAP_PORT_TYPE_ETHERNET = 0x1,
593};
594
595enum {
596 MLX5_CMD_HCA_CAP_CMDIF_CHECKSUM_DISABLED = 0x0,
597 MLX5_CMD_HCA_CAP_CMDIF_CHECKSUM_INITIAL_STATE = 0x1,
598 MLX5_CMD_HCA_CAP_CMDIF_CHECKSUM_ENABLED = 0x3,
599};
600
601enum {
602 MLX5_CAP_PORT_TYPE_IB = 0x0,
603 MLX5_CAP_PORT_TYPE_ETH = 0x1,
141}; 604};
142 605
143struct mlx5_ifc_cmd_hca_cap_bits { 606struct mlx5_ifc_cmd_hca_cap_bits {
@@ -148,9 +611,8 @@ struct mlx5_ifc_cmd_hca_cap_bits {
148 u8 reserved_1[0xb]; 611 u8 reserved_1[0xb];
149 u8 log_max_qp[0x5]; 612 u8 log_max_qp[0x5];
150 613
151 u8 log_max_strq_sz[0x8]; 614 u8 reserved_2[0xb];
152 u8 reserved_2[0x3]; 615 u8 log_max_srq[0x5];
153 u8 log_max_srqs[0x5];
154 u8 reserved_3[0x10]; 616 u8 reserved_3[0x10];
155 617
156 u8 reserved_4[0x8]; 618 u8 reserved_4[0x8];
@@ -185,123 +647,2112 @@ struct mlx5_ifc_cmd_hca_cap_bits {
185 u8 pad_cap[0x1]; 647 u8 pad_cap[0x1];
186 u8 cc_query_allowed[0x1]; 648 u8 cc_query_allowed[0x1];
187 u8 cc_modify_allowed[0x1]; 649 u8 cc_modify_allowed[0x1];
188 u8 reserved_15[0x1d]; 650 u8 reserved_15[0xd];
651 u8 gid_table_size[0x10];
189 652
190 u8 reserved_16[0x6]; 653 u8 out_of_seq_cnt[0x1];
654 u8 vport_counters[0x1];
655 u8 reserved_16[0x4];
191 u8 max_qp_cnt[0xa]; 656 u8 max_qp_cnt[0xa];
192 u8 pkey_table_size[0x10]; 657 u8 pkey_table_size[0x10];
193 658
194 u8 eswitch_owner[0x1]; 659 u8 vport_group_manager[0x1];
195 u8 reserved_17[0xa]; 660 u8 vhca_group_manager[0x1];
661 u8 ib_virt[0x1];
662 u8 eth_virt[0x1];
663 u8 reserved_17[0x1];
664 u8 ets[0x1];
665 u8 nic_flow_table[0x1];
666 u8 reserved_18[0x4];
196 u8 local_ca_ack_delay[0x5]; 667 u8 local_ca_ack_delay[0x5];
197 u8 reserved_18[0x8]; 668 u8 reserved_19[0x6];
669 u8 port_type[0x2];
198 u8 num_ports[0x8]; 670 u8 num_ports[0x8];
199 671
200 u8 reserved_19[0x3]; 672 u8 reserved_20[0x3];
201 u8 log_max_msg[0x5]; 673 u8 log_max_msg[0x5];
202 u8 reserved_20[0x18]; 674 u8 reserved_21[0x18];
203 675
204 u8 stat_rate_support[0x10]; 676 u8 stat_rate_support[0x10];
205 u8 reserved_21[0x10]; 677 u8 reserved_22[0xc];
678 u8 cqe_version[0x4];
206 679
207 u8 reserved_22[0x10]; 680 u8 compact_address_vector[0x1];
681 u8 reserved_23[0xe];
682 u8 drain_sigerr[0x1];
208 u8 cmdif_checksum[0x2]; 683 u8 cmdif_checksum[0x2];
209 u8 sigerr_cqe[0x1]; 684 u8 sigerr_cqe[0x1];
210 u8 reserved_23[0x1]; 685 u8 reserved_24[0x1];
211 u8 wq_signature[0x1]; 686 u8 wq_signature[0x1];
212 u8 sctr_data_cqe[0x1]; 687 u8 sctr_data_cqe[0x1];
213 u8 reserved_24[0x1]; 688 u8 reserved_25[0x1];
214 u8 sho[0x1]; 689 u8 sho[0x1];
215 u8 tph[0x1]; 690 u8 tph[0x1];
216 u8 rf[0x1]; 691 u8 rf[0x1];
217 u8 dc[0x1]; 692 u8 dct[0x1];
218 u8 reserved_25[0x2]; 693 u8 reserved_26[0x1];
694 u8 eth_net_offloads[0x1];
219 u8 roce[0x1]; 695 u8 roce[0x1];
220 u8 atomic[0x1]; 696 u8 atomic[0x1];
221 u8 rsz_srq[0x1]; 697 u8 reserved_27[0x1];
222 698
223 u8 cq_oi[0x1]; 699 u8 cq_oi[0x1];
224 u8 cq_resize[0x1]; 700 u8 cq_resize[0x1];
225 u8 cq_moderation[0x1]; 701 u8 cq_moderation[0x1];
226 u8 sniffer_rule_flow[0x1]; 702 u8 reserved_28[0x3];
227 u8 sniffer_rule_vport[0x1]; 703 u8 cq_eq_remap[0x1];
228 u8 sniffer_rule_phy[0x1];
229 u8 reserved_26[0x1];
230 u8 pg[0x1]; 704 u8 pg[0x1];
231 u8 block_lb_mc[0x1]; 705 u8 block_lb_mc[0x1];
232 u8 reserved_27[0x3]; 706 u8 reserved_29[0x1];
707 u8 scqe_break_moderation[0x1];
708 u8 reserved_30[0x1];
233 u8 cd[0x1]; 709 u8 cd[0x1];
234 u8 reserved_28[0x1]; 710 u8 reserved_31[0x1];
235 u8 apm[0x1]; 711 u8 apm[0x1];
236 u8 reserved_29[0x7]; 712 u8 reserved_32[0x7];
237 u8 qkv[0x1]; 713 u8 qkv[0x1];
238 u8 pkv[0x1]; 714 u8 pkv[0x1];
239 u8 reserved_30[0x4]; 715 u8 reserved_33[0x4];
240 u8 xrc[0x1]; 716 u8 xrc[0x1];
241 u8 ud[0x1]; 717 u8 ud[0x1];
242 u8 uc[0x1]; 718 u8 uc[0x1];
243 u8 rc[0x1]; 719 u8 rc[0x1];
244 720
245 u8 reserved_31[0xa]; 721 u8 reserved_34[0xa];
246 u8 uar_sz[0x6]; 722 u8 uar_sz[0x6];
247 u8 reserved_32[0x8]; 723 u8 reserved_35[0x8];
248 u8 log_pg_sz[0x8]; 724 u8 log_pg_sz[0x8];
249 725
250 u8 bf[0x1]; 726 u8 bf[0x1];
251 u8 reserved_33[0xa]; 727 u8 reserved_36[0x1];
728 u8 pad_tx_eth_packet[0x1];
729 u8 reserved_37[0x8];
252 u8 log_bf_reg_size[0x5]; 730 u8 log_bf_reg_size[0x5];
253 u8 reserved_34[0x10]; 731 u8 reserved_38[0x10];
254 732
255 u8 reserved_35[0x10]; 733 u8 reserved_39[0x10];
256 u8 max_wqe_sz_sq[0x10]; 734 u8 max_wqe_sz_sq[0x10];
257 735
258 u8 reserved_36[0x10]; 736 u8 reserved_40[0x10];
259 u8 max_wqe_sz_rq[0x10]; 737 u8 max_wqe_sz_rq[0x10];
260 738
261 u8 reserved_37[0x10]; 739 u8 reserved_41[0x10];
262 u8 max_wqe_sz_sq_dc[0x10]; 740 u8 max_wqe_sz_sq_dc[0x10];
263 741
264 u8 reserved_38[0x7]; 742 u8 reserved_42[0x7];
265 u8 max_qp_mcg[0x19]; 743 u8 max_qp_mcg[0x19];
266 744
267 u8 reserved_39[0x18]; 745 u8 reserved_43[0x18];
268 u8 log_max_mcg[0x8]; 746 u8 log_max_mcg[0x8];
269 747
270 u8 reserved_40[0xb]; 748 u8 reserved_44[0x3];
749 u8 log_max_transport_domain[0x5];
750 u8 reserved_45[0x3];
271 u8 log_max_pd[0x5]; 751 u8 log_max_pd[0x5];
272 u8 reserved_41[0xb]; 752 u8 reserved_46[0xb];
273 u8 log_max_xrcd[0x5]; 753 u8 log_max_xrcd[0x5];
274 754
275 u8 reserved_42[0x20]; 755 u8 reserved_47[0x20];
276 756
277 u8 reserved_43[0x3]; 757 u8 reserved_48[0x3];
278 u8 log_max_rq[0x5]; 758 u8 log_max_rq[0x5];
279 u8 reserved_44[0x3]; 759 u8 reserved_49[0x3];
280 u8 log_max_sq[0x5]; 760 u8 log_max_sq[0x5];
281 u8 reserved_45[0x3]; 761 u8 reserved_50[0x3];
282 u8 log_max_tir[0x5]; 762 u8 log_max_tir[0x5];
283 u8 reserved_46[0x3]; 763 u8 reserved_51[0x3];
284 u8 log_max_tis[0x5]; 764 u8 log_max_tis[0x5];
285 765
286 u8 reserved_47[0x13]; 766 u8 basic_cyclic_rcv_wqe[0x1];
287 u8 log_max_rq_per_tir[0x5]; 767 u8 reserved_52[0x2];
288 u8 reserved_48[0x3]; 768 u8 log_max_rmp[0x5];
769 u8 reserved_53[0x3];
770 u8 log_max_rqt[0x5];
771 u8 reserved_54[0x3];
772 u8 log_max_rqt_size[0x5];
773 u8 reserved_55[0x3];
289 u8 log_max_tis_per_sq[0x5]; 774 u8 log_max_tis_per_sq[0x5];
290 775
291 u8 reserved_49[0xe0]; 776 u8 reserved_56[0x3];
777 u8 log_max_stride_sz_rq[0x5];
778 u8 reserved_57[0x3];
779 u8 log_min_stride_sz_rq[0x5];
780 u8 reserved_58[0x3];
781 u8 log_max_stride_sz_sq[0x5];
782 u8 reserved_59[0x3];
783 u8 log_min_stride_sz_sq[0x5];
292 784
293 u8 reserved_50[0x10]; 785 u8 reserved_60[0x1b];
786 u8 log_max_wq_sz[0x5];
787
788 u8 reserved_61[0xa0];
789
790 u8 reserved_62[0x3];
791 u8 log_max_l2_table[0x5];
792 u8 reserved_63[0x8];
294 u8 log_uar_page_sz[0x10]; 793 u8 log_uar_page_sz[0x10];
295 794
296 u8 reserved_51[0x100]; 795 u8 reserved_64[0x100];
297 796
298 u8 reserved_52[0x1f]; 797 u8 reserved_65[0x1f];
299 u8 cqe_zip[0x1]; 798 u8 cqe_zip[0x1];
300 799
301 u8 cqe_zip_timeout[0x10]; 800 u8 cqe_zip_timeout[0x10];
302 u8 cqe_zip_max_num[0x10]; 801 u8 cqe_zip_max_num[0x10];
303 802
304 u8 reserved_53[0x220]; 803 u8 reserved_66[0x220];
804};
805
806enum {
807 MLX5_DEST_FORMAT_STRUCT_DESTINATION_TYPE_FLOW_TABLE_ = 0x1,
808 MLX5_DEST_FORMAT_STRUCT_DESTINATION_TYPE_TIR = 0x2,
809};
810
811struct mlx5_ifc_dest_format_struct_bits {
812 u8 destination_type[0x8];
813 u8 destination_id[0x18];
814
815 u8 reserved_0[0x20];
816};
817
818struct mlx5_ifc_fte_match_param_bits {
819 struct mlx5_ifc_fte_match_set_lyr_2_4_bits outer_headers;
820
821 struct mlx5_ifc_fte_match_set_misc_bits misc_parameters;
822
823 struct mlx5_ifc_fte_match_set_lyr_2_4_bits inner_headers;
824
825 u8 reserved_0[0xa00];
826};
827
828enum {
829 MLX5_RX_HASH_FIELD_SELECT_SELECTED_FIELDS_SRC_IP = 0x0,
830 MLX5_RX_HASH_FIELD_SELECT_SELECTED_FIELDS_DST_IP = 0x1,
831 MLX5_RX_HASH_FIELD_SELECT_SELECTED_FIELDS_L4_SPORT = 0x2,
832 MLX5_RX_HASH_FIELD_SELECT_SELECTED_FIELDS_L4_DPORT = 0x3,
833 MLX5_RX_HASH_FIELD_SELECT_SELECTED_FIELDS_IPSEC_SPI = 0x4,
834};
835
836struct mlx5_ifc_rx_hash_field_select_bits {
837 u8 l3_prot_type[0x1];
838 u8 l4_prot_type[0x1];
839 u8 selected_fields[0x1e];
840};
841
842enum {
843 MLX5_WQ_WQ_TYPE_WQ_LINKED_LIST = 0x0,
844 MLX5_WQ_WQ_TYPE_WQ_CYCLIC = 0x1,
845};
846
847enum {
848 MLX5_WQ_END_PADDING_MODE_END_PAD_NONE = 0x0,
849 MLX5_WQ_END_PADDING_MODE_END_PAD_ALIGN = 0x1,
850};
851
852struct mlx5_ifc_wq_bits {
853 u8 wq_type[0x4];
854 u8 wq_signature[0x1];
855 u8 end_padding_mode[0x2];
856 u8 cd_slave[0x1];
857 u8 reserved_0[0x18];
858
859 u8 hds_skip_first_sge[0x1];
860 u8 log2_hds_buf_size[0x3];
861 u8 reserved_1[0x7];
862 u8 page_offset[0x5];
863 u8 lwm[0x10];
864
865 u8 reserved_2[0x8];
866 u8 pd[0x18];
867
868 u8 reserved_3[0x8];
869 u8 uar_page[0x18];
870
871 u8 dbr_addr[0x40];
872
873 u8 hw_counter[0x20];
874
875 u8 sw_counter[0x20];
876
877 u8 reserved_4[0xc];
878 u8 log_wq_stride[0x4];
879 u8 reserved_5[0x3];
880 u8 log_wq_pg_sz[0x5];
881 u8 reserved_6[0x3];
882 u8 log_wq_sz[0x5];
883
884 u8 reserved_7[0x4e0];
885
886 struct mlx5_ifc_cmd_pas_bits pas[0];
887};
888
889struct mlx5_ifc_rq_num_bits {
890 u8 reserved_0[0x8];
891 u8 rq_num[0x18];
892};
893
894struct mlx5_ifc_mac_address_layout_bits {
895 u8 reserved_0[0x10];
896 u8 mac_addr_47_32[0x10];
897
898 u8 mac_addr_31_0[0x20];
899};
900
901struct mlx5_ifc_cong_control_r_roce_ecn_np_bits {
902 u8 reserved_0[0xa0];
903
904 u8 min_time_between_cnps[0x20];
905
906 u8 reserved_1[0x12];
907 u8 cnp_dscp[0x6];
908 u8 reserved_2[0x5];
909 u8 cnp_802p_prio[0x3];
910
911 u8 reserved_3[0x720];
912};
913
914struct mlx5_ifc_cong_control_r_roce_ecn_rp_bits {
915 u8 reserved_0[0x60];
916
917 u8 reserved_1[0x4];
918 u8 clamp_tgt_rate[0x1];
919 u8 reserved_2[0x3];
920 u8 clamp_tgt_rate_after_time_inc[0x1];
921 u8 reserved_3[0x17];
922
923 u8 reserved_4[0x20];
924
925 u8 rpg_time_reset[0x20];
926
927 u8 rpg_byte_reset[0x20];
928
929 u8 rpg_threshold[0x20];
930
931 u8 rpg_max_rate[0x20];
932
933 u8 rpg_ai_rate[0x20];
934
935 u8 rpg_hai_rate[0x20];
936
937 u8 rpg_gd[0x20];
938
939 u8 rpg_min_dec_fac[0x20];
940
941 u8 rpg_min_rate[0x20];
942
943 u8 reserved_5[0xe0];
944
945 u8 rate_to_set_on_first_cnp[0x20];
946
947 u8 dce_tcp_g[0x20];
948
949 u8 dce_tcp_rtt[0x20];
950
951 u8 rate_reduce_monitor_period[0x20];
952
953 u8 reserved_6[0x20];
954
955 u8 initial_alpha_value[0x20];
956
957 u8 reserved_7[0x4a0];
958};
959
960struct mlx5_ifc_cong_control_802_1qau_rp_bits {
961 u8 reserved_0[0x80];
962
963 u8 rppp_max_rps[0x20];
964
965 u8 rpg_time_reset[0x20];
966
967 u8 rpg_byte_reset[0x20];
968
969 u8 rpg_threshold[0x20];
970
971 u8 rpg_max_rate[0x20];
972
973 u8 rpg_ai_rate[0x20];
974
975 u8 rpg_hai_rate[0x20];
976
977 u8 rpg_gd[0x20];
978
979 u8 rpg_min_dec_fac[0x20];
980
981 u8 rpg_min_rate[0x20];
982
983 u8 reserved_1[0x640];
984};
985
986enum {
987 MLX5_RESIZE_FIELD_SELECT_RESIZE_FIELD_SELECT_LOG_CQ_SIZE = 0x1,
988 MLX5_RESIZE_FIELD_SELECT_RESIZE_FIELD_SELECT_PAGE_OFFSET = 0x2,
989 MLX5_RESIZE_FIELD_SELECT_RESIZE_FIELD_SELECT_LOG_PAGE_SIZE = 0x4,
990};
991
992struct mlx5_ifc_resize_field_select_bits {
993 u8 resize_field_select[0x20];
994};
995
996enum {
997 MLX5_MODIFY_FIELD_SELECT_MODIFY_FIELD_SELECT_CQ_PERIOD = 0x1,
998 MLX5_MODIFY_FIELD_SELECT_MODIFY_FIELD_SELECT_CQ_MAX_COUNT = 0x2,
999 MLX5_MODIFY_FIELD_SELECT_MODIFY_FIELD_SELECT_OI = 0x4,
1000 MLX5_MODIFY_FIELD_SELECT_MODIFY_FIELD_SELECT_C_EQN = 0x8,
1001};
1002
1003struct mlx5_ifc_modify_field_select_bits {
1004 u8 modify_field_select[0x20];
1005};
1006
1007struct mlx5_ifc_field_select_r_roce_np_bits {
1008 u8 field_select_r_roce_np[0x20];
1009};
1010
1011struct mlx5_ifc_field_select_r_roce_rp_bits {
1012 u8 field_select_r_roce_rp[0x20];
1013};
1014
1015enum {
1016 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPPP_MAX_RPS = 0x4,
1017 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPG_TIME_RESET = 0x8,
1018 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPG_BYTE_RESET = 0x10,
1019 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPG_THRESHOLD = 0x20,
1020 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPG_MAX_RATE = 0x40,
1021 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPG_AI_RATE = 0x80,
1022 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPG_HAI_RATE = 0x100,
1023 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPG_GD = 0x200,
1024 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPG_MIN_DEC_FAC = 0x400,
1025 MLX5_FIELD_SELECT_802_1QAU_RP_FIELD_SELECT_8021QAURP_RPG_MIN_RATE = 0x800,
1026};
1027
1028struct mlx5_ifc_field_select_802_1qau_rp_bits {
1029 u8 field_select_8021qaurp[0x20];
1030};
1031
1032struct mlx5_ifc_phys_layer_cntrs_bits {
1033 u8 time_since_last_clear_high[0x20];
1034
1035 u8 time_since_last_clear_low[0x20];
1036
1037 u8 symbol_errors_high[0x20];
1038
1039 u8 symbol_errors_low[0x20];
1040
1041 u8 sync_headers_errors_high[0x20];
1042
1043 u8 sync_headers_errors_low[0x20];
1044
1045 u8 edpl_bip_errors_lane0_high[0x20];
1046
1047 u8 edpl_bip_errors_lane0_low[0x20];
1048
1049 u8 edpl_bip_errors_lane1_high[0x20];
1050
1051 u8 edpl_bip_errors_lane1_low[0x20];
1052
1053 u8 edpl_bip_errors_lane2_high[0x20];
1054
1055 u8 edpl_bip_errors_lane2_low[0x20];
1056
1057 u8 edpl_bip_errors_lane3_high[0x20];
1058
1059 u8 edpl_bip_errors_lane3_low[0x20];
1060
1061 u8 fc_fec_corrected_blocks_lane0_high[0x20];
1062
1063 u8 fc_fec_corrected_blocks_lane0_low[0x20];
1064
1065 u8 fc_fec_corrected_blocks_lane1_high[0x20];
1066
1067 u8 fc_fec_corrected_blocks_lane1_low[0x20];
1068
1069 u8 fc_fec_corrected_blocks_lane2_high[0x20];
1070
1071 u8 fc_fec_corrected_blocks_lane2_low[0x20];
1072
1073 u8 fc_fec_corrected_blocks_lane3_high[0x20];
1074
1075 u8 fc_fec_corrected_blocks_lane3_low[0x20];
1076
1077 u8 fc_fec_uncorrectable_blocks_lane0_high[0x20];
1078
1079 u8 fc_fec_uncorrectable_blocks_lane0_low[0x20];
1080
1081 u8 fc_fec_uncorrectable_blocks_lane1_high[0x20];
1082
1083 u8 fc_fec_uncorrectable_blocks_lane1_low[0x20];
1084
1085 u8 fc_fec_uncorrectable_blocks_lane2_high[0x20];
1086
1087 u8 fc_fec_uncorrectable_blocks_lane2_low[0x20];
1088
1089 u8 fc_fec_uncorrectable_blocks_lane3_high[0x20];
1090
1091 u8 fc_fec_uncorrectable_blocks_lane3_low[0x20];
1092
1093 u8 rs_fec_corrected_blocks_high[0x20];
1094
1095 u8 rs_fec_corrected_blocks_low[0x20];
1096
1097 u8 rs_fec_uncorrectable_blocks_high[0x20];
1098
1099 u8 rs_fec_uncorrectable_blocks_low[0x20];
1100
1101 u8 rs_fec_no_errors_blocks_high[0x20];
1102
1103 u8 rs_fec_no_errors_blocks_low[0x20];
1104
1105 u8 rs_fec_single_error_blocks_high[0x20];
1106
1107 u8 rs_fec_single_error_blocks_low[0x20];
1108
1109 u8 rs_fec_corrected_symbols_total_high[0x20];
1110
1111 u8 rs_fec_corrected_symbols_total_low[0x20];
1112
1113 u8 rs_fec_corrected_symbols_lane0_high[0x20];
1114
1115 u8 rs_fec_corrected_symbols_lane0_low[0x20];
1116
1117 u8 rs_fec_corrected_symbols_lane1_high[0x20];
1118
1119 u8 rs_fec_corrected_symbols_lane1_low[0x20];
1120
1121 u8 rs_fec_corrected_symbols_lane2_high[0x20];
1122
1123 u8 rs_fec_corrected_symbols_lane2_low[0x20];
1124
1125 u8 rs_fec_corrected_symbols_lane3_high[0x20];
1126
1127 u8 rs_fec_corrected_symbols_lane3_low[0x20];
1128
1129 u8 link_down_events[0x20];
1130
1131 u8 successful_recovery_events[0x20];
1132
1133 u8 reserved_0[0x180];
1134};
1135
1136struct mlx5_ifc_eth_per_traffic_grp_data_layout_bits {
1137 u8 transmit_queue_high[0x20];
1138
1139 u8 transmit_queue_low[0x20];
1140
1141 u8 reserved_0[0x780];
1142};
1143
1144struct mlx5_ifc_eth_per_prio_grp_data_layout_bits {
1145 u8 rx_octets_high[0x20];
1146
1147 u8 rx_octets_low[0x20];
1148
1149 u8 reserved_0[0xc0];
1150
1151 u8 rx_frames_high[0x20];
1152
1153 u8 rx_frames_low[0x20];
1154
1155 u8 tx_octets_high[0x20];
1156
1157 u8 tx_octets_low[0x20];
1158
1159 u8 reserved_1[0xc0];
1160
1161 u8 tx_frames_high[0x20];
1162
1163 u8 tx_frames_low[0x20];
1164
1165 u8 rx_pause_high[0x20];
1166
1167 u8 rx_pause_low[0x20];
1168
1169 u8 rx_pause_duration_high[0x20];
1170
1171 u8 rx_pause_duration_low[0x20];
1172
1173 u8 tx_pause_high[0x20];
1174
1175 u8 tx_pause_low[0x20];
1176
1177 u8 tx_pause_duration_high[0x20];
1178
1179 u8 tx_pause_duration_low[0x20];
1180
1181 u8 rx_pause_transition_high[0x20];
1182
1183 u8 rx_pause_transition_low[0x20];
1184
1185 u8 reserved_2[0x400];
1186};
1187
1188struct mlx5_ifc_eth_extended_cntrs_grp_data_layout_bits {
1189 u8 port_transmit_wait_high[0x20];
1190
1191 u8 port_transmit_wait_low[0x20];
1192
1193 u8 reserved_0[0x780];
1194};
1195
1196struct mlx5_ifc_eth_3635_cntrs_grp_data_layout_bits {
1197 u8 dot3stats_alignment_errors_high[0x20];
1198
1199 u8 dot3stats_alignment_errors_low[0x20];
1200
1201 u8 dot3stats_fcs_errors_high[0x20];
1202
1203 u8 dot3stats_fcs_errors_low[0x20];
1204
1205 u8 dot3stats_single_collision_frames_high[0x20];
1206
1207 u8 dot3stats_single_collision_frames_low[0x20];
1208
1209 u8 dot3stats_multiple_collision_frames_high[0x20];
1210
1211 u8 dot3stats_multiple_collision_frames_low[0x20];
1212
1213 u8 dot3stats_sqe_test_errors_high[0x20];
1214
1215 u8 dot3stats_sqe_test_errors_low[0x20];
1216
1217 u8 dot3stats_deferred_transmissions_high[0x20];
1218
1219 u8 dot3stats_deferred_transmissions_low[0x20];
1220
1221 u8 dot3stats_late_collisions_high[0x20];
1222
1223 u8 dot3stats_late_collisions_low[0x20];
1224
1225 u8 dot3stats_excessive_collisions_high[0x20];
1226
1227 u8 dot3stats_excessive_collisions_low[0x20];
1228
1229 u8 dot3stats_internal_mac_transmit_errors_high[0x20];
1230
1231 u8 dot3stats_internal_mac_transmit_errors_low[0x20];
1232
1233 u8 dot3stats_carrier_sense_errors_high[0x20];
1234
1235 u8 dot3stats_carrier_sense_errors_low[0x20];
1236
1237 u8 dot3stats_frame_too_longs_high[0x20];
1238
1239 u8 dot3stats_frame_too_longs_low[0x20];
1240
1241 u8 dot3stats_internal_mac_receive_errors_high[0x20];
1242
1243 u8 dot3stats_internal_mac_receive_errors_low[0x20];
1244
1245 u8 dot3stats_symbol_errors_high[0x20];
1246
1247 u8 dot3stats_symbol_errors_low[0x20];
1248
1249 u8 dot3control_in_unknown_opcodes_high[0x20];
1250
1251 u8 dot3control_in_unknown_opcodes_low[0x20];
1252
1253 u8 dot3in_pause_frames_high[0x20];
1254
1255 u8 dot3in_pause_frames_low[0x20];
1256
1257 u8 dot3out_pause_frames_high[0x20];
1258
1259 u8 dot3out_pause_frames_low[0x20];
1260
1261 u8 reserved_0[0x3c0];
1262};
1263
1264struct mlx5_ifc_eth_2819_cntrs_grp_data_layout_bits {
1265 u8 ether_stats_drop_events_high[0x20];
1266
1267 u8 ether_stats_drop_events_low[0x20];
1268
1269 u8 ether_stats_octets_high[0x20];
1270
1271 u8 ether_stats_octets_low[0x20];
1272
1273 u8 ether_stats_pkts_high[0x20];
1274
1275 u8 ether_stats_pkts_low[0x20];
1276
1277 u8 ether_stats_broadcast_pkts_high[0x20];
1278
1279 u8 ether_stats_broadcast_pkts_low[0x20];
1280
1281 u8 ether_stats_multicast_pkts_high[0x20];
1282
1283 u8 ether_stats_multicast_pkts_low[0x20];
1284
1285 u8 ether_stats_crc_align_errors_high[0x20];
1286
1287 u8 ether_stats_crc_align_errors_low[0x20];
1288
1289 u8 ether_stats_undersize_pkts_high[0x20];
1290
1291 u8 ether_stats_undersize_pkts_low[0x20];
1292
1293 u8 ether_stats_oversize_pkts_high[0x20];
1294
1295 u8 ether_stats_oversize_pkts_low[0x20];
1296
1297 u8 ether_stats_fragments_high[0x20];
1298
1299 u8 ether_stats_fragments_low[0x20];
1300
1301 u8 ether_stats_jabbers_high[0x20];
1302
1303 u8 ether_stats_jabbers_low[0x20];
1304
1305 u8 ether_stats_collisions_high[0x20];
1306
1307 u8 ether_stats_collisions_low[0x20];
1308
1309 u8 ether_stats_pkts64octets_high[0x20];
1310
1311 u8 ether_stats_pkts64octets_low[0x20];
1312
1313 u8 ether_stats_pkts65to127octets_high[0x20];
1314
1315 u8 ether_stats_pkts65to127octets_low[0x20];
1316
1317 u8 ether_stats_pkts128to255octets_high[0x20];
1318
1319 u8 ether_stats_pkts128to255octets_low[0x20];
1320
1321 u8 ether_stats_pkts256to511octets_high[0x20];
1322
1323 u8 ether_stats_pkts256to511octets_low[0x20];
1324
1325 u8 ether_stats_pkts512to1023octets_high[0x20];
1326
1327 u8 ether_stats_pkts512to1023octets_low[0x20];
1328
1329 u8 ether_stats_pkts1024to1518octets_high[0x20];
1330
1331 u8 ether_stats_pkts1024to1518octets_low[0x20];
1332
1333 u8 ether_stats_pkts1519to2047octets_high[0x20];
1334
1335 u8 ether_stats_pkts1519to2047octets_low[0x20];
1336
1337 u8 ether_stats_pkts2048to4095octets_high[0x20];
1338
1339 u8 ether_stats_pkts2048to4095octets_low[0x20];
1340
1341 u8 ether_stats_pkts4096to8191octets_high[0x20];
1342
1343 u8 ether_stats_pkts4096to8191octets_low[0x20];
1344
1345 u8 ether_stats_pkts8192to10239octets_high[0x20];
1346
1347 u8 ether_stats_pkts8192to10239octets_low[0x20];
1348
1349 u8 reserved_0[0x280];
1350};
1351
1352struct mlx5_ifc_eth_2863_cntrs_grp_data_layout_bits {
1353 u8 if_in_octets_high[0x20];
1354
1355 u8 if_in_octets_low[0x20];
1356
1357 u8 if_in_ucast_pkts_high[0x20];
1358
1359 u8 if_in_ucast_pkts_low[0x20];
1360
1361 u8 if_in_discards_high[0x20];
1362
1363 u8 if_in_discards_low[0x20];
1364
1365 u8 if_in_errors_high[0x20];
1366
1367 u8 if_in_errors_low[0x20];
1368
1369 u8 if_in_unknown_protos_high[0x20];
1370
1371 u8 if_in_unknown_protos_low[0x20];
1372
1373 u8 if_out_octets_high[0x20];
1374
1375 u8 if_out_octets_low[0x20];
1376
1377 u8 if_out_ucast_pkts_high[0x20];
1378
1379 u8 if_out_ucast_pkts_low[0x20];
1380
1381 u8 if_out_discards_high[0x20];
1382
1383 u8 if_out_discards_low[0x20];
1384
1385 u8 if_out_errors_high[0x20];
1386
1387 u8 if_out_errors_low[0x20];
1388
1389 u8 if_in_multicast_pkts_high[0x20];
1390
1391 u8 if_in_multicast_pkts_low[0x20];
1392
1393 u8 if_in_broadcast_pkts_high[0x20];
1394
1395 u8 if_in_broadcast_pkts_low[0x20];
1396
1397 u8 if_out_multicast_pkts_high[0x20];
1398
1399 u8 if_out_multicast_pkts_low[0x20];
1400
1401 u8 if_out_broadcast_pkts_high[0x20];
1402
1403 u8 if_out_broadcast_pkts_low[0x20];
1404
1405 u8 reserved_0[0x480];
1406};
1407
1408struct mlx5_ifc_eth_802_3_cntrs_grp_data_layout_bits {
1409 u8 a_frames_transmitted_ok_high[0x20];
1410
1411 u8 a_frames_transmitted_ok_low[0x20];
1412
1413 u8 a_frames_received_ok_high[0x20];
1414
1415 u8 a_frames_received_ok_low[0x20];
1416
1417 u8 a_frame_check_sequence_errors_high[0x20];
1418
1419 u8 a_frame_check_sequence_errors_low[0x20];
1420
1421 u8 a_alignment_errors_high[0x20];
1422
1423 u8 a_alignment_errors_low[0x20];
1424
1425 u8 a_octets_transmitted_ok_high[0x20];
1426
1427 u8 a_octets_transmitted_ok_low[0x20];
1428
1429 u8 a_octets_received_ok_high[0x20];
1430
1431 u8 a_octets_received_ok_low[0x20];
1432
1433 u8 a_multicast_frames_xmitted_ok_high[0x20];
1434
1435 u8 a_multicast_frames_xmitted_ok_low[0x20];
1436
1437 u8 a_broadcast_frames_xmitted_ok_high[0x20];
1438
1439 u8 a_broadcast_frames_xmitted_ok_low[0x20];
1440
1441 u8 a_multicast_frames_received_ok_high[0x20];
1442
1443 u8 a_multicast_frames_received_ok_low[0x20];
1444
1445 u8 a_broadcast_frames_received_ok_high[0x20];
1446
1447 u8 a_broadcast_frames_received_ok_low[0x20];
1448
1449 u8 a_in_range_length_errors_high[0x20];
1450
1451 u8 a_in_range_length_errors_low[0x20];
1452
1453 u8 a_out_of_range_length_field_high[0x20];
1454
1455 u8 a_out_of_range_length_field_low[0x20];
1456
1457 u8 a_frame_too_long_errors_high[0x20];
1458
1459 u8 a_frame_too_long_errors_low[0x20];
1460
1461 u8 a_symbol_error_during_carrier_high[0x20];
1462
1463 u8 a_symbol_error_during_carrier_low[0x20];
1464
1465 u8 a_mac_control_frames_transmitted_high[0x20];
1466
1467 u8 a_mac_control_frames_transmitted_low[0x20];
1468
1469 u8 a_mac_control_frames_received_high[0x20];
1470
1471 u8 a_mac_control_frames_received_low[0x20];
1472
1473 u8 a_unsupported_opcodes_received_high[0x20];
1474
1475 u8 a_unsupported_opcodes_received_low[0x20];
1476
1477 u8 a_pause_mac_ctrl_frames_received_high[0x20];
1478
1479 u8 a_pause_mac_ctrl_frames_received_low[0x20];
1480
1481 u8 a_pause_mac_ctrl_frames_transmitted_high[0x20];
1482
1483 u8 a_pause_mac_ctrl_frames_transmitted_low[0x20];
1484
1485 u8 reserved_0[0x300];
1486};
1487
1488struct mlx5_ifc_cmd_inter_comp_event_bits {
1489 u8 command_completion_vector[0x20];
1490
1491 u8 reserved_0[0xc0];
1492};
1493
1494struct mlx5_ifc_stall_vl_event_bits {
1495 u8 reserved_0[0x18];
1496 u8 port_num[0x1];
1497 u8 reserved_1[0x3];
1498 u8 vl[0x4];
1499
1500 u8 reserved_2[0xa0];
1501};
1502
1503struct mlx5_ifc_db_bf_congestion_event_bits {
1504 u8 event_subtype[0x8];
1505 u8 reserved_0[0x8];
1506 u8 congestion_level[0x8];
1507 u8 reserved_1[0x8];
1508
1509 u8 reserved_2[0xa0];
1510};
1511
1512struct mlx5_ifc_gpio_event_bits {
1513 u8 reserved_0[0x60];
1514
1515 u8 gpio_event_hi[0x20];
1516
1517 u8 gpio_event_lo[0x20];
1518
1519 u8 reserved_1[0x40];
1520};
1521
1522struct mlx5_ifc_port_state_change_event_bits {
1523 u8 reserved_0[0x40];
1524
1525 u8 port_num[0x4];
1526 u8 reserved_1[0x1c];
1527
1528 u8 reserved_2[0x80];
1529};
1530
1531struct mlx5_ifc_dropped_packet_logged_bits {
1532 u8 reserved_0[0xe0];
1533};
1534
1535enum {
1536 MLX5_CQ_ERROR_SYNDROME_CQ_OVERRUN = 0x1,
1537 MLX5_CQ_ERROR_SYNDROME_CQ_ACCESS_VIOLATION_ERROR = 0x2,
1538};
1539
1540struct mlx5_ifc_cq_error_bits {
1541 u8 reserved_0[0x8];
1542 u8 cqn[0x18];
1543
1544 u8 reserved_1[0x20];
1545
1546 u8 reserved_2[0x18];
1547 u8 syndrome[0x8];
1548
1549 u8 reserved_3[0x80];
1550};
1551
1552struct mlx5_ifc_rdma_page_fault_event_bits {
1553 u8 bytes_committed[0x20];
1554
1555 u8 r_key[0x20];
1556
1557 u8 reserved_0[0x10];
1558 u8 packet_len[0x10];
1559
1560 u8 rdma_op_len[0x20];
1561
1562 u8 rdma_va[0x40];
1563
1564 u8 reserved_1[0x5];
1565 u8 rdma[0x1];
1566 u8 write[0x1];
1567 u8 requestor[0x1];
1568 u8 qp_number[0x18];
1569};
1570
1571struct mlx5_ifc_wqe_associated_page_fault_event_bits {
1572 u8 bytes_committed[0x20];
1573
1574 u8 reserved_0[0x10];
1575 u8 wqe_index[0x10];
1576
1577 u8 reserved_1[0x10];
1578 u8 len[0x10];
1579
1580 u8 reserved_2[0x60];
1581
1582 u8 reserved_3[0x5];
1583 u8 rdma[0x1];
1584 u8 write_read[0x1];
1585 u8 requestor[0x1];
1586 u8 qpn[0x18];
1587};
1588
1589struct mlx5_ifc_qp_events_bits {
1590 u8 reserved_0[0xa0];
1591
1592 u8 type[0x8];
1593 u8 reserved_1[0x18];
1594
1595 u8 reserved_2[0x8];
1596 u8 qpn_rqn_sqn[0x18];
1597};
1598
1599struct mlx5_ifc_dct_events_bits {
1600 u8 reserved_0[0xc0];
1601
1602 u8 reserved_1[0x8];
1603 u8 dct_number[0x18];
1604};
1605
1606struct mlx5_ifc_comp_event_bits {
1607 u8 reserved_0[0xc0];
1608
1609 u8 reserved_1[0x8];
1610 u8 cq_number[0x18];
1611};
1612
1613enum {
1614 MLX5_QPC_STATE_RST = 0x0,
1615 MLX5_QPC_STATE_INIT = 0x1,
1616 MLX5_QPC_STATE_RTR = 0x2,
1617 MLX5_QPC_STATE_RTS = 0x3,
1618 MLX5_QPC_STATE_SQER = 0x4,
1619 MLX5_QPC_STATE_ERR = 0x6,
1620 MLX5_QPC_STATE_SQD = 0x7,
1621 MLX5_QPC_STATE_SUSPENDED = 0x9,
1622};
1623
1624enum {
1625 MLX5_QPC_ST_RC = 0x0,
1626 MLX5_QPC_ST_UC = 0x1,
1627 MLX5_QPC_ST_UD = 0x2,
1628 MLX5_QPC_ST_XRC = 0x3,
1629 MLX5_QPC_ST_DCI = 0x5,
1630 MLX5_QPC_ST_QP0 = 0x7,
1631 MLX5_QPC_ST_QP1 = 0x8,
1632 MLX5_QPC_ST_RAW_DATAGRAM = 0x9,
1633 MLX5_QPC_ST_REG_UMR = 0xc,
1634};
1635
1636enum {
1637 MLX5_QPC_PM_STATE_ARMED = 0x0,
1638 MLX5_QPC_PM_STATE_REARM = 0x1,
1639 MLX5_QPC_PM_STATE_RESERVED = 0x2,
1640 MLX5_QPC_PM_STATE_MIGRATED = 0x3,
1641};
1642
1643enum {
1644 MLX5_QPC_END_PADDING_MODE_SCATTER_AS_IS = 0x0,
1645 MLX5_QPC_END_PADDING_MODE_PAD_TO_CACHE_LINE_ALIGNMENT = 0x1,
1646};
1647
1648enum {
1649 MLX5_QPC_MTU_256_BYTES = 0x1,
1650 MLX5_QPC_MTU_512_BYTES = 0x2,
1651 MLX5_QPC_MTU_1K_BYTES = 0x3,
1652 MLX5_QPC_MTU_2K_BYTES = 0x4,
1653 MLX5_QPC_MTU_4K_BYTES = 0x5,
1654 MLX5_QPC_MTU_RAW_ETHERNET_QP = 0x7,
1655};
1656
1657enum {
1658 MLX5_QPC_ATOMIC_MODE_IB_SPEC = 0x1,
1659 MLX5_QPC_ATOMIC_MODE_ONLY_8B = 0x2,
1660 MLX5_QPC_ATOMIC_MODE_UP_TO_8B = 0x3,
1661 MLX5_QPC_ATOMIC_MODE_UP_TO_16B = 0x4,
1662 MLX5_QPC_ATOMIC_MODE_UP_TO_32B = 0x5,
1663 MLX5_QPC_ATOMIC_MODE_UP_TO_64B = 0x6,
1664 MLX5_QPC_ATOMIC_MODE_UP_TO_128B = 0x7,
1665 MLX5_QPC_ATOMIC_MODE_UP_TO_256B = 0x8,
1666};
1667
1668enum {
1669 MLX5_QPC_CS_REQ_DISABLE = 0x0,
1670 MLX5_QPC_CS_REQ_UP_TO_32B = 0x11,
1671 MLX5_QPC_CS_REQ_UP_TO_64B = 0x22,
1672};
1673
1674enum {
1675 MLX5_QPC_CS_RES_DISABLE = 0x0,
1676 MLX5_QPC_CS_RES_UP_TO_32B = 0x1,
1677 MLX5_QPC_CS_RES_UP_TO_64B = 0x2,
1678};
1679
1680struct mlx5_ifc_qpc_bits {
1681 u8 state[0x4];
1682 u8 reserved_0[0x4];
1683 u8 st[0x8];
1684 u8 reserved_1[0x3];
1685 u8 pm_state[0x2];
1686 u8 reserved_2[0x7];
1687 u8 end_padding_mode[0x2];
1688 u8 reserved_3[0x2];
1689
1690 u8 wq_signature[0x1];
1691 u8 block_lb_mc[0x1];
1692 u8 atomic_like_write_en[0x1];
1693 u8 latency_sensitive[0x1];
1694 u8 reserved_4[0x1];
1695 u8 drain_sigerr[0x1];
1696 u8 reserved_5[0x2];
1697 u8 pd[0x18];
1698
1699 u8 mtu[0x3];
1700 u8 log_msg_max[0x5];
1701 u8 reserved_6[0x1];
1702 u8 log_rq_size[0x4];
1703 u8 log_rq_stride[0x3];
1704 u8 no_sq[0x1];
1705 u8 log_sq_size[0x4];
1706 u8 reserved_7[0x6];
1707 u8 rlky[0x1];
1708 u8 reserved_8[0x4];
1709
1710 u8 counter_set_id[0x8];
1711 u8 uar_page[0x18];
1712
1713 u8 reserved_9[0x8];
1714 u8 user_index[0x18];
1715
1716 u8 reserved_10[0x3];
1717 u8 log_page_size[0x5];
1718 u8 remote_qpn[0x18];
1719
1720 struct mlx5_ifc_ads_bits primary_address_path;
1721
1722 struct mlx5_ifc_ads_bits secondary_address_path;
1723
1724 u8 log_ack_req_freq[0x4];
1725 u8 reserved_11[0x4];
1726 u8 log_sra_max[0x3];
1727 u8 reserved_12[0x2];
1728 u8 retry_count[0x3];
1729 u8 rnr_retry[0x3];
1730 u8 reserved_13[0x1];
1731 u8 fre[0x1];
1732 u8 cur_rnr_retry[0x3];
1733 u8 cur_retry_count[0x3];
1734 u8 reserved_14[0x5];
1735
1736 u8 reserved_15[0x20];
1737
1738 u8 reserved_16[0x8];
1739 u8 next_send_psn[0x18];
1740
1741 u8 reserved_17[0x8];
1742 u8 cqn_snd[0x18];
1743
1744 u8 reserved_18[0x40];
1745
1746 u8 reserved_19[0x8];
1747 u8 last_acked_psn[0x18];
1748
1749 u8 reserved_20[0x8];
1750 u8 ssn[0x18];
1751
1752 u8 reserved_21[0x8];
1753 u8 log_rra_max[0x3];
1754 u8 reserved_22[0x1];
1755 u8 atomic_mode[0x4];
1756 u8 rre[0x1];
1757 u8 rwe[0x1];
1758 u8 rae[0x1];
1759 u8 reserved_23[0x1];
1760 u8 page_offset[0x6];
1761 u8 reserved_24[0x3];
1762 u8 cd_slave_receive[0x1];
1763 u8 cd_slave_send[0x1];
1764 u8 cd_master[0x1];
1765
1766 u8 reserved_25[0x3];
1767 u8 min_rnr_nak[0x5];
1768 u8 next_rcv_psn[0x18];
1769
1770 u8 reserved_26[0x8];
1771 u8 xrcd[0x18];
1772
1773 u8 reserved_27[0x8];
1774 u8 cqn_rcv[0x18];
1775
1776 u8 dbr_addr[0x40];
1777
1778 u8 q_key[0x20];
1779
1780 u8 reserved_28[0x5];
1781 u8 rq_type[0x3];
1782 u8 srqn_rmpn[0x18];
1783
1784 u8 reserved_29[0x8];
1785 u8 rmsn[0x18];
1786
1787 u8 hw_sq_wqebb_counter[0x10];
1788 u8 sw_sq_wqebb_counter[0x10];
1789
1790 u8 hw_rq_counter[0x20];
1791
1792 u8 sw_rq_counter[0x20];
1793
1794 u8 reserved_30[0x20];
1795
1796 u8 reserved_31[0xf];
1797 u8 cgs[0x1];
1798 u8 cs_req[0x8];
1799 u8 cs_res[0x8];
1800
1801 u8 dc_access_key[0x40];
1802
1803 u8 reserved_32[0xc0];
1804};
1805
1806struct mlx5_ifc_roce_addr_layout_bits {
1807 u8 source_l3_address[16][0x8];
1808
1809 u8 reserved_0[0x3];
1810 u8 vlan_valid[0x1];
1811 u8 vlan_id[0xc];
1812 u8 source_mac_47_32[0x10];
1813
1814 u8 source_mac_31_0[0x20];
1815
1816 u8 reserved_1[0x14];
1817 u8 roce_l3_type[0x4];
1818 u8 roce_version[0x8];
1819
1820 u8 reserved_2[0x20];
1821};
1822
1823union mlx5_ifc_hca_cap_union_bits {
1824 struct mlx5_ifc_cmd_hca_cap_bits cmd_hca_cap;
1825 struct mlx5_ifc_odp_cap_bits odp_cap;
1826 struct mlx5_ifc_atomic_caps_bits atomic_caps;
1827 struct mlx5_ifc_roce_cap_bits roce_cap;
1828 struct mlx5_ifc_per_protocol_networking_offload_caps_bits per_protocol_networking_offload_caps;
1829 struct mlx5_ifc_flow_table_nic_cap_bits flow_table_nic_cap;
1830 u8 reserved_0[0x8000];
1831};
1832
1833enum {
1834 MLX5_FLOW_CONTEXT_ACTION_ALLOW = 0x1,
1835 MLX5_FLOW_CONTEXT_ACTION_DROP = 0x2,
1836 MLX5_FLOW_CONTEXT_ACTION_FWD_DEST = 0x4,
1837};
1838
1839struct mlx5_ifc_flow_context_bits {
1840 u8 reserved_0[0x20];
1841
1842 u8 group_id[0x20];
1843
1844 u8 reserved_1[0x8];
1845 u8 flow_tag[0x18];
1846
1847 u8 reserved_2[0x10];
1848 u8 action[0x10];
1849
1850 u8 reserved_3[0x8];
1851 u8 destination_list_size[0x18];
1852
1853 u8 reserved_4[0x160];
1854
1855 struct mlx5_ifc_fte_match_param_bits match_value;
1856
1857 u8 reserved_5[0x600];
1858
1859 struct mlx5_ifc_dest_format_struct_bits destination[0];
1860};
1861
1862enum {
1863 MLX5_XRC_SRQC_STATE_GOOD = 0x0,
1864 MLX5_XRC_SRQC_STATE_ERROR = 0x1,
1865};
1866
1867struct mlx5_ifc_xrc_srqc_bits {
1868 u8 state[0x4];
1869 u8 log_xrc_srq_size[0x4];
1870 u8 reserved_0[0x18];
1871
1872 u8 wq_signature[0x1];
1873 u8 cont_srq[0x1];
1874 u8 reserved_1[0x1];
1875 u8 rlky[0x1];
1876 u8 basic_cyclic_rcv_wqe[0x1];
1877 u8 log_rq_stride[0x3];
1878 u8 xrcd[0x18];
1879
1880 u8 page_offset[0x6];
1881 u8 reserved_2[0x2];
1882 u8 cqn[0x18];
1883
1884 u8 reserved_3[0x20];
1885
1886 u8 user_index_equal_xrc_srqn[0x1];
1887 u8 reserved_4[0x1];
1888 u8 log_page_size[0x6];
1889 u8 user_index[0x18];
1890
1891 u8 reserved_5[0x20];
1892
1893 u8 reserved_6[0x8];
1894 u8 pd[0x18];
1895
1896 u8 lwm[0x10];
1897 u8 wqe_cnt[0x10];
1898
1899 u8 reserved_7[0x40];
1900
1901 u8 db_record_addr_h[0x20];
1902
1903 u8 db_record_addr_l[0x1e];
1904 u8 reserved_8[0x2];
1905
1906 u8 reserved_9[0x80];
1907};
1908
1909struct mlx5_ifc_traffic_counter_bits {
1910 u8 packets[0x40];
1911
1912 u8 octets[0x40];
1913};
1914
1915struct mlx5_ifc_tisc_bits {
1916 u8 reserved_0[0xc];
1917 u8 prio[0x4];
1918 u8 reserved_1[0x10];
1919
1920 u8 reserved_2[0x100];
1921
1922 u8 reserved_3[0x8];
1923 u8 transport_domain[0x18];
1924
1925 u8 reserved_4[0x3c0];
1926};
1927
1928enum {
1929 MLX5_TIRC_DISP_TYPE_DIRECT = 0x0,
1930 MLX5_TIRC_DISP_TYPE_INDIRECT = 0x1,
1931};
1932
1933enum {
1934 MLX5_TIRC_LRO_ENABLE_MASK_IPV4_LRO = 0x1,
1935 MLX5_TIRC_LRO_ENABLE_MASK_IPV6_LRO = 0x2,
1936};
1937
1938enum {
1939 MLX5_TIRC_RX_HASH_FN_HASH_NONE = 0x0,
1940 MLX5_TIRC_RX_HASH_FN_HASH_INVERTED_XOR8 = 0x1,
1941 MLX5_TIRC_RX_HASH_FN_HASH_TOEPLITZ = 0x2,
1942};
1943
1944enum {
1945 MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST_ = 0x1,
1946 MLX5_TIRC_SELF_LB_BLOCK_BLOCK_MULTICAST_ = 0x2,
1947};
1948
1949struct mlx5_ifc_tirc_bits {
1950 u8 reserved_0[0x20];
1951
1952 u8 disp_type[0x4];
1953 u8 reserved_1[0x1c];
1954
1955 u8 reserved_2[0x40];
1956
1957 u8 reserved_3[0x4];
1958 u8 lro_timeout_period_usecs[0x10];
1959 u8 lro_enable_mask[0x4];
1960 u8 lro_max_ip_payload_size[0x8];
1961
1962 u8 reserved_4[0x40];
1963
1964 u8 reserved_5[0x8];
1965 u8 inline_rqn[0x18];
1966
1967 u8 rx_hash_symmetric[0x1];
1968 u8 reserved_6[0x1];
1969 u8 tunneled_offload_en[0x1];
1970 u8 reserved_7[0x5];
1971 u8 indirect_table[0x18];
1972
1973 u8 rx_hash_fn[0x4];
1974 u8 reserved_8[0x2];
1975 u8 self_lb_block[0x2];
1976 u8 transport_domain[0x18];
1977
1978 u8 rx_hash_toeplitz_key[10][0x20];
1979
1980 struct mlx5_ifc_rx_hash_field_select_bits rx_hash_field_selector_outer;
1981
1982 struct mlx5_ifc_rx_hash_field_select_bits rx_hash_field_selector_inner;
1983
1984 u8 reserved_9[0x4c0];
1985};
1986
1987enum {
1988 MLX5_SRQC_STATE_GOOD = 0x0,
1989 MLX5_SRQC_STATE_ERROR = 0x1,
1990};
1991
1992struct mlx5_ifc_srqc_bits {
1993 u8 state[0x4];
1994 u8 log_srq_size[0x4];
1995 u8 reserved_0[0x18];
1996
1997 u8 wq_signature[0x1];
1998 u8 cont_srq[0x1];
1999 u8 reserved_1[0x1];
2000 u8 rlky[0x1];
2001 u8 reserved_2[0x1];
2002 u8 log_rq_stride[0x3];
2003 u8 xrcd[0x18];
2004
2005 u8 page_offset[0x6];
2006 u8 reserved_3[0x2];
2007 u8 cqn[0x18];
2008
2009 u8 reserved_4[0x20];
2010
2011 u8 reserved_5[0x2];
2012 u8 log_page_size[0x6];
2013 u8 reserved_6[0x18];
2014
2015 u8 reserved_7[0x20];
2016
2017 u8 reserved_8[0x8];
2018 u8 pd[0x18];
2019
2020 u8 lwm[0x10];
2021 u8 wqe_cnt[0x10];
2022
2023 u8 reserved_9[0x40];
2024
2025 u8 dbr_addr[0x40];
2026
2027 u8 reserved_10[0x80];
2028};
2029
2030enum {
2031 MLX5_SQC_STATE_RST = 0x0,
2032 MLX5_SQC_STATE_RDY = 0x1,
2033 MLX5_SQC_STATE_ERR = 0x3,
2034};
2035
2036struct mlx5_ifc_sqc_bits {
2037 u8 rlky[0x1];
2038 u8 cd_master[0x1];
2039 u8 fre[0x1];
2040 u8 flush_in_error_en[0x1];
2041 u8 reserved_0[0x4];
2042 u8 state[0x4];
2043 u8 reserved_1[0x14];
2044
2045 u8 reserved_2[0x8];
2046 u8 user_index[0x18];
2047
2048 u8 reserved_3[0x8];
2049 u8 cqn[0x18];
2050
2051 u8 reserved_4[0xa0];
2052
2053 u8 tis_lst_sz[0x10];
2054 u8 reserved_5[0x10];
2055
2056 u8 reserved_6[0x40];
2057
2058 u8 reserved_7[0x8];
2059 u8 tis_num_0[0x18];
2060
2061 struct mlx5_ifc_wq_bits wq;
2062};
2063
2064struct mlx5_ifc_rqtc_bits {
2065 u8 reserved_0[0xa0];
2066
2067 u8 reserved_1[0x10];
2068 u8 rqt_max_size[0x10];
2069
2070 u8 reserved_2[0x10];
2071 u8 rqt_actual_size[0x10];
2072
2073 u8 reserved_3[0x6a0];
2074
2075 struct mlx5_ifc_rq_num_bits rq_num[0];
2076};
2077
2078enum {
2079 MLX5_RQC_MEM_RQ_TYPE_MEMORY_RQ_INLINE = 0x0,
2080 MLX5_RQC_MEM_RQ_TYPE_MEMORY_RQ_RMP = 0x1,
2081};
2082
2083enum {
2084 MLX5_RQC_STATE_RST = 0x0,
2085 MLX5_RQC_STATE_RDY = 0x1,
2086 MLX5_RQC_STATE_ERR = 0x3,
2087};
2088
2089struct mlx5_ifc_rqc_bits {
2090 u8 rlky[0x1];
2091 u8 reserved_0[0x2];
2092 u8 vsd[0x1];
2093 u8 mem_rq_type[0x4];
2094 u8 state[0x4];
2095 u8 reserved_1[0x1];
2096 u8 flush_in_error_en[0x1];
2097 u8 reserved_2[0x12];
2098
2099 u8 reserved_3[0x8];
2100 u8 user_index[0x18];
2101
2102 u8 reserved_4[0x8];
2103 u8 cqn[0x18];
2104
2105 u8 counter_set_id[0x8];
2106 u8 reserved_5[0x18];
2107
2108 u8 reserved_6[0x8];
2109 u8 rmpn[0x18];
2110
2111 u8 reserved_7[0xe0];
2112
2113 struct mlx5_ifc_wq_bits wq;
2114};
2115
2116enum {
2117 MLX5_RMPC_STATE_RDY = 0x1,
2118 MLX5_RMPC_STATE_ERR = 0x3,
2119};
2120
2121struct mlx5_ifc_rmpc_bits {
2122 u8 reserved_0[0x8];
2123 u8 state[0x4];
2124 u8 reserved_1[0x14];
2125
2126 u8 basic_cyclic_rcv_wqe[0x1];
2127 u8 reserved_2[0x1f];
2128
2129 u8 reserved_3[0x140];
2130
2131 struct mlx5_ifc_wq_bits wq;
2132};
2133
2134enum {
2135 MLX5_NIC_VPORT_CONTEXT_ALLOWED_LIST_TYPE_CURRENT_UC_MAC_ADDRESS = 0x0,
2136};
2137
2138struct mlx5_ifc_nic_vport_context_bits {
2139 u8 reserved_0[0x1f];
2140 u8 roce_en[0x1];
2141
2142 u8 reserved_1[0x760];
2143
2144 u8 reserved_2[0x5];
2145 u8 allowed_list_type[0x3];
2146 u8 reserved_3[0xc];
2147 u8 allowed_list_size[0xc];
2148
2149 struct mlx5_ifc_mac_address_layout_bits permanent_address;
2150
2151 u8 reserved_4[0x20];
2152
2153 u8 current_uc_mac_address[0][0x40];
2154};
2155
2156enum {
2157 MLX5_MKC_ACCESS_MODE_PA = 0x0,
2158 MLX5_MKC_ACCESS_MODE_MTT = 0x1,
2159 MLX5_MKC_ACCESS_MODE_KLMS = 0x2,
2160};
2161
2162struct mlx5_ifc_mkc_bits {
2163 u8 reserved_0[0x1];
2164 u8 free[0x1];
2165 u8 reserved_1[0xd];
2166 u8 small_fence_on_rdma_read_response[0x1];
2167 u8 umr_en[0x1];
2168 u8 a[0x1];
2169 u8 rw[0x1];
2170 u8 rr[0x1];
2171 u8 lw[0x1];
2172 u8 lr[0x1];
2173 u8 access_mode[0x2];
2174 u8 reserved_2[0x8];
2175
2176 u8 qpn[0x18];
2177 u8 mkey_7_0[0x8];
2178
2179 u8 reserved_3[0x20];
2180
2181 u8 length64[0x1];
2182 u8 bsf_en[0x1];
2183 u8 sync_umr[0x1];
2184 u8 reserved_4[0x2];
2185 u8 expected_sigerr_count[0x1];
2186 u8 reserved_5[0x1];
2187 u8 en_rinval[0x1];
2188 u8 pd[0x18];
2189
2190 u8 start_addr[0x40];
2191
2192 u8 len[0x40];
2193
2194 u8 bsf_octword_size[0x20];
2195
2196 u8 reserved_6[0x80];
2197
2198 u8 translations_octword_size[0x20];
2199
2200 u8 reserved_7[0x1b];
2201 u8 log_page_size[0x5];
2202
2203 u8 reserved_8[0x20];
2204};
2205
2206struct mlx5_ifc_pkey_bits {
2207 u8 reserved_0[0x10];
2208 u8 pkey[0x10];
2209};
2210
2211struct mlx5_ifc_array128_auto_bits {
2212 u8 array128_auto[16][0x8];
2213};
2214
2215struct mlx5_ifc_hca_vport_context_bits {
2216 u8 field_select[0x20];
2217
2218 u8 reserved_0[0xe0];
2219
2220 u8 sm_virt_aware[0x1];
2221 u8 has_smi[0x1];
2222 u8 has_raw[0x1];
2223 u8 grh_required[0x1];
2224 u8 reserved_1[0xc];
2225 u8 port_physical_state[0x4];
2226 u8 vport_state_policy[0x4];
2227 u8 port_state[0x4];
2228 u8 vport_state[0x4];
2229
2230 u8 reserved_2[0x20];
2231
2232 u8 system_image_guid[0x40];
2233
2234 u8 port_guid[0x40];
2235
2236 u8 node_guid[0x40];
2237
2238 u8 cap_mask1[0x20];
2239
2240 u8 cap_mask1_field_select[0x20];
2241
2242 u8 cap_mask2[0x20];
2243
2244 u8 cap_mask2_field_select[0x20];
2245
2246 u8 reserved_3[0x80];
2247
2248 u8 lid[0x10];
2249 u8 reserved_4[0x4];
2250 u8 init_type_reply[0x4];
2251 u8 lmc[0x3];
2252 u8 subnet_timeout[0x5];
2253
2254 u8 sm_lid[0x10];
2255 u8 sm_sl[0x4];
2256 u8 reserved_5[0xc];
2257
2258 u8 qkey_violation_counter[0x10];
2259 u8 pkey_violation_counter[0x10];
2260
2261 u8 reserved_6[0xca0];
2262};
2263
2264enum {
2265 MLX5_EQC_STATUS_OK = 0x0,
2266 MLX5_EQC_STATUS_EQ_WRITE_FAILURE = 0xa,
2267};
2268
2269enum {
2270 MLX5_EQC_ST_ARMED = 0x9,
2271 MLX5_EQC_ST_FIRED = 0xa,
2272};
2273
2274struct mlx5_ifc_eqc_bits {
2275 u8 status[0x4];
2276 u8 reserved_0[0x9];
2277 u8 ec[0x1];
2278 u8 oi[0x1];
2279 u8 reserved_1[0x5];
2280 u8 st[0x4];
2281 u8 reserved_2[0x8];
2282
2283 u8 reserved_3[0x20];
2284
2285 u8 reserved_4[0x14];
2286 u8 page_offset[0x6];
2287 u8 reserved_5[0x6];
2288
2289 u8 reserved_6[0x3];
2290 u8 log_eq_size[0x5];
2291 u8 uar_page[0x18];
2292
2293 u8 reserved_7[0x20];
2294
2295 u8 reserved_8[0x18];
2296 u8 intr[0x8];
2297
2298 u8 reserved_9[0x3];
2299 u8 log_page_size[0x5];
2300 u8 reserved_10[0x18];
2301
2302 u8 reserved_11[0x60];
2303
2304 u8 reserved_12[0x8];
2305 u8 consumer_counter[0x18];
2306
2307 u8 reserved_13[0x8];
2308 u8 producer_counter[0x18];
2309
2310 u8 reserved_14[0x80];
2311};
2312
2313enum {
2314 MLX5_DCTC_STATE_ACTIVE = 0x0,
2315 MLX5_DCTC_STATE_DRAINING = 0x1,
2316 MLX5_DCTC_STATE_DRAINED = 0x2,
2317};
2318
2319enum {
2320 MLX5_DCTC_CS_RES_DISABLE = 0x0,
2321 MLX5_DCTC_CS_RES_NA = 0x1,
2322 MLX5_DCTC_CS_RES_UP_TO_64B = 0x2,
2323};
2324
2325enum {
2326 MLX5_DCTC_MTU_256_BYTES = 0x1,
2327 MLX5_DCTC_MTU_512_BYTES = 0x2,
2328 MLX5_DCTC_MTU_1K_BYTES = 0x3,
2329 MLX5_DCTC_MTU_2K_BYTES = 0x4,
2330 MLX5_DCTC_MTU_4K_BYTES = 0x5,
2331};
2332
2333struct mlx5_ifc_dctc_bits {
2334 u8 reserved_0[0x4];
2335 u8 state[0x4];
2336 u8 reserved_1[0x18];
2337
2338 u8 reserved_2[0x8];
2339 u8 user_index[0x18];
2340
2341 u8 reserved_3[0x8];
2342 u8 cqn[0x18];
2343
2344 u8 counter_set_id[0x8];
2345 u8 atomic_mode[0x4];
2346 u8 rre[0x1];
2347 u8 rwe[0x1];
2348 u8 rae[0x1];
2349 u8 atomic_like_write_en[0x1];
2350 u8 latency_sensitive[0x1];
2351 u8 rlky[0x1];
2352 u8 free_ar[0x1];
2353 u8 reserved_4[0xd];
2354
2355 u8 reserved_5[0x8];
2356 u8 cs_res[0x8];
2357 u8 reserved_6[0x3];
2358 u8 min_rnr_nak[0x5];
2359 u8 reserved_7[0x8];
2360
2361 u8 reserved_8[0x8];
2362 u8 srqn[0x18];
2363
2364 u8 reserved_9[0x8];
2365 u8 pd[0x18];
2366
2367 u8 tclass[0x8];
2368 u8 reserved_10[0x4];
2369 u8 flow_label[0x14];
2370
2371 u8 dc_access_key[0x40];
2372
2373 u8 reserved_11[0x5];
2374 u8 mtu[0x3];
2375 u8 port[0x8];
2376 u8 pkey_index[0x10];
2377
2378 u8 reserved_12[0x8];
2379 u8 my_addr_index[0x8];
2380 u8 reserved_13[0x8];
2381 u8 hop_limit[0x8];
2382
2383 u8 dc_access_key_violation_count[0x20];
2384
2385 u8 reserved_14[0x14];
2386 u8 dei_cfi[0x1];
2387 u8 eth_prio[0x3];
2388 u8 ecn[0x2];
2389 u8 dscp[0x6];
2390
2391 u8 reserved_15[0x40];
2392};
2393
2394enum {
2395 MLX5_CQC_STATUS_OK = 0x0,
2396 MLX5_CQC_STATUS_CQ_OVERFLOW = 0x9,
2397 MLX5_CQC_STATUS_CQ_WRITE_FAIL = 0xa,
2398};
2399
2400enum {
2401 MLX5_CQC_CQE_SZ_64_BYTES = 0x0,
2402 MLX5_CQC_CQE_SZ_128_BYTES = 0x1,
2403};
2404
2405enum {
2406 MLX5_CQC_ST_SOLICITED_NOTIFICATION_REQUEST_ARMED = 0x6,
2407 MLX5_CQC_ST_NOTIFICATION_REQUEST_ARMED = 0x9,
2408 MLX5_CQC_ST_FIRED = 0xa,
2409};
2410
2411struct mlx5_ifc_cqc_bits {
2412 u8 status[0x4];
2413 u8 reserved_0[0x4];
2414 u8 cqe_sz[0x3];
2415 u8 cc[0x1];
2416 u8 reserved_1[0x1];
2417 u8 scqe_break_moderation_en[0x1];
2418 u8 oi[0x1];
2419 u8 reserved_2[0x2];
2420 u8 cqe_zip_en[0x1];
2421 u8 mini_cqe_res_format[0x2];
2422 u8 st[0x4];
2423 u8 reserved_3[0x8];
2424
2425 u8 reserved_4[0x20];
2426
2427 u8 reserved_5[0x14];
2428 u8 page_offset[0x6];
2429 u8 reserved_6[0x6];
2430
2431 u8 reserved_7[0x3];
2432 u8 log_cq_size[0x5];
2433 u8 uar_page[0x18];
2434
2435 u8 reserved_8[0x4];
2436 u8 cq_period[0xc];
2437 u8 cq_max_count[0x10];
2438
2439 u8 reserved_9[0x18];
2440 u8 c_eqn[0x8];
2441
2442 u8 reserved_10[0x3];
2443 u8 log_page_size[0x5];
2444 u8 reserved_11[0x18];
2445
2446 u8 reserved_12[0x20];
2447
2448 u8 reserved_13[0x8];
2449 u8 last_notified_index[0x18];
2450
2451 u8 reserved_14[0x8];
2452 u8 last_solicit_index[0x18];
2453
2454 u8 reserved_15[0x8];
2455 u8 consumer_counter[0x18];
2456
2457 u8 reserved_16[0x8];
2458 u8 producer_counter[0x18];
2459
2460 u8 reserved_17[0x40];
2461
2462 u8 dbr_addr[0x40];
2463};
2464
2465union mlx5_ifc_cong_control_roce_ecn_auto_bits {
2466 struct mlx5_ifc_cong_control_802_1qau_rp_bits cong_control_802_1qau_rp;
2467 struct mlx5_ifc_cong_control_r_roce_ecn_rp_bits cong_control_r_roce_ecn_rp;
2468 struct mlx5_ifc_cong_control_r_roce_ecn_np_bits cong_control_r_roce_ecn_np;
2469 u8 reserved_0[0x800];
2470};
2471
2472struct mlx5_ifc_query_adapter_param_block_bits {
2473 u8 reserved_0[0xc0];
2474
2475 u8 reserved_1[0x8];
2476 u8 ieee_vendor_id[0x18];
2477
2478 u8 reserved_2[0x10];
2479 u8 vsd_vendor_id[0x10];
2480
2481 u8 vsd[208][0x8];
2482
2483 u8 vsd_contd_psid[16][0x8];
2484};
2485
2486union mlx5_ifc_modify_field_select_resize_field_select_auto_bits {
2487 struct mlx5_ifc_modify_field_select_bits modify_field_select;
2488 struct mlx5_ifc_resize_field_select_bits resize_field_select;
2489 u8 reserved_0[0x20];
2490};
2491
2492union mlx5_ifc_field_select_802_1_r_roce_auto_bits {
2493 struct mlx5_ifc_field_select_802_1qau_rp_bits field_select_802_1qau_rp;
2494 struct mlx5_ifc_field_select_r_roce_rp_bits field_select_r_roce_rp;
2495 struct mlx5_ifc_field_select_r_roce_np_bits field_select_r_roce_np;
2496 u8 reserved_0[0x20];
2497};
2498
2499union mlx5_ifc_eth_cntrs_grp_data_layout_auto_bits {
2500 struct mlx5_ifc_eth_802_3_cntrs_grp_data_layout_bits eth_802_3_cntrs_grp_data_layout;
2501 struct mlx5_ifc_eth_2863_cntrs_grp_data_layout_bits eth_2863_cntrs_grp_data_layout;
2502 struct mlx5_ifc_eth_2819_cntrs_grp_data_layout_bits eth_2819_cntrs_grp_data_layout;
2503 struct mlx5_ifc_eth_3635_cntrs_grp_data_layout_bits eth_3635_cntrs_grp_data_layout;
2504 struct mlx5_ifc_eth_extended_cntrs_grp_data_layout_bits eth_extended_cntrs_grp_data_layout;
2505 struct mlx5_ifc_eth_per_prio_grp_data_layout_bits eth_per_prio_grp_data_layout;
2506 struct mlx5_ifc_eth_per_traffic_grp_data_layout_bits eth_per_traffic_grp_data_layout;
2507 struct mlx5_ifc_phys_layer_cntrs_bits phys_layer_cntrs;
2508 u8 reserved_0[0x7c0];
2509};
2510
2511union mlx5_ifc_event_auto_bits {
2512 struct mlx5_ifc_comp_event_bits comp_event;
2513 struct mlx5_ifc_dct_events_bits dct_events;
2514 struct mlx5_ifc_qp_events_bits qp_events;
2515 struct mlx5_ifc_wqe_associated_page_fault_event_bits wqe_associated_page_fault_event;
2516 struct mlx5_ifc_rdma_page_fault_event_bits rdma_page_fault_event;
2517 struct mlx5_ifc_cq_error_bits cq_error;
2518 struct mlx5_ifc_dropped_packet_logged_bits dropped_packet_logged;
2519 struct mlx5_ifc_port_state_change_event_bits port_state_change_event;
2520 struct mlx5_ifc_gpio_event_bits gpio_event;
2521 struct mlx5_ifc_db_bf_congestion_event_bits db_bf_congestion_event;
2522 struct mlx5_ifc_stall_vl_event_bits stall_vl_event;
2523 struct mlx5_ifc_cmd_inter_comp_event_bits cmd_inter_comp_event;
2524 u8 reserved_0[0xe0];
2525};
2526
2527struct mlx5_ifc_health_buffer_bits {
2528 u8 reserved_0[0x100];
2529
2530 u8 assert_existptr[0x20];
2531
2532 u8 assert_callra[0x20];
2533
2534 u8 reserved_1[0x40];
2535
2536 u8 fw_version[0x20];
2537
2538 u8 hw_id[0x20];
2539
2540 u8 reserved_2[0x20];
2541
2542 u8 irisc_index[0x8];
2543 u8 synd[0x8];
2544 u8 ext_synd[0x10];
2545};
2546
2547struct mlx5_ifc_register_loopback_control_bits {
2548 u8 no_lb[0x1];
2549 u8 reserved_0[0x7];
2550 u8 port[0x8];
2551 u8 reserved_1[0x10];
2552
2553 u8 reserved_2[0x60];
2554};
2555
2556struct mlx5_ifc_teardown_hca_out_bits {
2557 u8 status[0x8];
2558 u8 reserved_0[0x18];
2559
2560 u8 syndrome[0x20];
2561
2562 u8 reserved_1[0x40];
2563};
2564
2565enum {
2566 MLX5_TEARDOWN_HCA_IN_PROFILE_GRACEFUL_CLOSE = 0x0,
2567 MLX5_TEARDOWN_HCA_IN_PROFILE_PANIC_CLOSE = 0x1,
2568};
2569
2570struct mlx5_ifc_teardown_hca_in_bits {
2571 u8 opcode[0x10];
2572 u8 reserved_0[0x10];
2573
2574 u8 reserved_1[0x10];
2575 u8 op_mod[0x10];
2576
2577 u8 reserved_2[0x10];
2578 u8 profile[0x10];
2579
2580 u8 reserved_3[0x20];
2581};
2582
2583struct mlx5_ifc_sqerr2rts_qp_out_bits {
2584 u8 status[0x8];
2585 u8 reserved_0[0x18];
2586
2587 u8 syndrome[0x20];
2588
2589 u8 reserved_1[0x40];
2590};
2591
2592struct mlx5_ifc_sqerr2rts_qp_in_bits {
2593 u8 opcode[0x10];
2594 u8 reserved_0[0x10];
2595
2596 u8 reserved_1[0x10];
2597 u8 op_mod[0x10];
2598
2599 u8 reserved_2[0x8];
2600 u8 qpn[0x18];
2601
2602 u8 reserved_3[0x20];
2603
2604 u8 opt_param_mask[0x20];
2605
2606 u8 reserved_4[0x20];
2607
2608 struct mlx5_ifc_qpc_bits qpc;
2609
2610 u8 reserved_5[0x80];
2611};
2612
2613struct mlx5_ifc_sqd2rts_qp_out_bits {
2614 u8 status[0x8];
2615 u8 reserved_0[0x18];
2616
2617 u8 syndrome[0x20];
2618
2619 u8 reserved_1[0x40];
2620};
2621
2622struct mlx5_ifc_sqd2rts_qp_in_bits {
2623 u8 opcode[0x10];
2624 u8 reserved_0[0x10];
2625
2626 u8 reserved_1[0x10];
2627 u8 op_mod[0x10];
2628
2629 u8 reserved_2[0x8];
2630 u8 qpn[0x18];
2631
2632 u8 reserved_3[0x20];
2633
2634 u8 opt_param_mask[0x20];
2635
2636 u8 reserved_4[0x20];
2637
2638 struct mlx5_ifc_qpc_bits qpc;
2639
2640 u8 reserved_5[0x80];
2641};
2642
2643struct mlx5_ifc_set_roce_address_out_bits {
2644 u8 status[0x8];
2645 u8 reserved_0[0x18];
2646
2647 u8 syndrome[0x20];
2648
2649 u8 reserved_1[0x40];
2650};
2651
2652struct mlx5_ifc_set_roce_address_in_bits {
2653 u8 opcode[0x10];
2654 u8 reserved_0[0x10];
2655
2656 u8 reserved_1[0x10];
2657 u8 op_mod[0x10];
2658
2659 u8 roce_address_index[0x10];
2660 u8 reserved_2[0x10];
2661
2662 u8 reserved_3[0x20];
2663
2664 struct mlx5_ifc_roce_addr_layout_bits roce_address;
2665};
2666
2667struct mlx5_ifc_set_mad_demux_out_bits {
2668 u8 status[0x8];
2669 u8 reserved_0[0x18];
2670
2671 u8 syndrome[0x20];
2672
2673 u8 reserved_1[0x40];
2674};
2675
2676enum {
2677 MLX5_SET_MAD_DEMUX_IN_DEMUX_MODE_PASS_ALL = 0x0,
2678 MLX5_SET_MAD_DEMUX_IN_DEMUX_MODE_SELECTIVE = 0x2,
2679};
2680
2681struct mlx5_ifc_set_mad_demux_in_bits {
2682 u8 opcode[0x10];
2683 u8 reserved_0[0x10];
2684
2685 u8 reserved_1[0x10];
2686 u8 op_mod[0x10];
2687
2688 u8 reserved_2[0x20];
2689
2690 u8 reserved_3[0x6];
2691 u8 demux_mode[0x2];
2692 u8 reserved_4[0x18];
2693};
2694
2695struct mlx5_ifc_set_l2_table_entry_out_bits {
2696 u8 status[0x8];
2697 u8 reserved_0[0x18];
2698
2699 u8 syndrome[0x20];
2700
2701 u8 reserved_1[0x40];
2702};
2703
2704struct mlx5_ifc_set_l2_table_entry_in_bits {
2705 u8 opcode[0x10];
2706 u8 reserved_0[0x10];
2707
2708 u8 reserved_1[0x10];
2709 u8 op_mod[0x10];
2710
2711 u8 reserved_2[0x60];
2712
2713 u8 reserved_3[0x8];
2714 u8 table_index[0x18];
2715
2716 u8 reserved_4[0x20];
2717
2718 u8 reserved_5[0x13];
2719 u8 vlan_valid[0x1];
2720 u8 vlan[0xc];
2721
2722 struct mlx5_ifc_mac_address_layout_bits mac_address;
2723
2724 u8 reserved_6[0xc0];
2725};
2726
2727struct mlx5_ifc_set_issi_out_bits {
2728 u8 status[0x8];
2729 u8 reserved_0[0x18];
2730
2731 u8 syndrome[0x20];
2732
2733 u8 reserved_1[0x40];
2734};
2735
2736struct mlx5_ifc_set_issi_in_bits {
2737 u8 opcode[0x10];
2738 u8 reserved_0[0x10];
2739
2740 u8 reserved_1[0x10];
2741 u8 op_mod[0x10];
2742
2743 u8 reserved_2[0x10];
2744 u8 current_issi[0x10];
2745
2746 u8 reserved_3[0x20];
2747};
2748
2749struct mlx5_ifc_set_hca_cap_out_bits {
2750 u8 status[0x8];
2751 u8 reserved_0[0x18];
2752
2753 u8 syndrome[0x20];
2754
2755 u8 reserved_1[0x40];
305}; 2756};
306 2757
307struct mlx5_ifc_set_hca_cap_in_bits { 2758struct mlx5_ifc_set_hca_cap_in_bits {
@@ -313,10 +2764,653 @@ struct mlx5_ifc_set_hca_cap_in_bits {
313 2764
314 u8 reserved_2[0x40]; 2765 u8 reserved_2[0x40];
315 2766
316 struct mlx5_ifc_cmd_hca_cap_bits hca_capability_struct; 2767 union mlx5_ifc_hca_cap_union_bits capability;
317}; 2768};
318 2769
319struct mlx5_ifc_query_hca_cap_in_bits { 2770struct mlx5_ifc_set_fte_out_bits {
2771 u8 status[0x8];
2772 u8 reserved_0[0x18];
2773
2774 u8 syndrome[0x20];
2775
2776 u8 reserved_1[0x40];
2777};
2778
2779struct mlx5_ifc_set_fte_in_bits {
2780 u8 opcode[0x10];
2781 u8 reserved_0[0x10];
2782
2783 u8 reserved_1[0x10];
2784 u8 op_mod[0x10];
2785
2786 u8 reserved_2[0x40];
2787
2788 u8 table_type[0x8];
2789 u8 reserved_3[0x18];
2790
2791 u8 reserved_4[0x8];
2792 u8 table_id[0x18];
2793
2794 u8 reserved_5[0x40];
2795
2796 u8 flow_index[0x20];
2797
2798 u8 reserved_6[0xe0];
2799
2800 struct mlx5_ifc_flow_context_bits flow_context;
2801};
2802
2803struct mlx5_ifc_rts2rts_qp_out_bits {
2804 u8 status[0x8];
2805 u8 reserved_0[0x18];
2806
2807 u8 syndrome[0x20];
2808
2809 u8 reserved_1[0x40];
2810};
2811
2812struct mlx5_ifc_rts2rts_qp_in_bits {
2813 u8 opcode[0x10];
2814 u8 reserved_0[0x10];
2815
2816 u8 reserved_1[0x10];
2817 u8 op_mod[0x10];
2818
2819 u8 reserved_2[0x8];
2820 u8 qpn[0x18];
2821
2822 u8 reserved_3[0x20];
2823
2824 u8 opt_param_mask[0x20];
2825
2826 u8 reserved_4[0x20];
2827
2828 struct mlx5_ifc_qpc_bits qpc;
2829
2830 u8 reserved_5[0x80];
2831};
2832
2833struct mlx5_ifc_rtr2rts_qp_out_bits {
2834 u8 status[0x8];
2835 u8 reserved_0[0x18];
2836
2837 u8 syndrome[0x20];
2838
2839 u8 reserved_1[0x40];
2840};
2841
2842struct mlx5_ifc_rtr2rts_qp_in_bits {
2843 u8 opcode[0x10];
2844 u8 reserved_0[0x10];
2845
2846 u8 reserved_1[0x10];
2847 u8 op_mod[0x10];
2848
2849 u8 reserved_2[0x8];
2850 u8 qpn[0x18];
2851
2852 u8 reserved_3[0x20];
2853
2854 u8 opt_param_mask[0x20];
2855
2856 u8 reserved_4[0x20];
2857
2858 struct mlx5_ifc_qpc_bits qpc;
2859
2860 u8 reserved_5[0x80];
2861};
2862
2863struct mlx5_ifc_rst2init_qp_out_bits {
2864 u8 status[0x8];
2865 u8 reserved_0[0x18];
2866
2867 u8 syndrome[0x20];
2868
2869 u8 reserved_1[0x40];
2870};
2871
2872struct mlx5_ifc_rst2init_qp_in_bits {
2873 u8 opcode[0x10];
2874 u8 reserved_0[0x10];
2875
2876 u8 reserved_1[0x10];
2877 u8 op_mod[0x10];
2878
2879 u8 reserved_2[0x8];
2880 u8 qpn[0x18];
2881
2882 u8 reserved_3[0x20];
2883
2884 u8 opt_param_mask[0x20];
2885
2886 u8 reserved_4[0x20];
2887
2888 struct mlx5_ifc_qpc_bits qpc;
2889
2890 u8 reserved_5[0x80];
2891};
2892
2893struct mlx5_ifc_query_xrc_srq_out_bits {
2894 u8 status[0x8];
2895 u8 reserved_0[0x18];
2896
2897 u8 syndrome[0x20];
2898
2899 u8 reserved_1[0x40];
2900
2901 struct mlx5_ifc_xrc_srqc_bits xrc_srq_context_entry;
2902
2903 u8 reserved_2[0x600];
2904
2905 u8 pas[0][0x40];
2906};
2907
2908struct mlx5_ifc_query_xrc_srq_in_bits {
2909 u8 opcode[0x10];
2910 u8 reserved_0[0x10];
2911
2912 u8 reserved_1[0x10];
2913 u8 op_mod[0x10];
2914
2915 u8 reserved_2[0x8];
2916 u8 xrc_srqn[0x18];
2917
2918 u8 reserved_3[0x20];
2919};
2920
2921enum {
2922 MLX5_QUERY_VPORT_STATE_OUT_STATE_DOWN = 0x0,
2923 MLX5_QUERY_VPORT_STATE_OUT_STATE_UP = 0x1,
2924};
2925
2926struct mlx5_ifc_query_vport_state_out_bits {
2927 u8 status[0x8];
2928 u8 reserved_0[0x18];
2929
2930 u8 syndrome[0x20];
2931
2932 u8 reserved_1[0x20];
2933
2934 u8 reserved_2[0x18];
2935 u8 admin_state[0x4];
2936 u8 state[0x4];
2937};
2938
2939enum {
2940 MLX5_QUERY_VPORT_STATE_IN_OP_MOD_VNIC_VPORT = 0x0,
2941};
2942
2943struct mlx5_ifc_query_vport_state_in_bits {
2944 u8 opcode[0x10];
2945 u8 reserved_0[0x10];
2946
2947 u8 reserved_1[0x10];
2948 u8 op_mod[0x10];
2949
2950 u8 other_vport[0x1];
2951 u8 reserved_2[0xf];
2952 u8 vport_number[0x10];
2953
2954 u8 reserved_3[0x20];
2955};
2956
2957struct mlx5_ifc_query_vport_counter_out_bits {
2958 u8 status[0x8];
2959 u8 reserved_0[0x18];
2960
2961 u8 syndrome[0x20];
2962
2963 u8 reserved_1[0x40];
2964
2965 struct mlx5_ifc_traffic_counter_bits received_errors;
2966
2967 struct mlx5_ifc_traffic_counter_bits transmit_errors;
2968
2969 struct mlx5_ifc_traffic_counter_bits received_ib_unicast;
2970
2971 struct mlx5_ifc_traffic_counter_bits transmitted_ib_unicast;
2972
2973 struct mlx5_ifc_traffic_counter_bits received_ib_multicast;
2974
2975 struct mlx5_ifc_traffic_counter_bits transmitted_ib_multicast;
2976
2977 struct mlx5_ifc_traffic_counter_bits received_eth_broadcast;
2978
2979 struct mlx5_ifc_traffic_counter_bits transmitted_eth_broadcast;
2980
2981 struct mlx5_ifc_traffic_counter_bits received_eth_unicast;
2982
2983 struct mlx5_ifc_traffic_counter_bits transmitted_eth_unicast;
2984
2985 struct mlx5_ifc_traffic_counter_bits received_eth_multicast;
2986
2987 struct mlx5_ifc_traffic_counter_bits transmitted_eth_multicast;
2988
2989 u8 reserved_2[0xa00];
2990};
2991
2992enum {
2993 MLX5_QUERY_VPORT_COUNTER_IN_OP_MOD_VPORT_COUNTERS = 0x0,
2994};
2995
2996struct mlx5_ifc_query_vport_counter_in_bits {
2997 u8 opcode[0x10];
2998 u8 reserved_0[0x10];
2999
3000 u8 reserved_1[0x10];
3001 u8 op_mod[0x10];
3002
3003 u8 other_vport[0x1];
3004 u8 reserved_2[0xf];
3005 u8 vport_number[0x10];
3006
3007 u8 reserved_3[0x60];
3008
3009 u8 clear[0x1];
3010 u8 reserved_4[0x1f];
3011
3012 u8 reserved_5[0x20];
3013};
3014
3015struct mlx5_ifc_query_tis_out_bits {
3016 u8 status[0x8];
3017 u8 reserved_0[0x18];
3018
3019 u8 syndrome[0x20];
3020
3021 u8 reserved_1[0x40];
3022
3023 struct mlx5_ifc_tisc_bits tis_context;
3024};
3025
3026struct mlx5_ifc_query_tis_in_bits {
3027 u8 opcode[0x10];
3028 u8 reserved_0[0x10];
3029
3030 u8 reserved_1[0x10];
3031 u8 op_mod[0x10];
3032
3033 u8 reserved_2[0x8];
3034 u8 tisn[0x18];
3035
3036 u8 reserved_3[0x20];
3037};
3038
3039struct mlx5_ifc_query_tir_out_bits {
3040 u8 status[0x8];
3041 u8 reserved_0[0x18];
3042
3043 u8 syndrome[0x20];
3044
3045 u8 reserved_1[0xc0];
3046
3047 struct mlx5_ifc_tirc_bits tir_context;
3048};
3049
3050struct mlx5_ifc_query_tir_in_bits {
3051 u8 opcode[0x10];
3052 u8 reserved_0[0x10];
3053
3054 u8 reserved_1[0x10];
3055 u8 op_mod[0x10];
3056
3057 u8 reserved_2[0x8];
3058 u8 tirn[0x18];
3059
3060 u8 reserved_3[0x20];
3061};
3062
3063struct mlx5_ifc_query_srq_out_bits {
3064 u8 status[0x8];
3065 u8 reserved_0[0x18];
3066
3067 u8 syndrome[0x20];
3068
3069 u8 reserved_1[0x40];
3070
3071 struct mlx5_ifc_srqc_bits srq_context_entry;
3072
3073 u8 reserved_2[0x600];
3074
3075 u8 pas[0][0x40];
3076};
3077
3078struct mlx5_ifc_query_srq_in_bits {
3079 u8 opcode[0x10];
3080 u8 reserved_0[0x10];
3081
3082 u8 reserved_1[0x10];
3083 u8 op_mod[0x10];
3084
3085 u8 reserved_2[0x8];
3086 u8 srqn[0x18];
3087
3088 u8 reserved_3[0x20];
3089};
3090
3091struct mlx5_ifc_query_sq_out_bits {
3092 u8 status[0x8];
3093 u8 reserved_0[0x18];
3094
3095 u8 syndrome[0x20];
3096
3097 u8 reserved_1[0xc0];
3098
3099 struct mlx5_ifc_sqc_bits sq_context;
3100};
3101
3102struct mlx5_ifc_query_sq_in_bits {
3103 u8 opcode[0x10];
3104 u8 reserved_0[0x10];
3105
3106 u8 reserved_1[0x10];
3107 u8 op_mod[0x10];
3108
3109 u8 reserved_2[0x8];
3110 u8 sqn[0x18];
3111
3112 u8 reserved_3[0x20];
3113};
3114
3115struct mlx5_ifc_query_special_contexts_out_bits {
3116 u8 status[0x8];
3117 u8 reserved_0[0x18];
3118
3119 u8 syndrome[0x20];
3120
3121 u8 reserved_1[0x20];
3122
3123 u8 resd_lkey[0x20];
3124};
3125
3126struct mlx5_ifc_query_special_contexts_in_bits {
3127 u8 opcode[0x10];
3128 u8 reserved_0[0x10];
3129
3130 u8 reserved_1[0x10];
3131 u8 op_mod[0x10];
3132
3133 u8 reserved_2[0x40];
3134};
3135
3136struct mlx5_ifc_query_rqt_out_bits {
3137 u8 status[0x8];
3138 u8 reserved_0[0x18];
3139
3140 u8 syndrome[0x20];
3141
3142 u8 reserved_1[0xc0];
3143
3144 struct mlx5_ifc_rqtc_bits rqt_context;
3145};
3146
3147struct mlx5_ifc_query_rqt_in_bits {
3148 u8 opcode[0x10];
3149 u8 reserved_0[0x10];
3150
3151 u8 reserved_1[0x10];
3152 u8 op_mod[0x10];
3153
3154 u8 reserved_2[0x8];
3155 u8 rqtn[0x18];
3156
3157 u8 reserved_3[0x20];
3158};
3159
3160struct mlx5_ifc_query_rq_out_bits {
3161 u8 status[0x8];
3162 u8 reserved_0[0x18];
3163
3164 u8 syndrome[0x20];
3165
3166 u8 reserved_1[0xc0];
3167
3168 struct mlx5_ifc_rqc_bits rq_context;
3169};
3170
3171struct mlx5_ifc_query_rq_in_bits {
3172 u8 opcode[0x10];
3173 u8 reserved_0[0x10];
3174
3175 u8 reserved_1[0x10];
3176 u8 op_mod[0x10];
3177
3178 u8 reserved_2[0x8];
3179 u8 rqn[0x18];
3180
3181 u8 reserved_3[0x20];
3182};
3183
3184struct mlx5_ifc_query_roce_address_out_bits {
3185 u8 status[0x8];
3186 u8 reserved_0[0x18];
3187
3188 u8 syndrome[0x20];
3189
3190 u8 reserved_1[0x40];
3191
3192 struct mlx5_ifc_roce_addr_layout_bits roce_address;
3193};
3194
3195struct mlx5_ifc_query_roce_address_in_bits {
3196 u8 opcode[0x10];
3197 u8 reserved_0[0x10];
3198
3199 u8 reserved_1[0x10];
3200 u8 op_mod[0x10];
3201
3202 u8 roce_address_index[0x10];
3203 u8 reserved_2[0x10];
3204
3205 u8 reserved_3[0x20];
3206};
3207
3208struct mlx5_ifc_query_rmp_out_bits {
3209 u8 status[0x8];
3210 u8 reserved_0[0x18];
3211
3212 u8 syndrome[0x20];
3213
3214 u8 reserved_1[0xc0];
3215
3216 struct mlx5_ifc_rmpc_bits rmp_context;
3217};
3218
3219struct mlx5_ifc_query_rmp_in_bits {
3220 u8 opcode[0x10];
3221 u8 reserved_0[0x10];
3222
3223 u8 reserved_1[0x10];
3224 u8 op_mod[0x10];
3225
3226 u8 reserved_2[0x8];
3227 u8 rmpn[0x18];
3228
3229 u8 reserved_3[0x20];
3230};
3231
3232struct mlx5_ifc_query_qp_out_bits {
3233 u8 status[0x8];
3234 u8 reserved_0[0x18];
3235
3236 u8 syndrome[0x20];
3237
3238 u8 reserved_1[0x40];
3239
3240 u8 opt_param_mask[0x20];
3241
3242 u8 reserved_2[0x20];
3243
3244 struct mlx5_ifc_qpc_bits qpc;
3245
3246 u8 reserved_3[0x80];
3247
3248 u8 pas[0][0x40];
3249};
3250
3251struct mlx5_ifc_query_qp_in_bits {
3252 u8 opcode[0x10];
3253 u8 reserved_0[0x10];
3254
3255 u8 reserved_1[0x10];
3256 u8 op_mod[0x10];
3257
3258 u8 reserved_2[0x8];
3259 u8 qpn[0x18];
3260
3261 u8 reserved_3[0x20];
3262};
3263
3264struct mlx5_ifc_query_q_counter_out_bits {
3265 u8 status[0x8];
3266 u8 reserved_0[0x18];
3267
3268 u8 syndrome[0x20];
3269
3270 u8 reserved_1[0x40];
3271
3272 u8 rx_write_requests[0x20];
3273
3274 u8 reserved_2[0x20];
3275
3276 u8 rx_read_requests[0x20];
3277
3278 u8 reserved_3[0x20];
3279
3280 u8 rx_atomic_requests[0x20];
3281
3282 u8 reserved_4[0x20];
3283
3284 u8 rx_dct_connect[0x20];
3285
3286 u8 reserved_5[0x20];
3287
3288 u8 out_of_buffer[0x20];
3289
3290 u8 reserved_6[0x20];
3291
3292 u8 out_of_sequence[0x20];
3293
3294 u8 reserved_7[0x620];
3295};
3296
3297struct mlx5_ifc_query_q_counter_in_bits {
3298 u8 opcode[0x10];
3299 u8 reserved_0[0x10];
3300
3301 u8 reserved_1[0x10];
3302 u8 op_mod[0x10];
3303
3304 u8 reserved_2[0x80];
3305
3306 u8 clear[0x1];
3307 u8 reserved_3[0x1f];
3308
3309 u8 reserved_4[0x18];
3310 u8 counter_set_id[0x8];
3311};
3312
3313struct mlx5_ifc_query_pages_out_bits {
3314 u8 status[0x8];
3315 u8 reserved_0[0x18];
3316
3317 u8 syndrome[0x20];
3318
3319 u8 reserved_1[0x10];
3320 u8 function_id[0x10];
3321
3322 u8 num_pages[0x20];
3323};
3324
3325enum {
3326 MLX5_QUERY_PAGES_IN_OP_MOD_BOOT_PAGES = 0x1,
3327 MLX5_QUERY_PAGES_IN_OP_MOD_INIT_PAGES = 0x2,
3328 MLX5_QUERY_PAGES_IN_OP_MOD_REGULAR_PAGES = 0x3,
3329};
3330
3331struct mlx5_ifc_query_pages_in_bits {
3332 u8 opcode[0x10];
3333 u8 reserved_0[0x10];
3334
3335 u8 reserved_1[0x10];
3336 u8 op_mod[0x10];
3337
3338 u8 reserved_2[0x10];
3339 u8 function_id[0x10];
3340
3341 u8 reserved_3[0x20];
3342};
3343
3344struct mlx5_ifc_query_nic_vport_context_out_bits {
3345 u8 status[0x8];
3346 u8 reserved_0[0x18];
3347
3348 u8 syndrome[0x20];
3349
3350 u8 reserved_1[0x40];
3351
3352 struct mlx5_ifc_nic_vport_context_bits nic_vport_context;
3353};
3354
3355struct mlx5_ifc_query_nic_vport_context_in_bits {
3356 u8 opcode[0x10];
3357 u8 reserved_0[0x10];
3358
3359 u8 reserved_1[0x10];
3360 u8 op_mod[0x10];
3361
3362 u8 other_vport[0x1];
3363 u8 reserved_2[0xf];
3364 u8 vport_number[0x10];
3365
3366 u8 reserved_3[0x5];
3367 u8 allowed_list_type[0x3];
3368 u8 reserved_4[0x18];
3369};
3370
3371struct mlx5_ifc_query_mkey_out_bits {
3372 u8 status[0x8];
3373 u8 reserved_0[0x18];
3374
3375 u8 syndrome[0x20];
3376
3377 u8 reserved_1[0x40];
3378
3379 struct mlx5_ifc_mkc_bits memory_key_mkey_entry;
3380
3381 u8 reserved_2[0x600];
3382
3383 u8 bsf0_klm0_pas_mtt0_1[16][0x8];
3384
3385 u8 bsf1_klm1_pas_mtt2_3[16][0x8];
3386};
3387
3388struct mlx5_ifc_query_mkey_in_bits {
3389 u8 opcode[0x10];
3390 u8 reserved_0[0x10];
3391
3392 u8 reserved_1[0x10];
3393 u8 op_mod[0x10];
3394
3395 u8 reserved_2[0x8];
3396 u8 mkey_index[0x18];
3397
3398 u8 pg_access[0x1];
3399 u8 reserved_3[0x1f];
3400};
3401
3402struct mlx5_ifc_query_mad_demux_out_bits {
3403 u8 status[0x8];
3404 u8 reserved_0[0x18];
3405
3406 u8 syndrome[0x20];
3407
3408 u8 reserved_1[0x40];
3409
3410 u8 mad_dumux_parameters_block[0x20];
3411};
3412
3413struct mlx5_ifc_query_mad_demux_in_bits {
320 u8 opcode[0x10]; 3414 u8 opcode[0x10];
321 u8 reserved_0[0x10]; 3415 u8 reserved_0[0x10];
322 3416
@@ -326,6 +3420,146 @@ struct mlx5_ifc_query_hca_cap_in_bits {
326 u8 reserved_2[0x40]; 3420 u8 reserved_2[0x40];
327}; 3421};
328 3422
3423struct mlx5_ifc_query_l2_table_entry_out_bits {
3424 u8 status[0x8];
3425 u8 reserved_0[0x18];
3426
3427 u8 syndrome[0x20];
3428
3429 u8 reserved_1[0xa0];
3430
3431 u8 reserved_2[0x13];
3432 u8 vlan_valid[0x1];
3433 u8 vlan[0xc];
3434
3435 struct mlx5_ifc_mac_address_layout_bits mac_address;
3436
3437 u8 reserved_3[0xc0];
3438};
3439
3440struct mlx5_ifc_query_l2_table_entry_in_bits {
3441 u8 opcode[0x10];
3442 u8 reserved_0[0x10];
3443
3444 u8 reserved_1[0x10];
3445 u8 op_mod[0x10];
3446
3447 u8 reserved_2[0x60];
3448
3449 u8 reserved_3[0x8];
3450 u8 table_index[0x18];
3451
3452 u8 reserved_4[0x140];
3453};
3454
3455struct mlx5_ifc_query_issi_out_bits {
3456 u8 status[0x8];
3457 u8 reserved_0[0x18];
3458
3459 u8 syndrome[0x20];
3460
3461 u8 reserved_1[0x10];
3462 u8 current_issi[0x10];
3463
3464 u8 reserved_2[0xa0];
3465
3466 u8 supported_issi_reserved[76][0x8];
3467 u8 supported_issi_dw0[0x20];
3468};
3469
3470struct mlx5_ifc_query_issi_in_bits {
3471 u8 opcode[0x10];
3472 u8 reserved_0[0x10];
3473
3474 u8 reserved_1[0x10];
3475 u8 op_mod[0x10];
3476
3477 u8 reserved_2[0x40];
3478};
3479
3480struct mlx5_ifc_query_hca_vport_pkey_out_bits {
3481 u8 status[0x8];
3482 u8 reserved_0[0x18];
3483
3484 u8 syndrome[0x20];
3485
3486 u8 reserved_1[0x40];
3487
3488 struct mlx5_ifc_pkey_bits pkey[0];
3489};
3490
3491struct mlx5_ifc_query_hca_vport_pkey_in_bits {
3492 u8 opcode[0x10];
3493 u8 reserved_0[0x10];
3494
3495 u8 reserved_1[0x10];
3496 u8 op_mod[0x10];
3497
3498 u8 other_vport[0x1];
3499 u8 reserved_2[0xb];
3500 u8 port_num[0x4];
3501 u8 vport_number[0x10];
3502
3503 u8 reserved_3[0x10];
3504 u8 pkey_index[0x10];
3505};
3506
3507struct mlx5_ifc_query_hca_vport_gid_out_bits {
3508 u8 status[0x8];
3509 u8 reserved_0[0x18];
3510
3511 u8 syndrome[0x20];
3512
3513 u8 reserved_1[0x20];
3514
3515 u8 gids_num[0x10];
3516 u8 reserved_2[0x10];
3517
3518 struct mlx5_ifc_array128_auto_bits gid[0];
3519};
3520
3521struct mlx5_ifc_query_hca_vport_gid_in_bits {
3522 u8 opcode[0x10];
3523 u8 reserved_0[0x10];
3524
3525 u8 reserved_1[0x10];
3526 u8 op_mod[0x10];
3527
3528 u8 other_vport[0x1];
3529 u8 reserved_2[0xb];
3530 u8 port_num[0x4];
3531 u8 vport_number[0x10];
3532
3533 u8 reserved_3[0x10];
3534 u8 gid_index[0x10];
3535};
3536
3537struct mlx5_ifc_query_hca_vport_context_out_bits {
3538 u8 status[0x8];
3539 u8 reserved_0[0x18];
3540
3541 u8 syndrome[0x20];
3542
3543 u8 reserved_1[0x40];
3544
3545 struct mlx5_ifc_hca_vport_context_bits hca_vport_context;
3546};
3547
3548struct mlx5_ifc_query_hca_vport_context_in_bits {
3549 u8 opcode[0x10];
3550 u8 reserved_0[0x10];
3551
3552 u8 reserved_1[0x10];
3553 u8 op_mod[0x10];
3554
3555 u8 other_vport[0x1];
3556 u8 reserved_2[0xb];
3557 u8 port_num[0x4];
3558 u8 vport_number[0x10];
3559
3560 u8 reserved_3[0x20];
3561};
3562
329struct mlx5_ifc_query_hca_cap_out_bits { 3563struct mlx5_ifc_query_hca_cap_out_bits {
330 u8 status[0x8]; 3564 u8 status[0x8];
331 u8 reserved_0[0x18]; 3565 u8 reserved_0[0x18];
@@ -334,16 +3568,3216 @@ struct mlx5_ifc_query_hca_cap_out_bits {
334 3568
335 u8 reserved_1[0x40]; 3569 u8 reserved_1[0x40];
336 3570
337 u8 capability_struct[256][0x8]; 3571 union mlx5_ifc_hca_cap_union_bits capability;
338}; 3572};
339 3573
340struct mlx5_ifc_set_hca_cap_out_bits { 3574struct mlx5_ifc_query_hca_cap_in_bits {
3575 u8 opcode[0x10];
3576 u8 reserved_0[0x10];
3577
3578 u8 reserved_1[0x10];
3579 u8 op_mod[0x10];
3580
3581 u8 reserved_2[0x40];
3582};
3583
3584struct mlx5_ifc_query_flow_table_out_bits {
3585 u8 status[0x8];
3586 u8 reserved_0[0x18];
3587
3588 u8 syndrome[0x20];
3589
3590 u8 reserved_1[0x80];
3591
3592 u8 reserved_2[0x8];
3593 u8 level[0x8];
3594 u8 reserved_3[0x8];
3595 u8 log_size[0x8];
3596
3597 u8 reserved_4[0x120];
3598};
3599
3600struct mlx5_ifc_query_flow_table_in_bits {
3601 u8 opcode[0x10];
3602 u8 reserved_0[0x10];
3603
3604 u8 reserved_1[0x10];
3605 u8 op_mod[0x10];
3606
3607 u8 reserved_2[0x40];
3608
3609 u8 table_type[0x8];
3610 u8 reserved_3[0x18];
3611
3612 u8 reserved_4[0x8];
3613 u8 table_id[0x18];
3614
3615 u8 reserved_5[0x140];
3616};
3617
3618struct mlx5_ifc_query_fte_out_bits {
3619 u8 status[0x8];
3620 u8 reserved_0[0x18];
3621
3622 u8 syndrome[0x20];
3623
3624 u8 reserved_1[0x1c0];
3625
3626 struct mlx5_ifc_flow_context_bits flow_context;
3627};
3628
3629struct mlx5_ifc_query_fte_in_bits {
3630 u8 opcode[0x10];
3631 u8 reserved_0[0x10];
3632
3633 u8 reserved_1[0x10];
3634 u8 op_mod[0x10];
3635
3636 u8 reserved_2[0x40];
3637
3638 u8 table_type[0x8];
3639 u8 reserved_3[0x18];
3640
3641 u8 reserved_4[0x8];
3642 u8 table_id[0x18];
3643
3644 u8 reserved_5[0x40];
3645
3646 u8 flow_index[0x20];
3647
3648 u8 reserved_6[0xe0];
3649};
3650
3651enum {
3652 MLX5_QUERY_FLOW_GROUP_OUT_MATCH_CRITERIA_ENABLE_OUTER_HEADERS = 0x0,
3653 MLX5_QUERY_FLOW_GROUP_OUT_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS = 0x1,
3654 MLX5_QUERY_FLOW_GROUP_OUT_MATCH_CRITERIA_ENABLE_INNER_HEADERS = 0x2,
3655};
3656
3657struct mlx5_ifc_query_flow_group_out_bits {
3658 u8 status[0x8];
3659 u8 reserved_0[0x18];
3660
3661 u8 syndrome[0x20];
3662
3663 u8 reserved_1[0xa0];
3664
3665 u8 start_flow_index[0x20];
3666
3667 u8 reserved_2[0x20];
3668
3669 u8 end_flow_index[0x20];
3670
3671 u8 reserved_3[0xa0];
3672
3673 u8 reserved_4[0x18];
3674 u8 match_criteria_enable[0x8];
3675
3676 struct mlx5_ifc_fte_match_param_bits match_criteria;
3677
3678 u8 reserved_5[0xe00];
3679};
3680
3681struct mlx5_ifc_query_flow_group_in_bits {
3682 u8 opcode[0x10];
3683 u8 reserved_0[0x10];
3684
3685 u8 reserved_1[0x10];
3686 u8 op_mod[0x10];
3687
3688 u8 reserved_2[0x40];
3689
3690 u8 table_type[0x8];
3691 u8 reserved_3[0x18];
3692
3693 u8 reserved_4[0x8];
3694 u8 table_id[0x18];
3695
3696 u8 group_id[0x20];
3697
3698 u8 reserved_5[0x120];
3699};
3700
3701struct mlx5_ifc_query_eq_out_bits {
3702 u8 status[0x8];
3703 u8 reserved_0[0x18];
3704
3705 u8 syndrome[0x20];
3706
3707 u8 reserved_1[0x40];
3708
3709 struct mlx5_ifc_eqc_bits eq_context_entry;
3710
3711 u8 reserved_2[0x40];
3712
3713 u8 event_bitmask[0x40];
3714
3715 u8 reserved_3[0x580];
3716
3717 u8 pas[0][0x40];
3718};
3719
3720struct mlx5_ifc_query_eq_in_bits {
3721 u8 opcode[0x10];
3722 u8 reserved_0[0x10];
3723
3724 u8 reserved_1[0x10];
3725 u8 op_mod[0x10];
3726
3727 u8 reserved_2[0x18];
3728 u8 eq_number[0x8];
3729
3730 u8 reserved_3[0x20];
3731};
3732
3733struct mlx5_ifc_query_dct_out_bits {
3734 u8 status[0x8];
3735 u8 reserved_0[0x18];
3736
3737 u8 syndrome[0x20];
3738
3739 u8 reserved_1[0x40];
3740
3741 struct mlx5_ifc_dctc_bits dct_context_entry;
3742
3743 u8 reserved_2[0x180];
3744};
3745
3746struct mlx5_ifc_query_dct_in_bits {
3747 u8 opcode[0x10];
3748 u8 reserved_0[0x10];
3749
3750 u8 reserved_1[0x10];
3751 u8 op_mod[0x10];
3752
3753 u8 reserved_2[0x8];
3754 u8 dctn[0x18];
3755
3756 u8 reserved_3[0x20];
3757};
3758
3759struct mlx5_ifc_query_cq_out_bits {
341 u8 status[0x8]; 3760 u8 status[0x8];
342 u8 reserved_0[0x18]; 3761 u8 reserved_0[0x18];
343 3762
344 u8 syndrome[0x20]; 3763 u8 syndrome[0x20];
345 3764
346 u8 reserved_1[0x40]; 3765 u8 reserved_1[0x40];
3766
3767 struct mlx5_ifc_cqc_bits cq_context;
3768
3769 u8 reserved_2[0x600];
3770
3771 u8 pas[0][0x40];
3772};
3773
3774struct mlx5_ifc_query_cq_in_bits {
3775 u8 opcode[0x10];
3776 u8 reserved_0[0x10];
3777
3778 u8 reserved_1[0x10];
3779 u8 op_mod[0x10];
3780
3781 u8 reserved_2[0x8];
3782 u8 cqn[0x18];
3783
3784 u8 reserved_3[0x20];
3785};
3786
3787struct mlx5_ifc_query_cong_status_out_bits {
3788 u8 status[0x8];
3789 u8 reserved_0[0x18];
3790
3791 u8 syndrome[0x20];
3792
3793 u8 reserved_1[0x20];
3794
3795 u8 enable[0x1];
3796 u8 tag_enable[0x1];
3797 u8 reserved_2[0x1e];
3798};
3799
3800struct mlx5_ifc_query_cong_status_in_bits {
3801 u8 opcode[0x10];
3802 u8 reserved_0[0x10];
3803
3804 u8 reserved_1[0x10];
3805 u8 op_mod[0x10];
3806
3807 u8 reserved_2[0x18];
3808 u8 priority[0x4];
3809 u8 cong_protocol[0x4];
3810
3811 u8 reserved_3[0x20];
3812};
3813
3814struct mlx5_ifc_query_cong_statistics_out_bits {
3815 u8 status[0x8];
3816 u8 reserved_0[0x18];
3817
3818 u8 syndrome[0x20];
3819
3820 u8 reserved_1[0x40];
3821
3822 u8 cur_flows[0x20];
3823
3824 u8 sum_flows[0x20];
3825
3826 u8 cnp_ignored_high[0x20];
3827
3828 u8 cnp_ignored_low[0x20];
3829
3830 u8 cnp_handled_high[0x20];
3831
3832 u8 cnp_handled_low[0x20];
3833
3834 u8 reserved_2[0x100];
3835
3836 u8 time_stamp_high[0x20];
3837
3838 u8 time_stamp_low[0x20];
3839
3840 u8 accumulators_period[0x20];
3841
3842 u8 ecn_marked_roce_packets_high[0x20];
3843
3844 u8 ecn_marked_roce_packets_low[0x20];
3845
3846 u8 cnps_sent_high[0x20];
3847
3848 u8 cnps_sent_low[0x20];
3849
3850 u8 reserved_3[0x560];
3851};
3852
3853struct mlx5_ifc_query_cong_statistics_in_bits {
3854 u8 opcode[0x10];
3855 u8 reserved_0[0x10];
3856
3857 u8 reserved_1[0x10];
3858 u8 op_mod[0x10];
3859
3860 u8 clear[0x1];
3861 u8 reserved_2[0x1f];
3862
3863 u8 reserved_3[0x20];
3864};
3865
3866struct mlx5_ifc_query_cong_params_out_bits {
3867 u8 status[0x8];
3868 u8 reserved_0[0x18];
3869
3870 u8 syndrome[0x20];
3871
3872 u8 reserved_1[0x40];
3873
3874 union mlx5_ifc_cong_control_roce_ecn_auto_bits congestion_parameters;
3875};
3876
3877struct mlx5_ifc_query_cong_params_in_bits {
3878 u8 opcode[0x10];
3879 u8 reserved_0[0x10];
3880
3881 u8 reserved_1[0x10];
3882 u8 op_mod[0x10];
3883
3884 u8 reserved_2[0x1c];
3885 u8 cong_protocol[0x4];
3886
3887 u8 reserved_3[0x20];
3888};
3889
3890struct mlx5_ifc_query_adapter_out_bits {
3891 u8 status[0x8];
3892 u8 reserved_0[0x18];
3893
3894 u8 syndrome[0x20];
3895
3896 u8 reserved_1[0x40];
3897
3898 struct mlx5_ifc_query_adapter_param_block_bits query_adapter_struct;
3899};
3900
3901struct mlx5_ifc_query_adapter_in_bits {
3902 u8 opcode[0x10];
3903 u8 reserved_0[0x10];
3904
3905 u8 reserved_1[0x10];
3906 u8 op_mod[0x10];
3907
3908 u8 reserved_2[0x40];
3909};
3910
3911struct mlx5_ifc_qp_2rst_out_bits {
3912 u8 status[0x8];
3913 u8 reserved_0[0x18];
3914
3915 u8 syndrome[0x20];
3916
3917 u8 reserved_1[0x40];
3918};
3919
3920struct mlx5_ifc_qp_2rst_in_bits {
3921 u8 opcode[0x10];
3922 u8 reserved_0[0x10];
3923
3924 u8 reserved_1[0x10];
3925 u8 op_mod[0x10];
3926
3927 u8 reserved_2[0x8];
3928 u8 qpn[0x18];
3929
3930 u8 reserved_3[0x20];
3931};
3932
3933struct mlx5_ifc_qp_2err_out_bits {
3934 u8 status[0x8];
3935 u8 reserved_0[0x18];
3936
3937 u8 syndrome[0x20];
3938
3939 u8 reserved_1[0x40];
3940};
3941
3942struct mlx5_ifc_qp_2err_in_bits {
3943 u8 opcode[0x10];
3944 u8 reserved_0[0x10];
3945
3946 u8 reserved_1[0x10];
3947 u8 op_mod[0x10];
3948
3949 u8 reserved_2[0x8];
3950 u8 qpn[0x18];
3951
3952 u8 reserved_3[0x20];
3953};
3954
3955struct mlx5_ifc_page_fault_resume_out_bits {
3956 u8 status[0x8];
3957 u8 reserved_0[0x18];
3958
3959 u8 syndrome[0x20];
3960
3961 u8 reserved_1[0x40];
3962};
3963
3964struct mlx5_ifc_page_fault_resume_in_bits {
3965 u8 opcode[0x10];
3966 u8 reserved_0[0x10];
3967
3968 u8 reserved_1[0x10];
3969 u8 op_mod[0x10];
3970
3971 u8 error[0x1];
3972 u8 reserved_2[0x4];
3973 u8 rdma[0x1];
3974 u8 read_write[0x1];
3975 u8 req_res[0x1];
3976 u8 qpn[0x18];
3977
3978 u8 reserved_3[0x20];
3979};
3980
3981struct mlx5_ifc_nop_out_bits {
3982 u8 status[0x8];
3983 u8 reserved_0[0x18];
3984
3985 u8 syndrome[0x20];
3986
3987 u8 reserved_1[0x40];
3988};
3989
3990struct mlx5_ifc_nop_in_bits {
3991 u8 opcode[0x10];
3992 u8 reserved_0[0x10];
3993
3994 u8 reserved_1[0x10];
3995 u8 op_mod[0x10];
3996
3997 u8 reserved_2[0x40];
3998};
3999
4000struct mlx5_ifc_modify_vport_state_out_bits {
4001 u8 status[0x8];
4002 u8 reserved_0[0x18];
4003
4004 u8 syndrome[0x20];
4005
4006 u8 reserved_1[0x40];
4007};
4008
4009struct mlx5_ifc_modify_vport_state_in_bits {
4010 u8 opcode[0x10];
4011 u8 reserved_0[0x10];
4012
4013 u8 reserved_1[0x10];
4014 u8 op_mod[0x10];
4015
4016 u8 other_vport[0x1];
4017 u8 reserved_2[0xf];
4018 u8 vport_number[0x10];
4019
4020 u8 reserved_3[0x18];
4021 u8 admin_state[0x4];
4022 u8 reserved_4[0x4];
4023};
4024
4025struct mlx5_ifc_modify_tis_out_bits {
4026 u8 status[0x8];
4027 u8 reserved_0[0x18];
4028
4029 u8 syndrome[0x20];
4030
4031 u8 reserved_1[0x40];
4032};
4033
4034struct mlx5_ifc_modify_tis_in_bits {
4035 u8 opcode[0x10];
4036 u8 reserved_0[0x10];
4037
4038 u8 reserved_1[0x10];
4039 u8 op_mod[0x10];
4040
4041 u8 reserved_2[0x8];
4042 u8 tisn[0x18];
4043
4044 u8 reserved_3[0x20];
4045
4046 u8 modify_bitmask[0x40];
4047
4048 u8 reserved_4[0x40];
4049
4050 struct mlx5_ifc_tisc_bits ctx;
4051};
4052
4053struct mlx5_ifc_modify_tir_out_bits {
4054 u8 status[0x8];
4055 u8 reserved_0[0x18];
4056
4057 u8 syndrome[0x20];
4058
4059 u8 reserved_1[0x40];
4060};
4061
4062struct mlx5_ifc_modify_tir_in_bits {
4063 u8 opcode[0x10];
4064 u8 reserved_0[0x10];
4065
4066 u8 reserved_1[0x10];
4067 u8 op_mod[0x10];
4068
4069 u8 reserved_2[0x8];
4070 u8 tirn[0x18];
4071
4072 u8 reserved_3[0x20];
4073
4074 u8 modify_bitmask[0x40];
4075
4076 u8 reserved_4[0x40];
4077
4078 struct mlx5_ifc_tirc_bits ctx;
4079};
4080
4081struct mlx5_ifc_modify_sq_out_bits {
4082 u8 status[0x8];
4083 u8 reserved_0[0x18];
4084
4085 u8 syndrome[0x20];
4086
4087 u8 reserved_1[0x40];
4088};
4089
4090struct mlx5_ifc_modify_sq_in_bits {
4091 u8 opcode[0x10];
4092 u8 reserved_0[0x10];
4093
4094 u8 reserved_1[0x10];
4095 u8 op_mod[0x10];
4096
4097 u8 sq_state[0x4];
4098 u8 reserved_2[0x4];
4099 u8 sqn[0x18];
4100
4101 u8 reserved_3[0x20];
4102
4103 u8 modify_bitmask[0x40];
4104
4105 u8 reserved_4[0x40];
4106
4107 struct mlx5_ifc_sqc_bits ctx;
4108};
4109
4110struct mlx5_ifc_modify_rqt_out_bits {
4111 u8 status[0x8];
4112 u8 reserved_0[0x18];
4113
4114 u8 syndrome[0x20];
4115
4116 u8 reserved_1[0x40];
4117};
4118
4119struct mlx5_ifc_modify_rqt_in_bits {
4120 u8 opcode[0x10];
4121 u8 reserved_0[0x10];
4122
4123 u8 reserved_1[0x10];
4124 u8 op_mod[0x10];
4125
4126 u8 reserved_2[0x8];
4127 u8 rqtn[0x18];
4128
4129 u8 reserved_3[0x20];
4130
4131 u8 modify_bitmask[0x40];
4132
4133 u8 reserved_4[0x40];
4134
4135 struct mlx5_ifc_rqtc_bits ctx;
4136};
4137
4138struct mlx5_ifc_modify_rq_out_bits {
4139 u8 status[0x8];
4140 u8 reserved_0[0x18];
4141
4142 u8 syndrome[0x20];
4143
4144 u8 reserved_1[0x40];
4145};
4146
4147struct mlx5_ifc_modify_rq_in_bits {
4148 u8 opcode[0x10];
4149 u8 reserved_0[0x10];
4150
4151 u8 reserved_1[0x10];
4152 u8 op_mod[0x10];
4153
4154 u8 rq_state[0x4];
4155 u8 reserved_2[0x4];
4156 u8 rqn[0x18];
4157
4158 u8 reserved_3[0x20];
4159
4160 u8 modify_bitmask[0x40];
4161
4162 u8 reserved_4[0x40];
4163
4164 struct mlx5_ifc_rqc_bits ctx;
4165};
4166
4167struct mlx5_ifc_modify_rmp_out_bits {
4168 u8 status[0x8];
4169 u8 reserved_0[0x18];
4170
4171 u8 syndrome[0x20];
4172
4173 u8 reserved_1[0x40];
4174};
4175
4176struct mlx5_ifc_rmp_bitmask_bits {
4177 u8 reserved[0x20];
4178
4179 u8 reserved1[0x1f];
4180 u8 lwm[0x1];
4181};
4182
4183struct mlx5_ifc_modify_rmp_in_bits {
4184 u8 opcode[0x10];
4185 u8 reserved_0[0x10];
4186
4187 u8 reserved_1[0x10];
4188 u8 op_mod[0x10];
4189
4190 u8 rmp_state[0x4];
4191 u8 reserved_2[0x4];
4192 u8 rmpn[0x18];
4193
4194 u8 reserved_3[0x20];
4195
4196 struct mlx5_ifc_rmp_bitmask_bits bitmask;
4197
4198 u8 reserved_4[0x40];
4199
4200 struct mlx5_ifc_rmpc_bits ctx;
4201};
4202
4203struct mlx5_ifc_modify_nic_vport_context_out_bits {
4204 u8 status[0x8];
4205 u8 reserved_0[0x18];
4206
4207 u8 syndrome[0x20];
4208
4209 u8 reserved_1[0x40];
4210};
4211
4212struct mlx5_ifc_modify_nic_vport_field_select_bits {
4213 u8 reserved_0[0x1c];
4214 u8 permanent_address[0x1];
4215 u8 addresses_list[0x1];
4216 u8 roce_en[0x1];
4217 u8 reserved_1[0x1];
4218};
4219
4220struct mlx5_ifc_modify_nic_vport_context_in_bits {
4221 u8 opcode[0x10];
4222 u8 reserved_0[0x10];
4223
4224 u8 reserved_1[0x10];
4225 u8 op_mod[0x10];
4226
4227 u8 other_vport[0x1];
4228 u8 reserved_2[0xf];
4229 u8 vport_number[0x10];
4230
4231 struct mlx5_ifc_modify_nic_vport_field_select_bits field_select;
4232
4233 u8 reserved_3[0x780];
4234
4235 struct mlx5_ifc_nic_vport_context_bits nic_vport_context;
4236};
4237
4238struct mlx5_ifc_modify_hca_vport_context_out_bits {
4239 u8 status[0x8];
4240 u8 reserved_0[0x18];
4241
4242 u8 syndrome[0x20];
4243
4244 u8 reserved_1[0x40];
4245};
4246
4247struct mlx5_ifc_modify_hca_vport_context_in_bits {
4248 u8 opcode[0x10];
4249 u8 reserved_0[0x10];
4250
4251 u8 reserved_1[0x10];
4252 u8 op_mod[0x10];
4253
4254 u8 other_vport[0x1];
4255 u8 reserved_2[0xb];
4256 u8 port_num[0x4];
4257 u8 vport_number[0x10];
4258
4259 u8 reserved_3[0x20];
4260
4261 struct mlx5_ifc_hca_vport_context_bits hca_vport_context;
4262};
4263
4264struct mlx5_ifc_modify_cq_out_bits {
4265 u8 status[0x8];
4266 u8 reserved_0[0x18];
4267
4268 u8 syndrome[0x20];
4269
4270 u8 reserved_1[0x40];
4271};
4272
4273enum {
4274 MLX5_MODIFY_CQ_IN_OP_MOD_MODIFY_CQ = 0x0,
4275 MLX5_MODIFY_CQ_IN_OP_MOD_RESIZE_CQ = 0x1,
4276};
4277
4278struct mlx5_ifc_modify_cq_in_bits {
4279 u8 opcode[0x10];
4280 u8 reserved_0[0x10];
4281
4282 u8 reserved_1[0x10];
4283 u8 op_mod[0x10];
4284
4285 u8 reserved_2[0x8];
4286 u8 cqn[0x18];
4287
4288 union mlx5_ifc_modify_field_select_resize_field_select_auto_bits modify_field_select_resize_field_select;
4289
4290 struct mlx5_ifc_cqc_bits cq_context;
4291
4292 u8 reserved_3[0x600];
4293
4294 u8 pas[0][0x40];
4295};
4296
4297struct mlx5_ifc_modify_cong_status_out_bits {
4298 u8 status[0x8];
4299 u8 reserved_0[0x18];
4300
4301 u8 syndrome[0x20];
4302
4303 u8 reserved_1[0x40];
4304};
4305
4306struct mlx5_ifc_modify_cong_status_in_bits {
4307 u8 opcode[0x10];
4308 u8 reserved_0[0x10];
4309
4310 u8 reserved_1[0x10];
4311 u8 op_mod[0x10];
4312
4313 u8 reserved_2[0x18];
4314 u8 priority[0x4];
4315 u8 cong_protocol[0x4];
4316
4317 u8 enable[0x1];
4318 u8 tag_enable[0x1];
4319 u8 reserved_3[0x1e];
4320};
4321
4322struct mlx5_ifc_modify_cong_params_out_bits {
4323 u8 status[0x8];
4324 u8 reserved_0[0x18];
4325
4326 u8 syndrome[0x20];
4327
4328 u8 reserved_1[0x40];
4329};
4330
4331struct mlx5_ifc_modify_cong_params_in_bits {
4332 u8 opcode[0x10];
4333 u8 reserved_0[0x10];
4334
4335 u8 reserved_1[0x10];
4336 u8 op_mod[0x10];
4337
4338 u8 reserved_2[0x1c];
4339 u8 cong_protocol[0x4];
4340
4341 union mlx5_ifc_field_select_802_1_r_roce_auto_bits field_select;
4342
4343 u8 reserved_3[0x80];
4344
4345 union mlx5_ifc_cong_control_roce_ecn_auto_bits congestion_parameters;
4346};
4347
4348struct mlx5_ifc_manage_pages_out_bits {
4349 u8 status[0x8];
4350 u8 reserved_0[0x18];
4351
4352 u8 syndrome[0x20];
4353
4354 u8 output_num_entries[0x20];
4355
4356 u8 reserved_1[0x20];
4357
4358 u8 pas[0][0x40];
4359};
4360
4361enum {
4362 MLX5_MANAGE_PAGES_IN_OP_MOD_ALLOCATION_FAIL = 0x0,
4363 MLX5_MANAGE_PAGES_IN_OP_MOD_ALLOCATION_SUCCESS = 0x1,
4364 MLX5_MANAGE_PAGES_IN_OP_MOD_HCA_RETURN_PAGES = 0x2,
4365};
4366
4367struct mlx5_ifc_manage_pages_in_bits {
4368 u8 opcode[0x10];
4369 u8 reserved_0[0x10];
4370
4371 u8 reserved_1[0x10];
4372 u8 op_mod[0x10];
4373
4374 u8 reserved_2[0x10];
4375 u8 function_id[0x10];
4376
4377 u8 input_num_entries[0x20];
4378
4379 u8 pas[0][0x40];
4380};
4381
4382struct mlx5_ifc_mad_ifc_out_bits {
4383 u8 status[0x8];
4384 u8 reserved_0[0x18];
4385
4386 u8 syndrome[0x20];
4387
4388 u8 reserved_1[0x40];
4389
4390 u8 response_mad_packet[256][0x8];
4391};
4392
4393struct mlx5_ifc_mad_ifc_in_bits {
4394 u8 opcode[0x10];
4395 u8 reserved_0[0x10];
4396
4397 u8 reserved_1[0x10];
4398 u8 op_mod[0x10];
4399
4400 u8 remote_lid[0x10];
4401 u8 reserved_2[0x8];
4402 u8 port[0x8];
4403
4404 u8 reserved_3[0x20];
4405
4406 u8 mad[256][0x8];
4407};
4408
4409struct mlx5_ifc_init_hca_out_bits {
4410 u8 status[0x8];
4411 u8 reserved_0[0x18];
4412
4413 u8 syndrome[0x20];
4414
4415 u8 reserved_1[0x40];
4416};
4417
4418struct mlx5_ifc_init_hca_in_bits {
4419 u8 opcode[0x10];
4420 u8 reserved_0[0x10];
4421
4422 u8 reserved_1[0x10];
4423 u8 op_mod[0x10];
4424
4425 u8 reserved_2[0x40];
4426};
4427
4428struct mlx5_ifc_init2rtr_qp_out_bits {
4429 u8 status[0x8];
4430 u8 reserved_0[0x18];
4431
4432 u8 syndrome[0x20];
4433
4434 u8 reserved_1[0x40];
4435};
4436
4437struct mlx5_ifc_init2rtr_qp_in_bits {
4438 u8 opcode[0x10];
4439 u8 reserved_0[0x10];
4440
4441 u8 reserved_1[0x10];
4442 u8 op_mod[0x10];
4443
4444 u8 reserved_2[0x8];
4445 u8 qpn[0x18];
4446
4447 u8 reserved_3[0x20];
4448
4449 u8 opt_param_mask[0x20];
4450
4451 u8 reserved_4[0x20];
4452
4453 struct mlx5_ifc_qpc_bits qpc;
4454
4455 u8 reserved_5[0x80];
4456};
4457
4458struct mlx5_ifc_init2init_qp_out_bits {
4459 u8 status[0x8];
4460 u8 reserved_0[0x18];
4461
4462 u8 syndrome[0x20];
4463
4464 u8 reserved_1[0x40];
4465};
4466
4467struct mlx5_ifc_init2init_qp_in_bits {
4468 u8 opcode[0x10];
4469 u8 reserved_0[0x10];
4470
4471 u8 reserved_1[0x10];
4472 u8 op_mod[0x10];
4473
4474 u8 reserved_2[0x8];
4475 u8 qpn[0x18];
4476
4477 u8 reserved_3[0x20];
4478
4479 u8 opt_param_mask[0x20];
4480
4481 u8 reserved_4[0x20];
4482
4483 struct mlx5_ifc_qpc_bits qpc;
4484
4485 u8 reserved_5[0x80];
4486};
4487
4488struct mlx5_ifc_get_dropped_packet_log_out_bits {
4489 u8 status[0x8];
4490 u8 reserved_0[0x18];
4491
4492 u8 syndrome[0x20];
4493
4494 u8 reserved_1[0x40];
4495
4496 u8 packet_headers_log[128][0x8];
4497
4498 u8 packet_syndrome[64][0x8];
4499};
4500
4501struct mlx5_ifc_get_dropped_packet_log_in_bits {
4502 u8 opcode[0x10];
4503 u8 reserved_0[0x10];
4504
4505 u8 reserved_1[0x10];
4506 u8 op_mod[0x10];
4507
4508 u8 reserved_2[0x40];
4509};
4510
4511struct mlx5_ifc_gen_eqe_in_bits {
4512 u8 opcode[0x10];
4513 u8 reserved_0[0x10];
4514
4515 u8 reserved_1[0x10];
4516 u8 op_mod[0x10];
4517
4518 u8 reserved_2[0x18];
4519 u8 eq_number[0x8];
4520
4521 u8 reserved_3[0x20];
4522
4523 u8 eqe[64][0x8];
4524};
4525
4526struct mlx5_ifc_gen_eq_out_bits {
4527 u8 status[0x8];
4528 u8 reserved_0[0x18];
4529
4530 u8 syndrome[0x20];
4531
4532 u8 reserved_1[0x40];
4533};
4534
4535struct mlx5_ifc_enable_hca_out_bits {
4536 u8 status[0x8];
4537 u8 reserved_0[0x18];
4538
4539 u8 syndrome[0x20];
4540
4541 u8 reserved_1[0x20];
4542};
4543
4544struct mlx5_ifc_enable_hca_in_bits {
4545 u8 opcode[0x10];
4546 u8 reserved_0[0x10];
4547
4548 u8 reserved_1[0x10];
4549 u8 op_mod[0x10];
4550
4551 u8 reserved_2[0x10];
4552 u8 function_id[0x10];
4553
4554 u8 reserved_3[0x20];
4555};
4556
4557struct mlx5_ifc_drain_dct_out_bits {
4558 u8 status[0x8];
4559 u8 reserved_0[0x18];
4560
4561 u8 syndrome[0x20];
4562
4563 u8 reserved_1[0x40];
4564};
4565
4566struct mlx5_ifc_drain_dct_in_bits {
4567 u8 opcode[0x10];
4568 u8 reserved_0[0x10];
4569
4570 u8 reserved_1[0x10];
4571 u8 op_mod[0x10];
4572
4573 u8 reserved_2[0x8];
4574 u8 dctn[0x18];
4575
4576 u8 reserved_3[0x20];
4577};
4578
4579struct mlx5_ifc_disable_hca_out_bits {
4580 u8 status[0x8];
4581 u8 reserved_0[0x18];
4582
4583 u8 syndrome[0x20];
4584
4585 u8 reserved_1[0x20];
4586};
4587
4588struct mlx5_ifc_disable_hca_in_bits {
4589 u8 opcode[0x10];
4590 u8 reserved_0[0x10];
4591
4592 u8 reserved_1[0x10];
4593 u8 op_mod[0x10];
4594
4595 u8 reserved_2[0x10];
4596 u8 function_id[0x10];
4597
4598 u8 reserved_3[0x20];
4599};
4600
4601struct mlx5_ifc_detach_from_mcg_out_bits {
4602 u8 status[0x8];
4603 u8 reserved_0[0x18];
4604
4605 u8 syndrome[0x20];
4606
4607 u8 reserved_1[0x40];
4608};
4609
4610struct mlx5_ifc_detach_from_mcg_in_bits {
4611 u8 opcode[0x10];
4612 u8 reserved_0[0x10];
4613
4614 u8 reserved_1[0x10];
4615 u8 op_mod[0x10];
4616
4617 u8 reserved_2[0x8];
4618 u8 qpn[0x18];
4619
4620 u8 reserved_3[0x20];
4621
4622 u8 multicast_gid[16][0x8];
4623};
4624
4625struct mlx5_ifc_destroy_xrc_srq_out_bits {
4626 u8 status[0x8];
4627 u8 reserved_0[0x18];
4628
4629 u8 syndrome[0x20];
4630
4631 u8 reserved_1[0x40];
4632};
4633
4634struct mlx5_ifc_destroy_xrc_srq_in_bits {
4635 u8 opcode[0x10];
4636 u8 reserved_0[0x10];
4637
4638 u8 reserved_1[0x10];
4639 u8 op_mod[0x10];
4640
4641 u8 reserved_2[0x8];
4642 u8 xrc_srqn[0x18];
4643
4644 u8 reserved_3[0x20];
4645};
4646
4647struct mlx5_ifc_destroy_tis_out_bits {
4648 u8 status[0x8];
4649 u8 reserved_0[0x18];
4650
4651 u8 syndrome[0x20];
4652
4653 u8 reserved_1[0x40];
4654};
4655
4656struct mlx5_ifc_destroy_tis_in_bits {
4657 u8 opcode[0x10];
4658 u8 reserved_0[0x10];
4659
4660 u8 reserved_1[0x10];
4661 u8 op_mod[0x10];
4662
4663 u8 reserved_2[0x8];
4664 u8 tisn[0x18];
4665
4666 u8 reserved_3[0x20];
4667};
4668
4669struct mlx5_ifc_destroy_tir_out_bits {
4670 u8 status[0x8];
4671 u8 reserved_0[0x18];
4672
4673 u8 syndrome[0x20];
4674
4675 u8 reserved_1[0x40];
4676};
4677
4678struct mlx5_ifc_destroy_tir_in_bits {
4679 u8 opcode[0x10];
4680 u8 reserved_0[0x10];
4681
4682 u8 reserved_1[0x10];
4683 u8 op_mod[0x10];
4684
4685 u8 reserved_2[0x8];
4686 u8 tirn[0x18];
4687
4688 u8 reserved_3[0x20];
4689};
4690
4691struct mlx5_ifc_destroy_srq_out_bits {
4692 u8 status[0x8];
4693 u8 reserved_0[0x18];
4694
4695 u8 syndrome[0x20];
4696
4697 u8 reserved_1[0x40];
4698};
4699
4700struct mlx5_ifc_destroy_srq_in_bits {
4701 u8 opcode[0x10];
4702 u8 reserved_0[0x10];
4703
4704 u8 reserved_1[0x10];
4705 u8 op_mod[0x10];
4706
4707 u8 reserved_2[0x8];
4708 u8 srqn[0x18];
4709
4710 u8 reserved_3[0x20];
4711};
4712
4713struct mlx5_ifc_destroy_sq_out_bits {
4714 u8 status[0x8];
4715 u8 reserved_0[0x18];
4716
4717 u8 syndrome[0x20];
4718
4719 u8 reserved_1[0x40];
4720};
4721
4722struct mlx5_ifc_destroy_sq_in_bits {
4723 u8 opcode[0x10];
4724 u8 reserved_0[0x10];
4725
4726 u8 reserved_1[0x10];
4727 u8 op_mod[0x10];
4728
4729 u8 reserved_2[0x8];
4730 u8 sqn[0x18];
4731
4732 u8 reserved_3[0x20];
4733};
4734
4735struct mlx5_ifc_destroy_rqt_out_bits {
4736 u8 status[0x8];
4737 u8 reserved_0[0x18];
4738
4739 u8 syndrome[0x20];
4740
4741 u8 reserved_1[0x40];
4742};
4743
4744struct mlx5_ifc_destroy_rqt_in_bits {
4745 u8 opcode[0x10];
4746 u8 reserved_0[0x10];
4747
4748 u8 reserved_1[0x10];
4749 u8 op_mod[0x10];
4750
4751 u8 reserved_2[0x8];
4752 u8 rqtn[0x18];
4753
4754 u8 reserved_3[0x20];
4755};
4756
4757struct mlx5_ifc_destroy_rq_out_bits {
4758 u8 status[0x8];
4759 u8 reserved_0[0x18];
4760
4761 u8 syndrome[0x20];
4762
4763 u8 reserved_1[0x40];
4764};
4765
4766struct mlx5_ifc_destroy_rq_in_bits {
4767 u8 opcode[0x10];
4768 u8 reserved_0[0x10];
4769
4770 u8 reserved_1[0x10];
4771 u8 op_mod[0x10];
4772
4773 u8 reserved_2[0x8];
4774 u8 rqn[0x18];
4775
4776 u8 reserved_3[0x20];
4777};
4778
4779struct mlx5_ifc_destroy_rmp_out_bits {
4780 u8 status[0x8];
4781 u8 reserved_0[0x18];
4782
4783 u8 syndrome[0x20];
4784
4785 u8 reserved_1[0x40];
4786};
4787
4788struct mlx5_ifc_destroy_rmp_in_bits {
4789 u8 opcode[0x10];
4790 u8 reserved_0[0x10];
4791
4792 u8 reserved_1[0x10];
4793 u8 op_mod[0x10];
4794
4795 u8 reserved_2[0x8];
4796 u8 rmpn[0x18];
4797
4798 u8 reserved_3[0x20];
4799};
4800
4801struct mlx5_ifc_destroy_qp_out_bits {
4802 u8 status[0x8];
4803 u8 reserved_0[0x18];
4804
4805 u8 syndrome[0x20];
4806
4807 u8 reserved_1[0x40];
4808};
4809
4810struct mlx5_ifc_destroy_qp_in_bits {
4811 u8 opcode[0x10];
4812 u8 reserved_0[0x10];
4813
4814 u8 reserved_1[0x10];
4815 u8 op_mod[0x10];
4816
4817 u8 reserved_2[0x8];
4818 u8 qpn[0x18];
4819
4820 u8 reserved_3[0x20];
4821};
4822
4823struct mlx5_ifc_destroy_psv_out_bits {
4824 u8 status[0x8];
4825 u8 reserved_0[0x18];
4826
4827 u8 syndrome[0x20];
4828
4829 u8 reserved_1[0x40];
4830};
4831
4832struct mlx5_ifc_destroy_psv_in_bits {
4833 u8 opcode[0x10];
4834 u8 reserved_0[0x10];
4835
4836 u8 reserved_1[0x10];
4837 u8 op_mod[0x10];
4838
4839 u8 reserved_2[0x8];
4840 u8 psvn[0x18];
4841
4842 u8 reserved_3[0x20];
4843};
4844
4845struct mlx5_ifc_destroy_mkey_out_bits {
4846 u8 status[0x8];
4847 u8 reserved_0[0x18];
4848
4849 u8 syndrome[0x20];
4850
4851 u8 reserved_1[0x40];
4852};
4853
4854struct mlx5_ifc_destroy_mkey_in_bits {
4855 u8 opcode[0x10];
4856 u8 reserved_0[0x10];
4857
4858 u8 reserved_1[0x10];
4859 u8 op_mod[0x10];
4860
4861 u8 reserved_2[0x8];
4862 u8 mkey_index[0x18];
4863
4864 u8 reserved_3[0x20];
4865};
4866
4867struct mlx5_ifc_destroy_flow_table_out_bits {
4868 u8 status[0x8];
4869 u8 reserved_0[0x18];
4870
4871 u8 syndrome[0x20];
4872
4873 u8 reserved_1[0x40];
4874};
4875
4876struct mlx5_ifc_destroy_flow_table_in_bits {
4877 u8 opcode[0x10];
4878 u8 reserved_0[0x10];
4879
4880 u8 reserved_1[0x10];
4881 u8 op_mod[0x10];
4882
4883 u8 reserved_2[0x40];
4884
4885 u8 table_type[0x8];
4886 u8 reserved_3[0x18];
4887
4888 u8 reserved_4[0x8];
4889 u8 table_id[0x18];
4890
4891 u8 reserved_5[0x140];
4892};
4893
4894struct mlx5_ifc_destroy_flow_group_out_bits {
4895 u8 status[0x8];
4896 u8 reserved_0[0x18];
4897
4898 u8 syndrome[0x20];
4899
4900 u8 reserved_1[0x40];
4901};
4902
4903struct mlx5_ifc_destroy_flow_group_in_bits {
4904 u8 opcode[0x10];
4905 u8 reserved_0[0x10];
4906
4907 u8 reserved_1[0x10];
4908 u8 op_mod[0x10];
4909
4910 u8 reserved_2[0x40];
4911
4912 u8 table_type[0x8];
4913 u8 reserved_3[0x18];
4914
4915 u8 reserved_4[0x8];
4916 u8 table_id[0x18];
4917
4918 u8 group_id[0x20];
4919
4920 u8 reserved_5[0x120];
4921};
4922
4923struct mlx5_ifc_destroy_eq_out_bits {
4924 u8 status[0x8];
4925 u8 reserved_0[0x18];
4926
4927 u8 syndrome[0x20];
4928
4929 u8 reserved_1[0x40];
4930};
4931
4932struct mlx5_ifc_destroy_eq_in_bits {
4933 u8 opcode[0x10];
4934 u8 reserved_0[0x10];
4935
4936 u8 reserved_1[0x10];
4937 u8 op_mod[0x10];
4938
4939 u8 reserved_2[0x18];
4940 u8 eq_number[0x8];
4941
4942 u8 reserved_3[0x20];
4943};
4944
4945struct mlx5_ifc_destroy_dct_out_bits {
4946 u8 status[0x8];
4947 u8 reserved_0[0x18];
4948
4949 u8 syndrome[0x20];
4950
4951 u8 reserved_1[0x40];
4952};
4953
4954struct mlx5_ifc_destroy_dct_in_bits {
4955 u8 opcode[0x10];
4956 u8 reserved_0[0x10];
4957
4958 u8 reserved_1[0x10];
4959 u8 op_mod[0x10];
4960
4961 u8 reserved_2[0x8];
4962 u8 dctn[0x18];
4963
4964 u8 reserved_3[0x20];
4965};
4966
4967struct mlx5_ifc_destroy_cq_out_bits {
4968 u8 status[0x8];
4969 u8 reserved_0[0x18];
4970
4971 u8 syndrome[0x20];
4972
4973 u8 reserved_1[0x40];
4974};
4975
4976struct mlx5_ifc_destroy_cq_in_bits {
4977 u8 opcode[0x10];
4978 u8 reserved_0[0x10];
4979
4980 u8 reserved_1[0x10];
4981 u8 op_mod[0x10];
4982
4983 u8 reserved_2[0x8];
4984 u8 cqn[0x18];
4985
4986 u8 reserved_3[0x20];
4987};
4988
4989struct mlx5_ifc_delete_vxlan_udp_dport_out_bits {
4990 u8 status[0x8];
4991 u8 reserved_0[0x18];
4992
4993 u8 syndrome[0x20];
4994
4995 u8 reserved_1[0x40];
4996};
4997
4998struct mlx5_ifc_delete_vxlan_udp_dport_in_bits {
4999 u8 opcode[0x10];
5000 u8 reserved_0[0x10];
5001
5002 u8 reserved_1[0x10];
5003 u8 op_mod[0x10];
5004
5005 u8 reserved_2[0x20];
5006
5007 u8 reserved_3[0x10];
5008 u8 vxlan_udp_port[0x10];
5009};
5010
5011struct mlx5_ifc_delete_l2_table_entry_out_bits {
5012 u8 status[0x8];
5013 u8 reserved_0[0x18];
5014
5015 u8 syndrome[0x20];
5016
5017 u8 reserved_1[0x40];
5018};
5019
5020struct mlx5_ifc_delete_l2_table_entry_in_bits {
5021 u8 opcode[0x10];
5022 u8 reserved_0[0x10];
5023
5024 u8 reserved_1[0x10];
5025 u8 op_mod[0x10];
5026
5027 u8 reserved_2[0x60];
5028
5029 u8 reserved_3[0x8];
5030 u8 table_index[0x18];
5031
5032 u8 reserved_4[0x140];
5033};
5034
5035struct mlx5_ifc_delete_fte_out_bits {
5036 u8 status[0x8];
5037 u8 reserved_0[0x18];
5038
5039 u8 syndrome[0x20];
5040
5041 u8 reserved_1[0x40];
5042};
5043
5044struct mlx5_ifc_delete_fte_in_bits {
5045 u8 opcode[0x10];
5046 u8 reserved_0[0x10];
5047
5048 u8 reserved_1[0x10];
5049 u8 op_mod[0x10];
5050
5051 u8 reserved_2[0x40];
5052
5053 u8 table_type[0x8];
5054 u8 reserved_3[0x18];
5055
5056 u8 reserved_4[0x8];
5057 u8 table_id[0x18];
5058
5059 u8 reserved_5[0x40];
5060
5061 u8 flow_index[0x20];
5062
5063 u8 reserved_6[0xe0];
5064};
5065
5066struct mlx5_ifc_dealloc_xrcd_out_bits {
5067 u8 status[0x8];
5068 u8 reserved_0[0x18];
5069
5070 u8 syndrome[0x20];
5071
5072 u8 reserved_1[0x40];
5073};
5074
5075struct mlx5_ifc_dealloc_xrcd_in_bits {
5076 u8 opcode[0x10];
5077 u8 reserved_0[0x10];
5078
5079 u8 reserved_1[0x10];
5080 u8 op_mod[0x10];
5081
5082 u8 reserved_2[0x8];
5083 u8 xrcd[0x18];
5084
5085 u8 reserved_3[0x20];
5086};
5087
5088struct mlx5_ifc_dealloc_uar_out_bits {
5089 u8 status[0x8];
5090 u8 reserved_0[0x18];
5091
5092 u8 syndrome[0x20];
5093
5094 u8 reserved_1[0x40];
5095};
5096
5097struct mlx5_ifc_dealloc_uar_in_bits {
5098 u8 opcode[0x10];
5099 u8 reserved_0[0x10];
5100
5101 u8 reserved_1[0x10];
5102 u8 op_mod[0x10];
5103
5104 u8 reserved_2[0x8];
5105 u8 uar[0x18];
5106
5107 u8 reserved_3[0x20];
5108};
5109
5110struct mlx5_ifc_dealloc_transport_domain_out_bits {
5111 u8 status[0x8];
5112 u8 reserved_0[0x18];
5113
5114 u8 syndrome[0x20];
5115
5116 u8 reserved_1[0x40];
5117};
5118
5119struct mlx5_ifc_dealloc_transport_domain_in_bits {
5120 u8 opcode[0x10];
5121 u8 reserved_0[0x10];
5122
5123 u8 reserved_1[0x10];
5124 u8 op_mod[0x10];
5125
5126 u8 reserved_2[0x8];
5127 u8 transport_domain[0x18];
5128
5129 u8 reserved_3[0x20];
5130};
5131
5132struct mlx5_ifc_dealloc_q_counter_out_bits {
5133 u8 status[0x8];
5134 u8 reserved_0[0x18];
5135
5136 u8 syndrome[0x20];
5137
5138 u8 reserved_1[0x40];
5139};
5140
5141struct mlx5_ifc_dealloc_q_counter_in_bits {
5142 u8 opcode[0x10];
5143 u8 reserved_0[0x10];
5144
5145 u8 reserved_1[0x10];
5146 u8 op_mod[0x10];
5147
5148 u8 reserved_2[0x18];
5149 u8 counter_set_id[0x8];
5150
5151 u8 reserved_3[0x20];
5152};
5153
5154struct mlx5_ifc_dealloc_pd_out_bits {
5155 u8 status[0x8];
5156 u8 reserved_0[0x18];
5157
5158 u8 syndrome[0x20];
5159
5160 u8 reserved_1[0x40];
5161};
5162
5163struct mlx5_ifc_dealloc_pd_in_bits {
5164 u8 opcode[0x10];
5165 u8 reserved_0[0x10];
5166
5167 u8 reserved_1[0x10];
5168 u8 op_mod[0x10];
5169
5170 u8 reserved_2[0x8];
5171 u8 pd[0x18];
5172
5173 u8 reserved_3[0x20];
5174};
5175
5176struct mlx5_ifc_create_xrc_srq_out_bits {
5177 u8 status[0x8];
5178 u8 reserved_0[0x18];
5179
5180 u8 syndrome[0x20];
5181
5182 u8 reserved_1[0x8];
5183 u8 xrc_srqn[0x18];
5184
5185 u8 reserved_2[0x20];
5186};
5187
5188struct mlx5_ifc_create_xrc_srq_in_bits {
5189 u8 opcode[0x10];
5190 u8 reserved_0[0x10];
5191
5192 u8 reserved_1[0x10];
5193 u8 op_mod[0x10];
5194
5195 u8 reserved_2[0x40];
5196
5197 struct mlx5_ifc_xrc_srqc_bits xrc_srq_context_entry;
5198
5199 u8 reserved_3[0x600];
5200
5201 u8 pas[0][0x40];
5202};
5203
5204struct mlx5_ifc_create_tis_out_bits {
5205 u8 status[0x8];
5206 u8 reserved_0[0x18];
5207
5208 u8 syndrome[0x20];
5209
5210 u8 reserved_1[0x8];
5211 u8 tisn[0x18];
5212
5213 u8 reserved_2[0x20];
5214};
5215
5216struct mlx5_ifc_create_tis_in_bits {
5217 u8 opcode[0x10];
5218 u8 reserved_0[0x10];
5219
5220 u8 reserved_1[0x10];
5221 u8 op_mod[0x10];
5222
5223 u8 reserved_2[0xc0];
5224
5225 struct mlx5_ifc_tisc_bits ctx;
5226};
5227
5228struct mlx5_ifc_create_tir_out_bits {
5229 u8 status[0x8];
5230 u8 reserved_0[0x18];
5231
5232 u8 syndrome[0x20];
5233
5234 u8 reserved_1[0x8];
5235 u8 tirn[0x18];
5236
5237 u8 reserved_2[0x20];
5238};
5239
5240struct mlx5_ifc_create_tir_in_bits {
5241 u8 opcode[0x10];
5242 u8 reserved_0[0x10];
5243
5244 u8 reserved_1[0x10];
5245 u8 op_mod[0x10];
5246
5247 u8 reserved_2[0xc0];
5248
5249 struct mlx5_ifc_tirc_bits ctx;
5250};
5251
5252struct mlx5_ifc_create_srq_out_bits {
5253 u8 status[0x8];
5254 u8 reserved_0[0x18];
5255
5256 u8 syndrome[0x20];
5257
5258 u8 reserved_1[0x8];
5259 u8 srqn[0x18];
5260
5261 u8 reserved_2[0x20];
5262};
5263
5264struct mlx5_ifc_create_srq_in_bits {
5265 u8 opcode[0x10];
5266 u8 reserved_0[0x10];
5267
5268 u8 reserved_1[0x10];
5269 u8 op_mod[0x10];
5270
5271 u8 reserved_2[0x40];
5272
5273 struct mlx5_ifc_srqc_bits srq_context_entry;
5274
5275 u8 reserved_3[0x600];
5276
5277 u8 pas[0][0x40];
5278};
5279
5280struct mlx5_ifc_create_sq_out_bits {
5281 u8 status[0x8];
5282 u8 reserved_0[0x18];
5283
5284 u8 syndrome[0x20];
5285
5286 u8 reserved_1[0x8];
5287 u8 sqn[0x18];
5288
5289 u8 reserved_2[0x20];
5290};
5291
5292struct mlx5_ifc_create_sq_in_bits {
5293 u8 opcode[0x10];
5294 u8 reserved_0[0x10];
5295
5296 u8 reserved_1[0x10];
5297 u8 op_mod[0x10];
5298
5299 u8 reserved_2[0xc0];
5300
5301 struct mlx5_ifc_sqc_bits ctx;
5302};
5303
5304struct mlx5_ifc_create_rqt_out_bits {
5305 u8 status[0x8];
5306 u8 reserved_0[0x18];
5307
5308 u8 syndrome[0x20];
5309
5310 u8 reserved_1[0x8];
5311 u8 rqtn[0x18];
5312
5313 u8 reserved_2[0x20];
5314};
5315
5316struct mlx5_ifc_create_rqt_in_bits {
5317 u8 opcode[0x10];
5318 u8 reserved_0[0x10];
5319
5320 u8 reserved_1[0x10];
5321 u8 op_mod[0x10];
5322
5323 u8 reserved_2[0xc0];
5324
5325 struct mlx5_ifc_rqtc_bits rqt_context;
5326};
5327
5328struct mlx5_ifc_create_rq_out_bits {
5329 u8 status[0x8];
5330 u8 reserved_0[0x18];
5331
5332 u8 syndrome[0x20];
5333
5334 u8 reserved_1[0x8];
5335 u8 rqn[0x18];
5336
5337 u8 reserved_2[0x20];
5338};
5339
5340struct mlx5_ifc_create_rq_in_bits {
5341 u8 opcode[0x10];
5342 u8 reserved_0[0x10];
5343
5344 u8 reserved_1[0x10];
5345 u8 op_mod[0x10];
5346
5347 u8 reserved_2[0xc0];
5348
5349 struct mlx5_ifc_rqc_bits ctx;
5350};
5351
5352struct mlx5_ifc_create_rmp_out_bits {
5353 u8 status[0x8];
5354 u8 reserved_0[0x18];
5355
5356 u8 syndrome[0x20];
5357
5358 u8 reserved_1[0x8];
5359 u8 rmpn[0x18];
5360
5361 u8 reserved_2[0x20];
5362};
5363
5364struct mlx5_ifc_create_rmp_in_bits {
5365 u8 opcode[0x10];
5366 u8 reserved_0[0x10];
5367
5368 u8 reserved_1[0x10];
5369 u8 op_mod[0x10];
5370
5371 u8 reserved_2[0xc0];
5372
5373 struct mlx5_ifc_rmpc_bits ctx;
5374};
5375
5376struct mlx5_ifc_create_qp_out_bits {
5377 u8 status[0x8];
5378 u8 reserved_0[0x18];
5379
5380 u8 syndrome[0x20];
5381
5382 u8 reserved_1[0x8];
5383 u8 qpn[0x18];
5384
5385 u8 reserved_2[0x20];
5386};
5387
5388struct mlx5_ifc_create_qp_in_bits {
5389 u8 opcode[0x10];
5390 u8 reserved_0[0x10];
5391
5392 u8 reserved_1[0x10];
5393 u8 op_mod[0x10];
5394
5395 u8 reserved_2[0x40];
5396
5397 u8 opt_param_mask[0x20];
5398
5399 u8 reserved_3[0x20];
5400
5401 struct mlx5_ifc_qpc_bits qpc;
5402
5403 u8 reserved_4[0x80];
5404
5405 u8 pas[0][0x40];
5406};
5407
5408struct mlx5_ifc_create_psv_out_bits {
5409 u8 status[0x8];
5410 u8 reserved_0[0x18];
5411
5412 u8 syndrome[0x20];
5413
5414 u8 reserved_1[0x40];
5415
5416 u8 reserved_2[0x8];
5417 u8 psv0_index[0x18];
5418
5419 u8 reserved_3[0x8];
5420 u8 psv1_index[0x18];
5421
5422 u8 reserved_4[0x8];
5423 u8 psv2_index[0x18];
5424
5425 u8 reserved_5[0x8];
5426 u8 psv3_index[0x18];
5427};
5428
5429struct mlx5_ifc_create_psv_in_bits {
5430 u8 opcode[0x10];
5431 u8 reserved_0[0x10];
5432
5433 u8 reserved_1[0x10];
5434 u8 op_mod[0x10];
5435
5436 u8 num_psv[0x4];
5437 u8 reserved_2[0x4];
5438 u8 pd[0x18];
5439
5440 u8 reserved_3[0x20];
5441};
5442
5443struct mlx5_ifc_create_mkey_out_bits {
5444 u8 status[0x8];
5445 u8 reserved_0[0x18];
5446
5447 u8 syndrome[0x20];
5448
5449 u8 reserved_1[0x8];
5450 u8 mkey_index[0x18];
5451
5452 u8 reserved_2[0x20];
5453};
5454
5455struct mlx5_ifc_create_mkey_in_bits {
5456 u8 opcode[0x10];
5457 u8 reserved_0[0x10];
5458
5459 u8 reserved_1[0x10];
5460 u8 op_mod[0x10];
5461
5462 u8 reserved_2[0x20];
5463
5464 u8 pg_access[0x1];
5465 u8 reserved_3[0x1f];
5466
5467 struct mlx5_ifc_mkc_bits memory_key_mkey_entry;
5468
5469 u8 reserved_4[0x80];
5470
5471 u8 translations_octword_actual_size[0x20];
5472
5473 u8 reserved_5[0x560];
5474
5475 u8 klm_pas_mtt[0][0x20];
5476};
5477
5478struct mlx5_ifc_create_flow_table_out_bits {
5479 u8 status[0x8];
5480 u8 reserved_0[0x18];
5481
5482 u8 syndrome[0x20];
5483
5484 u8 reserved_1[0x8];
5485 u8 table_id[0x18];
5486
5487 u8 reserved_2[0x20];
5488};
5489
5490struct mlx5_ifc_create_flow_table_in_bits {
5491 u8 opcode[0x10];
5492 u8 reserved_0[0x10];
5493
5494 u8 reserved_1[0x10];
5495 u8 op_mod[0x10];
5496
5497 u8 reserved_2[0x40];
5498
5499 u8 table_type[0x8];
5500 u8 reserved_3[0x18];
5501
5502 u8 reserved_4[0x20];
5503
5504 u8 reserved_5[0x8];
5505 u8 level[0x8];
5506 u8 reserved_6[0x8];
5507 u8 log_size[0x8];
5508
5509 u8 reserved_7[0x120];
5510};
5511
5512struct mlx5_ifc_create_flow_group_out_bits {
5513 u8 status[0x8];
5514 u8 reserved_0[0x18];
5515
5516 u8 syndrome[0x20];
5517
5518 u8 reserved_1[0x8];
5519 u8 group_id[0x18];
5520
5521 u8 reserved_2[0x20];
5522};
5523
5524enum {
5525 MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_OUTER_HEADERS = 0x0,
5526 MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS = 0x1,
5527 MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_INNER_HEADERS = 0x2,
5528};
5529
5530struct mlx5_ifc_create_flow_group_in_bits {
5531 u8 opcode[0x10];
5532 u8 reserved_0[0x10];
5533
5534 u8 reserved_1[0x10];
5535 u8 op_mod[0x10];
5536
5537 u8 reserved_2[0x40];
5538
5539 u8 table_type[0x8];
5540 u8 reserved_3[0x18];
5541
5542 u8 reserved_4[0x8];
5543 u8 table_id[0x18];
5544
5545 u8 reserved_5[0x20];
5546
5547 u8 start_flow_index[0x20];
5548
5549 u8 reserved_6[0x20];
5550
5551 u8 end_flow_index[0x20];
5552
5553 u8 reserved_7[0xa0];
5554
5555 u8 reserved_8[0x18];
5556 u8 match_criteria_enable[0x8];
5557
5558 struct mlx5_ifc_fte_match_param_bits match_criteria;
5559
5560 u8 reserved_9[0xe00];
5561};
5562
5563struct mlx5_ifc_create_eq_out_bits {
5564 u8 status[0x8];
5565 u8 reserved_0[0x18];
5566
5567 u8 syndrome[0x20];
5568
5569 u8 reserved_1[0x18];
5570 u8 eq_number[0x8];
5571
5572 u8 reserved_2[0x20];
5573};
5574
5575struct mlx5_ifc_create_eq_in_bits {
5576 u8 opcode[0x10];
5577 u8 reserved_0[0x10];
5578
5579 u8 reserved_1[0x10];
5580 u8 op_mod[0x10];
5581
5582 u8 reserved_2[0x40];
5583
5584 struct mlx5_ifc_eqc_bits eq_context_entry;
5585
5586 u8 reserved_3[0x40];
5587
5588 u8 event_bitmask[0x40];
5589
5590 u8 reserved_4[0x580];
5591
5592 u8 pas[0][0x40];
5593};
5594
5595struct mlx5_ifc_create_dct_out_bits {
5596 u8 status[0x8];
5597 u8 reserved_0[0x18];
5598
5599 u8 syndrome[0x20];
5600
5601 u8 reserved_1[0x8];
5602 u8 dctn[0x18];
5603
5604 u8 reserved_2[0x20];
5605};
5606
5607struct mlx5_ifc_create_dct_in_bits {
5608 u8 opcode[0x10];
5609 u8 reserved_0[0x10];
5610
5611 u8 reserved_1[0x10];
5612 u8 op_mod[0x10];
5613
5614 u8 reserved_2[0x40];
5615
5616 struct mlx5_ifc_dctc_bits dct_context_entry;
5617
5618 u8 reserved_3[0x180];
5619};
5620
5621struct mlx5_ifc_create_cq_out_bits {
5622 u8 status[0x8];
5623 u8 reserved_0[0x18];
5624
5625 u8 syndrome[0x20];
5626
5627 u8 reserved_1[0x8];
5628 u8 cqn[0x18];
5629
5630 u8 reserved_2[0x20];
5631};
5632
5633struct mlx5_ifc_create_cq_in_bits {
5634 u8 opcode[0x10];
5635 u8 reserved_0[0x10];
5636
5637 u8 reserved_1[0x10];
5638 u8 op_mod[0x10];
5639
5640 u8 reserved_2[0x40];
5641
5642 struct mlx5_ifc_cqc_bits cq_context;
5643
5644 u8 reserved_3[0x600];
5645
5646 u8 pas[0][0x40];
5647};
5648
5649struct mlx5_ifc_config_int_moderation_out_bits {
5650 u8 status[0x8];
5651 u8 reserved_0[0x18];
5652
5653 u8 syndrome[0x20];
5654
5655 u8 reserved_1[0x4];
5656 u8 min_delay[0xc];
5657 u8 int_vector[0x10];
5658
5659 u8 reserved_2[0x20];
5660};
5661
5662enum {
5663 MLX5_CONFIG_INT_MODERATION_IN_OP_MOD_WRITE = 0x0,
5664 MLX5_CONFIG_INT_MODERATION_IN_OP_MOD_READ = 0x1,
5665};
5666
5667struct mlx5_ifc_config_int_moderation_in_bits {
5668 u8 opcode[0x10];
5669 u8 reserved_0[0x10];
5670
5671 u8 reserved_1[0x10];
5672 u8 op_mod[0x10];
5673
5674 u8 reserved_2[0x4];
5675 u8 min_delay[0xc];
5676 u8 int_vector[0x10];
5677
5678 u8 reserved_3[0x20];
5679};
5680
5681struct mlx5_ifc_attach_to_mcg_out_bits {
5682 u8 status[0x8];
5683 u8 reserved_0[0x18];
5684
5685 u8 syndrome[0x20];
5686
5687 u8 reserved_1[0x40];
5688};
5689
5690struct mlx5_ifc_attach_to_mcg_in_bits {
5691 u8 opcode[0x10];
5692 u8 reserved_0[0x10];
5693
5694 u8 reserved_1[0x10];
5695 u8 op_mod[0x10];
5696
5697 u8 reserved_2[0x8];
5698 u8 qpn[0x18];
5699
5700 u8 reserved_3[0x20];
5701
5702 u8 multicast_gid[16][0x8];
5703};
5704
5705struct mlx5_ifc_arm_xrc_srq_out_bits {
5706 u8 status[0x8];
5707 u8 reserved_0[0x18];
5708
5709 u8 syndrome[0x20];
5710
5711 u8 reserved_1[0x40];
5712};
5713
5714enum {
5715 MLX5_ARM_XRC_SRQ_IN_OP_MOD_XRC_SRQ = 0x1,
5716};
5717
5718struct mlx5_ifc_arm_xrc_srq_in_bits {
5719 u8 opcode[0x10];
5720 u8 reserved_0[0x10];
5721
5722 u8 reserved_1[0x10];
5723 u8 op_mod[0x10];
5724
5725 u8 reserved_2[0x8];
5726 u8 xrc_srqn[0x18];
5727
5728 u8 reserved_3[0x10];
5729 u8 lwm[0x10];
5730};
5731
5732struct mlx5_ifc_arm_rq_out_bits {
5733 u8 status[0x8];
5734 u8 reserved_0[0x18];
5735
5736 u8 syndrome[0x20];
5737
5738 u8 reserved_1[0x40];
5739};
5740
5741enum {
5742 MLX5_ARM_RQ_IN_OP_MOD_SRQ_ = 0x1,
5743};
5744
5745struct mlx5_ifc_arm_rq_in_bits {
5746 u8 opcode[0x10];
5747 u8 reserved_0[0x10];
5748
5749 u8 reserved_1[0x10];
5750 u8 op_mod[0x10];
5751
5752 u8 reserved_2[0x8];
5753 u8 srq_number[0x18];
5754
5755 u8 reserved_3[0x10];
5756 u8 lwm[0x10];
5757};
5758
5759struct mlx5_ifc_arm_dct_out_bits {
5760 u8 status[0x8];
5761 u8 reserved_0[0x18];
5762
5763 u8 syndrome[0x20];
5764
5765 u8 reserved_1[0x40];
5766};
5767
5768struct mlx5_ifc_arm_dct_in_bits {
5769 u8 opcode[0x10];
5770 u8 reserved_0[0x10];
5771
5772 u8 reserved_1[0x10];
5773 u8 op_mod[0x10];
5774
5775 u8 reserved_2[0x8];
5776 u8 dct_number[0x18];
5777
5778 u8 reserved_3[0x20];
5779};
5780
5781struct mlx5_ifc_alloc_xrcd_out_bits {
5782 u8 status[0x8];
5783 u8 reserved_0[0x18];
5784
5785 u8 syndrome[0x20];
5786
5787 u8 reserved_1[0x8];
5788 u8 xrcd[0x18];
5789
5790 u8 reserved_2[0x20];
5791};
5792
5793struct mlx5_ifc_alloc_xrcd_in_bits {
5794 u8 opcode[0x10];
5795 u8 reserved_0[0x10];
5796
5797 u8 reserved_1[0x10];
5798 u8 op_mod[0x10];
5799
5800 u8 reserved_2[0x40];
5801};
5802
5803struct mlx5_ifc_alloc_uar_out_bits {
5804 u8 status[0x8];
5805 u8 reserved_0[0x18];
5806
5807 u8 syndrome[0x20];
5808
5809 u8 reserved_1[0x8];
5810 u8 uar[0x18];
5811
5812 u8 reserved_2[0x20];
5813};
5814
5815struct mlx5_ifc_alloc_uar_in_bits {
5816 u8 opcode[0x10];
5817 u8 reserved_0[0x10];
5818
5819 u8 reserved_1[0x10];
5820 u8 op_mod[0x10];
5821
5822 u8 reserved_2[0x40];
5823};
5824
5825struct mlx5_ifc_alloc_transport_domain_out_bits {
5826 u8 status[0x8];
5827 u8 reserved_0[0x18];
5828
5829 u8 syndrome[0x20];
5830
5831 u8 reserved_1[0x8];
5832 u8 transport_domain[0x18];
5833
5834 u8 reserved_2[0x20];
5835};
5836
5837struct mlx5_ifc_alloc_transport_domain_in_bits {
5838 u8 opcode[0x10];
5839 u8 reserved_0[0x10];
5840
5841 u8 reserved_1[0x10];
5842 u8 op_mod[0x10];
5843
5844 u8 reserved_2[0x40];
5845};
5846
5847struct mlx5_ifc_alloc_q_counter_out_bits {
5848 u8 status[0x8];
5849 u8 reserved_0[0x18];
5850
5851 u8 syndrome[0x20];
5852
5853 u8 reserved_1[0x18];
5854 u8 counter_set_id[0x8];
5855
5856 u8 reserved_2[0x20];
5857};
5858
5859struct mlx5_ifc_alloc_q_counter_in_bits {
5860 u8 opcode[0x10];
5861 u8 reserved_0[0x10];
5862
5863 u8 reserved_1[0x10];
5864 u8 op_mod[0x10];
5865
5866 u8 reserved_2[0x40];
5867};
5868
5869struct mlx5_ifc_alloc_pd_out_bits {
5870 u8 status[0x8];
5871 u8 reserved_0[0x18];
5872
5873 u8 syndrome[0x20];
5874
5875 u8 reserved_1[0x8];
5876 u8 pd[0x18];
5877
5878 u8 reserved_2[0x20];
5879};
5880
5881struct mlx5_ifc_alloc_pd_in_bits {
5882 u8 opcode[0x10];
5883 u8 reserved_0[0x10];
5884
5885 u8 reserved_1[0x10];
5886 u8 op_mod[0x10];
5887
5888 u8 reserved_2[0x40];
5889};
5890
5891struct mlx5_ifc_add_vxlan_udp_dport_out_bits {
5892 u8 status[0x8];
5893 u8 reserved_0[0x18];
5894
5895 u8 syndrome[0x20];
5896
5897 u8 reserved_1[0x40];
5898};
5899
5900struct mlx5_ifc_add_vxlan_udp_dport_in_bits {
5901 u8 opcode[0x10];
5902 u8 reserved_0[0x10];
5903
5904 u8 reserved_1[0x10];
5905 u8 op_mod[0x10];
5906
5907 u8 reserved_2[0x20];
5908
5909 u8 reserved_3[0x10];
5910 u8 vxlan_udp_port[0x10];
5911};
5912
5913struct mlx5_ifc_access_register_out_bits {
5914 u8 status[0x8];
5915 u8 reserved_0[0x18];
5916
5917 u8 syndrome[0x20];
5918
5919 u8 reserved_1[0x40];
5920
5921 u8 register_data[0][0x20];
5922};
5923
5924enum {
5925 MLX5_ACCESS_REGISTER_IN_OP_MOD_WRITE = 0x0,
5926 MLX5_ACCESS_REGISTER_IN_OP_MOD_READ = 0x1,
5927};
5928
5929struct mlx5_ifc_access_register_in_bits {
5930 u8 opcode[0x10];
5931 u8 reserved_0[0x10];
5932
5933 u8 reserved_1[0x10];
5934 u8 op_mod[0x10];
5935
5936 u8 reserved_2[0x10];
5937 u8 register_id[0x10];
5938
5939 u8 argument[0x20];
5940
5941 u8 register_data[0][0x20];
5942};
5943
5944struct mlx5_ifc_sltp_reg_bits {
5945 u8 status[0x4];
5946 u8 version[0x4];
5947 u8 local_port[0x8];
5948 u8 pnat[0x2];
5949 u8 reserved_0[0x2];
5950 u8 lane[0x4];
5951 u8 reserved_1[0x8];
5952
5953 u8 reserved_2[0x20];
5954
5955 u8 reserved_3[0x7];
5956 u8 polarity[0x1];
5957 u8 ob_tap0[0x8];
5958 u8 ob_tap1[0x8];
5959 u8 ob_tap2[0x8];
5960
5961 u8 reserved_4[0xc];
5962 u8 ob_preemp_mode[0x4];
5963 u8 ob_reg[0x8];
5964 u8 ob_bias[0x8];
5965
5966 u8 reserved_5[0x20];
5967};
5968
5969struct mlx5_ifc_slrg_reg_bits {
5970 u8 status[0x4];
5971 u8 version[0x4];
5972 u8 local_port[0x8];
5973 u8 pnat[0x2];
5974 u8 reserved_0[0x2];
5975 u8 lane[0x4];
5976 u8 reserved_1[0x8];
5977
5978 u8 time_to_link_up[0x10];
5979 u8 reserved_2[0xc];
5980 u8 grade_lane_speed[0x4];
5981
5982 u8 grade_version[0x8];
5983 u8 grade[0x18];
5984
5985 u8 reserved_3[0x4];
5986 u8 height_grade_type[0x4];
5987 u8 height_grade[0x18];
5988
5989 u8 height_dz[0x10];
5990 u8 height_dv[0x10];
5991
5992 u8 reserved_4[0x10];
5993 u8 height_sigma[0x10];
5994
5995 u8 reserved_5[0x20];
5996
5997 u8 reserved_6[0x4];
5998 u8 phase_grade_type[0x4];
5999 u8 phase_grade[0x18];
6000
6001 u8 reserved_7[0x8];
6002 u8 phase_eo_pos[0x8];
6003 u8 reserved_8[0x8];
6004 u8 phase_eo_neg[0x8];
6005
6006 u8 ffe_set_tested[0x10];
6007 u8 test_errors_per_lane[0x10];
6008};
6009
6010struct mlx5_ifc_pvlc_reg_bits {
6011 u8 reserved_0[0x8];
6012 u8 local_port[0x8];
6013 u8 reserved_1[0x10];
6014
6015 u8 reserved_2[0x1c];
6016 u8 vl_hw_cap[0x4];
6017
6018 u8 reserved_3[0x1c];
6019 u8 vl_admin[0x4];
6020
6021 u8 reserved_4[0x1c];
6022 u8 vl_operational[0x4];
6023};
6024
6025struct mlx5_ifc_pude_reg_bits {
6026 u8 swid[0x8];
6027 u8 local_port[0x8];
6028 u8 reserved_0[0x4];
6029 u8 admin_status[0x4];
6030 u8 reserved_1[0x4];
6031 u8 oper_status[0x4];
6032
6033 u8 reserved_2[0x60];
6034};
6035
6036struct mlx5_ifc_ptys_reg_bits {
6037 u8 reserved_0[0x8];
6038 u8 local_port[0x8];
6039 u8 reserved_1[0xd];
6040 u8 proto_mask[0x3];
6041
6042 u8 reserved_2[0x40];
6043
6044 u8 eth_proto_capability[0x20];
6045
6046 u8 ib_link_width_capability[0x10];
6047 u8 ib_proto_capability[0x10];
6048
6049 u8 reserved_3[0x20];
6050
6051 u8 eth_proto_admin[0x20];
6052
6053 u8 ib_link_width_admin[0x10];
6054 u8 ib_proto_admin[0x10];
6055
6056 u8 reserved_4[0x20];
6057
6058 u8 eth_proto_oper[0x20];
6059
6060 u8 ib_link_width_oper[0x10];
6061 u8 ib_proto_oper[0x10];
6062
6063 u8 reserved_5[0x20];
6064
6065 u8 eth_proto_lp_advertise[0x20];
6066
6067 u8 reserved_6[0x60];
6068};
6069
6070struct mlx5_ifc_ptas_reg_bits {
6071 u8 reserved_0[0x20];
6072
6073 u8 algorithm_options[0x10];
6074 u8 reserved_1[0x4];
6075 u8 repetitions_mode[0x4];
6076 u8 num_of_repetitions[0x8];
6077
6078 u8 grade_version[0x8];
6079 u8 height_grade_type[0x4];
6080 u8 phase_grade_type[0x4];
6081 u8 height_grade_weight[0x8];
6082 u8 phase_grade_weight[0x8];
6083
6084 u8 gisim_measure_bits[0x10];
6085 u8 adaptive_tap_measure_bits[0x10];
6086
6087 u8 ber_bath_high_error_threshold[0x10];
6088 u8 ber_bath_mid_error_threshold[0x10];
6089
6090 u8 ber_bath_low_error_threshold[0x10];
6091 u8 one_ratio_high_threshold[0x10];
6092
6093 u8 one_ratio_high_mid_threshold[0x10];
6094 u8 one_ratio_low_mid_threshold[0x10];
6095
6096 u8 one_ratio_low_threshold[0x10];
6097 u8 ndeo_error_threshold[0x10];
6098
6099 u8 mixer_offset_step_size[0x10];
6100 u8 reserved_2[0x8];
6101 u8 mix90_phase_for_voltage_bath[0x8];
6102
6103 u8 mixer_offset_start[0x10];
6104 u8 mixer_offset_end[0x10];
6105
6106 u8 reserved_3[0x15];
6107 u8 ber_test_time[0xb];
6108};
6109
6110struct mlx5_ifc_pspa_reg_bits {
6111 u8 swid[0x8];
6112 u8 local_port[0x8];
6113 u8 sub_port[0x8];
6114 u8 reserved_0[0x8];
6115
6116 u8 reserved_1[0x20];
6117};
6118
6119struct mlx5_ifc_pqdr_reg_bits {
6120 u8 reserved_0[0x8];
6121 u8 local_port[0x8];
6122 u8 reserved_1[0x5];
6123 u8 prio[0x3];
6124 u8 reserved_2[0x6];
6125 u8 mode[0x2];
6126
6127 u8 reserved_3[0x20];
6128
6129 u8 reserved_4[0x10];
6130 u8 min_threshold[0x10];
6131
6132 u8 reserved_5[0x10];
6133 u8 max_threshold[0x10];
6134
6135 u8 reserved_6[0x10];
6136 u8 mark_probability_denominator[0x10];
6137
6138 u8 reserved_7[0x60];
6139};
6140
6141struct mlx5_ifc_ppsc_reg_bits {
6142 u8 reserved_0[0x8];
6143 u8 local_port[0x8];
6144 u8 reserved_1[0x10];
6145
6146 u8 reserved_2[0x60];
6147
6148 u8 reserved_3[0x1c];
6149 u8 wrps_admin[0x4];
6150
6151 u8 reserved_4[0x1c];
6152 u8 wrps_status[0x4];
6153
6154 u8 reserved_5[0x8];
6155 u8 up_threshold[0x8];
6156 u8 reserved_6[0x8];
6157 u8 down_threshold[0x8];
6158
6159 u8 reserved_7[0x20];
6160
6161 u8 reserved_8[0x1c];
6162 u8 srps_admin[0x4];
6163
6164 u8 reserved_9[0x1c];
6165 u8 srps_status[0x4];
6166
6167 u8 reserved_10[0x40];
6168};
6169
6170struct mlx5_ifc_pplr_reg_bits {
6171 u8 reserved_0[0x8];
6172 u8 local_port[0x8];
6173 u8 reserved_1[0x10];
6174
6175 u8 reserved_2[0x8];
6176 u8 lb_cap[0x8];
6177 u8 reserved_3[0x8];
6178 u8 lb_en[0x8];
6179};
6180
6181struct mlx5_ifc_pplm_reg_bits {
6182 u8 reserved_0[0x8];
6183 u8 local_port[0x8];
6184 u8 reserved_1[0x10];
6185
6186 u8 reserved_2[0x20];
6187
6188 u8 port_profile_mode[0x8];
6189 u8 static_port_profile[0x8];
6190 u8 active_port_profile[0x8];
6191 u8 reserved_3[0x8];
6192
6193 u8 retransmission_active[0x8];
6194 u8 fec_mode_active[0x18];
6195
6196 u8 reserved_4[0x20];
6197};
6198
6199struct mlx5_ifc_ppcnt_reg_bits {
6200 u8 swid[0x8];
6201 u8 local_port[0x8];
6202 u8 pnat[0x2];
6203 u8 reserved_0[0x8];
6204 u8 grp[0x6];
6205
6206 u8 clr[0x1];
6207 u8 reserved_1[0x1c];
6208 u8 prio_tc[0x3];
6209
6210 union mlx5_ifc_eth_cntrs_grp_data_layout_auto_bits counter_set;
6211};
6212
6213struct mlx5_ifc_ppad_reg_bits {
6214 u8 reserved_0[0x3];
6215 u8 single_mac[0x1];
6216 u8 reserved_1[0x4];
6217 u8 local_port[0x8];
6218 u8 mac_47_32[0x10];
6219
6220 u8 mac_31_0[0x20];
6221
6222 u8 reserved_2[0x40];
6223};
6224
6225struct mlx5_ifc_pmtu_reg_bits {
6226 u8 reserved_0[0x8];
6227 u8 local_port[0x8];
6228 u8 reserved_1[0x10];
6229
6230 u8 max_mtu[0x10];
6231 u8 reserved_2[0x10];
6232
6233 u8 admin_mtu[0x10];
6234 u8 reserved_3[0x10];
6235
6236 u8 oper_mtu[0x10];
6237 u8 reserved_4[0x10];
6238};
6239
6240struct mlx5_ifc_pmpr_reg_bits {
6241 u8 reserved_0[0x8];
6242 u8 module[0x8];
6243 u8 reserved_1[0x10];
6244
6245 u8 reserved_2[0x18];
6246 u8 attenuation_5g[0x8];
6247
6248 u8 reserved_3[0x18];
6249 u8 attenuation_7g[0x8];
6250
6251 u8 reserved_4[0x18];
6252 u8 attenuation_12g[0x8];
6253};
6254
6255struct mlx5_ifc_pmpe_reg_bits {
6256 u8 reserved_0[0x8];
6257 u8 module[0x8];
6258 u8 reserved_1[0xc];
6259 u8 module_status[0x4];
6260
6261 u8 reserved_2[0x60];
6262};
6263
6264struct mlx5_ifc_pmpc_reg_bits {
6265 u8 module_state_updated[32][0x8];
6266};
6267
6268struct mlx5_ifc_pmlpn_reg_bits {
6269 u8 reserved_0[0x4];
6270 u8 mlpn_status[0x4];
6271 u8 local_port[0x8];
6272 u8 reserved_1[0x10];
6273
6274 u8 e[0x1];
6275 u8 reserved_2[0x1f];
6276};
6277
6278struct mlx5_ifc_pmlp_reg_bits {
6279 u8 rxtx[0x1];
6280 u8 reserved_0[0x7];
6281 u8 local_port[0x8];
6282 u8 reserved_1[0x8];
6283 u8 width[0x8];
6284
6285 u8 lane0_module_mapping[0x20];
6286
6287 u8 lane1_module_mapping[0x20];
6288
6289 u8 lane2_module_mapping[0x20];
6290
6291 u8 lane3_module_mapping[0x20];
6292
6293 u8 reserved_2[0x160];
6294};
6295
6296struct mlx5_ifc_pmaos_reg_bits {
6297 u8 reserved_0[0x8];
6298 u8 module[0x8];
6299 u8 reserved_1[0x4];
6300 u8 admin_status[0x4];
6301 u8 reserved_2[0x4];
6302 u8 oper_status[0x4];
6303
6304 u8 ase[0x1];
6305 u8 ee[0x1];
6306 u8 reserved_3[0x1c];
6307 u8 e[0x2];
6308
6309 u8 reserved_4[0x40];
6310};
6311
6312struct mlx5_ifc_plpc_reg_bits {
6313 u8 reserved_0[0x4];
6314 u8 profile_id[0xc];
6315 u8 reserved_1[0x4];
6316 u8 proto_mask[0x4];
6317 u8 reserved_2[0x8];
6318
6319 u8 reserved_3[0x10];
6320 u8 lane_speed[0x10];
6321
6322 u8 reserved_4[0x17];
6323 u8 lpbf[0x1];
6324 u8 fec_mode_policy[0x8];
6325
6326 u8 retransmission_capability[0x8];
6327 u8 fec_mode_capability[0x18];
6328
6329 u8 retransmission_support_admin[0x8];
6330 u8 fec_mode_support_admin[0x18];
6331
6332 u8 retransmission_request_admin[0x8];
6333 u8 fec_mode_request_admin[0x18];
6334
6335 u8 reserved_5[0x80];
6336};
6337
6338struct mlx5_ifc_plib_reg_bits {
6339 u8 reserved_0[0x8];
6340 u8 local_port[0x8];
6341 u8 reserved_1[0x8];
6342 u8 ib_port[0x8];
6343
6344 u8 reserved_2[0x60];
6345};
6346
6347struct mlx5_ifc_plbf_reg_bits {
6348 u8 reserved_0[0x8];
6349 u8 local_port[0x8];
6350 u8 reserved_1[0xd];
6351 u8 lbf_mode[0x3];
6352
6353 u8 reserved_2[0x20];
6354};
6355
6356struct mlx5_ifc_pipg_reg_bits {
6357 u8 reserved_0[0x8];
6358 u8 local_port[0x8];
6359 u8 reserved_1[0x10];
6360
6361 u8 dic[0x1];
6362 u8 reserved_2[0x19];
6363 u8 ipg[0x4];
6364 u8 reserved_3[0x2];
6365};
6366
6367struct mlx5_ifc_pifr_reg_bits {
6368 u8 reserved_0[0x8];
6369 u8 local_port[0x8];
6370 u8 reserved_1[0x10];
6371
6372 u8 reserved_2[0xe0];
6373
6374 u8 port_filter[8][0x20];
6375
6376 u8 port_filter_update_en[8][0x20];
6377};
6378
6379struct mlx5_ifc_pfcc_reg_bits {
6380 u8 reserved_0[0x8];
6381 u8 local_port[0x8];
6382 u8 reserved_1[0x10];
6383
6384 u8 ppan[0x4];
6385 u8 reserved_2[0x4];
6386 u8 prio_mask_tx[0x8];
6387 u8 reserved_3[0x8];
6388 u8 prio_mask_rx[0x8];
6389
6390 u8 pptx[0x1];
6391 u8 aptx[0x1];
6392 u8 reserved_4[0x6];
6393 u8 pfctx[0x8];
6394 u8 reserved_5[0x10];
6395
6396 u8 pprx[0x1];
6397 u8 aprx[0x1];
6398 u8 reserved_6[0x6];
6399 u8 pfcrx[0x8];
6400 u8 reserved_7[0x10];
6401
6402 u8 reserved_8[0x80];
6403};
6404
6405struct mlx5_ifc_pelc_reg_bits {
6406 u8 op[0x4];
6407 u8 reserved_0[0x4];
6408 u8 local_port[0x8];
6409 u8 reserved_1[0x10];
6410
6411 u8 op_admin[0x8];
6412 u8 op_capability[0x8];
6413 u8 op_request[0x8];
6414 u8 op_active[0x8];
6415
6416 u8 admin[0x40];
6417
6418 u8 capability[0x40];
6419
6420 u8 request[0x40];
6421
6422 u8 active[0x40];
6423
6424 u8 reserved_2[0x80];
6425};
6426
6427struct mlx5_ifc_peir_reg_bits {
6428 u8 reserved_0[0x8];
6429 u8 local_port[0x8];
6430 u8 reserved_1[0x10];
6431
6432 u8 reserved_2[0xc];
6433 u8 error_count[0x4];
6434 u8 reserved_3[0x10];
6435
6436 u8 reserved_4[0xc];
6437 u8 lane[0x4];
6438 u8 reserved_5[0x8];
6439 u8 error_type[0x8];
6440};
6441
6442struct mlx5_ifc_pcap_reg_bits {
6443 u8 reserved_0[0x8];
6444 u8 local_port[0x8];
6445 u8 reserved_1[0x10];
6446
6447 u8 port_capability_mask[4][0x20];
6448};
6449
6450struct mlx5_ifc_paos_reg_bits {
6451 u8 swid[0x8];
6452 u8 local_port[0x8];
6453 u8 reserved_0[0x4];
6454 u8 admin_status[0x4];
6455 u8 reserved_1[0x4];
6456 u8 oper_status[0x4];
6457
6458 u8 ase[0x1];
6459 u8 ee[0x1];
6460 u8 reserved_2[0x1c];
6461 u8 e[0x2];
6462
6463 u8 reserved_3[0x40];
6464};
6465
6466struct mlx5_ifc_pamp_reg_bits {
6467 u8 reserved_0[0x8];
6468 u8 opamp_group[0x8];
6469 u8 reserved_1[0xc];
6470 u8 opamp_group_type[0x4];
6471
6472 u8 start_index[0x10];
6473 u8 reserved_2[0x4];
6474 u8 num_of_indices[0xc];
6475
6476 u8 index_data[18][0x10];
6477};
6478
6479struct mlx5_ifc_lane_2_module_mapping_bits {
6480 u8 reserved_0[0x6];
6481 u8 rx_lane[0x2];
6482 u8 reserved_1[0x6];
6483 u8 tx_lane[0x2];
6484 u8 reserved_2[0x8];
6485 u8 module[0x8];
6486};
6487
6488struct mlx5_ifc_bufferx_reg_bits {
6489 u8 reserved_0[0x6];
6490 u8 lossy[0x1];
6491 u8 epsb[0x1];
6492 u8 reserved_1[0xc];
6493 u8 size[0xc];
6494
6495 u8 xoff_threshold[0x10];
6496 u8 xon_threshold[0x10];
6497};
6498
6499struct mlx5_ifc_set_node_in_bits {
6500 u8 node_description[64][0x8];
6501};
6502
6503struct mlx5_ifc_register_power_settings_bits {
6504 u8 reserved_0[0x18];
6505 u8 power_settings_level[0x8];
6506
6507 u8 reserved_1[0x60];
6508};
6509
6510struct mlx5_ifc_register_host_endianness_bits {
6511 u8 he[0x1];
6512 u8 reserved_0[0x1f];
6513
6514 u8 reserved_1[0x60];
6515};
6516
6517struct mlx5_ifc_umr_pointer_desc_argument_bits {
6518 u8 reserved_0[0x20];
6519
6520 u8 mkey[0x20];
6521
6522 u8 addressh_63_32[0x20];
6523
6524 u8 addressl_31_0[0x20];
6525};
6526
6527struct mlx5_ifc_ud_adrs_vector_bits {
6528 u8 dc_key[0x40];
6529
6530 u8 ext[0x1];
6531 u8 reserved_0[0x7];
6532 u8 destination_qp_dct[0x18];
6533
6534 u8 static_rate[0x4];
6535 u8 sl_eth_prio[0x4];
6536 u8 fl[0x1];
6537 u8 mlid[0x7];
6538 u8 rlid_udp_sport[0x10];
6539
6540 u8 reserved_1[0x20];
6541
6542 u8 rmac_47_16[0x20];
6543
6544 u8 rmac_15_0[0x10];
6545 u8 tclass[0x8];
6546 u8 hop_limit[0x8];
6547
6548 u8 reserved_2[0x1];
6549 u8 grh[0x1];
6550 u8 reserved_3[0x2];
6551 u8 src_addr_index[0x8];
6552 u8 flow_label[0x14];
6553
6554 u8 rgid_rip[16][0x8];
6555};
6556
6557struct mlx5_ifc_pages_req_event_bits {
6558 u8 reserved_0[0x10];
6559 u8 function_id[0x10];
6560
6561 u8 num_pages[0x20];
6562
6563 u8 reserved_1[0xa0];
6564};
6565
6566struct mlx5_ifc_eqe_bits {
6567 u8 reserved_0[0x8];
6568 u8 event_type[0x8];
6569 u8 reserved_1[0x8];
6570 u8 event_sub_type[0x8];
6571
6572 u8 reserved_2[0xe0];
6573
6574 union mlx5_ifc_event_auto_bits event_data;
6575
6576 u8 reserved_3[0x10];
6577 u8 signature[0x8];
6578 u8 reserved_4[0x7];
6579 u8 owner[0x1];
6580};
6581
6582enum {
6583 MLX5_CMD_QUEUE_ENTRY_TYPE_PCIE_CMD_IF_TRANSPORT = 0x7,
6584};
6585
6586struct mlx5_ifc_cmd_queue_entry_bits {
6587 u8 type[0x8];
6588 u8 reserved_0[0x18];
6589
6590 u8 input_length[0x20];
6591
6592 u8 input_mailbox_pointer_63_32[0x20];
6593
6594 u8 input_mailbox_pointer_31_9[0x17];
6595 u8 reserved_1[0x9];
6596
6597 u8 command_input_inline_data[16][0x8];
6598
6599 u8 command_output_inline_data[16][0x8];
6600
6601 u8 output_mailbox_pointer_63_32[0x20];
6602
6603 u8 output_mailbox_pointer_31_9[0x17];
6604 u8 reserved_2[0x9];
6605
6606 u8 output_length[0x20];
6607
6608 u8 token[0x8];
6609 u8 signature[0x8];
6610 u8 reserved_3[0x8];
6611 u8 status[0x7];
6612 u8 ownership[0x1];
6613};
6614
6615struct mlx5_ifc_cmd_out_bits {
6616 u8 status[0x8];
6617 u8 reserved_0[0x18];
6618
6619 u8 syndrome[0x20];
6620
6621 u8 command_output[0x20];
6622};
6623
6624struct mlx5_ifc_cmd_in_bits {
6625 u8 opcode[0x10];
6626 u8 reserved_0[0x10];
6627
6628 u8 reserved_1[0x10];
6629 u8 op_mod[0x10];
6630
6631 u8 command[0][0x20];
6632};
6633
6634struct mlx5_ifc_cmd_if_box_bits {
6635 u8 mailbox_data[512][0x8];
6636
6637 u8 reserved_0[0x180];
6638
6639 u8 next_pointer_63_32[0x20];
6640
6641 u8 next_pointer_31_10[0x16];
6642 u8 reserved_1[0xa];
6643
6644 u8 block_number[0x20];
6645
6646 u8 reserved_2[0x8];
6647 u8 token[0x8];
6648 u8 ctrl_signature[0x8];
6649 u8 signature[0x8];
6650};
6651
6652struct mlx5_ifc_mtt_bits {
6653 u8 ptag_63_32[0x20];
6654
6655 u8 ptag_31_8[0x18];
6656 u8 reserved_0[0x6];
6657 u8 wr_en[0x1];
6658 u8 rd_en[0x1];
6659};
6660
6661enum {
6662 MLX5_INITIAL_SEG_NIC_INTERFACE_FULL_DRIVER = 0x0,
6663 MLX5_INITIAL_SEG_NIC_INTERFACE_DISABLED = 0x1,
6664 MLX5_INITIAL_SEG_NIC_INTERFACE_NO_DRAM_NIC = 0x2,
6665};
6666
6667enum {
6668 MLX5_INITIAL_SEG_NIC_INTERFACE_SUPPORTED_FULL_DRIVER = 0x0,
6669 MLX5_INITIAL_SEG_NIC_INTERFACE_SUPPORTED_DISABLED = 0x1,
6670 MLX5_INITIAL_SEG_NIC_INTERFACE_SUPPORTED_NO_DRAM_NIC = 0x2,
6671};
6672
6673enum {
6674 MLX5_INITIAL_SEG_HEALTH_SYNDROME_FW_INTERNAL_ERR = 0x1,
6675 MLX5_INITIAL_SEG_HEALTH_SYNDROME_DEAD_IRISC = 0x7,
6676 MLX5_INITIAL_SEG_HEALTH_SYNDROME_HW_FATAL_ERR = 0x8,
6677 MLX5_INITIAL_SEG_HEALTH_SYNDROME_FW_CRC_ERR = 0x9,
6678 MLX5_INITIAL_SEG_HEALTH_SYNDROME_ICM_FETCH_PCI_ERR = 0xa,
6679 MLX5_INITIAL_SEG_HEALTH_SYNDROME_ICM_PAGE_ERR = 0xb,
6680 MLX5_INITIAL_SEG_HEALTH_SYNDROME_ASYNCHRONOUS_EQ_BUF_OVERRUN = 0xc,
6681 MLX5_INITIAL_SEG_HEALTH_SYNDROME_EQ_IN_ERR = 0xd,
6682 MLX5_INITIAL_SEG_HEALTH_SYNDROME_EQ_INV = 0xe,
6683 MLX5_INITIAL_SEG_HEALTH_SYNDROME_FFSER_ERR = 0xf,
6684 MLX5_INITIAL_SEG_HEALTH_SYNDROME_HIGH_TEMP_ERR = 0x10,
6685};
6686
6687struct mlx5_ifc_initial_seg_bits {
6688 u8 fw_rev_minor[0x10];
6689 u8 fw_rev_major[0x10];
6690
6691 u8 cmd_interface_rev[0x10];
6692 u8 fw_rev_subminor[0x10];
6693
6694 u8 reserved_0[0x40];
6695
6696 u8 cmdq_phy_addr_63_32[0x20];
6697
6698 u8 cmdq_phy_addr_31_12[0x14];
6699 u8 reserved_1[0x2];
6700 u8 nic_interface[0x2];
6701 u8 log_cmdq_size[0x4];
6702 u8 log_cmdq_stride[0x4];
6703
6704 u8 command_doorbell_vector[0x20];
6705
6706 u8 reserved_2[0xf00];
6707
6708 u8 initializing[0x1];
6709 u8 reserved_3[0x4];
6710 u8 nic_interface_supported[0x3];
6711 u8 reserved_4[0x18];
6712
6713 struct mlx5_ifc_health_buffer_bits health_buffer;
6714
6715 u8 no_dram_nic_offset[0x20];
6716
6717 u8 reserved_5[0x6e40];
6718
6719 u8 reserved_6[0x1f];
6720 u8 clear_int[0x1];
6721
6722 u8 health_syndrome[0x8];
6723 u8 health_counter[0x18];
6724
6725 u8 reserved_7[0x17fc0];
6726};
6727
6728union mlx5_ifc_ports_control_registers_document_bits {
6729 struct mlx5_ifc_bufferx_reg_bits bufferx_reg;
6730 struct mlx5_ifc_eth_2819_cntrs_grp_data_layout_bits eth_2819_cntrs_grp_data_layout;
6731 struct mlx5_ifc_eth_2863_cntrs_grp_data_layout_bits eth_2863_cntrs_grp_data_layout;
6732 struct mlx5_ifc_eth_3635_cntrs_grp_data_layout_bits eth_3635_cntrs_grp_data_layout;
6733 struct mlx5_ifc_eth_802_3_cntrs_grp_data_layout_bits eth_802_3_cntrs_grp_data_layout;
6734 struct mlx5_ifc_eth_extended_cntrs_grp_data_layout_bits eth_extended_cntrs_grp_data_layout;
6735 struct mlx5_ifc_eth_per_prio_grp_data_layout_bits eth_per_prio_grp_data_layout;
6736 struct mlx5_ifc_eth_per_traffic_grp_data_layout_bits eth_per_traffic_grp_data_layout;
6737 struct mlx5_ifc_lane_2_module_mapping_bits lane_2_module_mapping;
6738 struct mlx5_ifc_pamp_reg_bits pamp_reg;
6739 struct mlx5_ifc_paos_reg_bits paos_reg;
6740 struct mlx5_ifc_pcap_reg_bits pcap_reg;
6741 struct mlx5_ifc_peir_reg_bits peir_reg;
6742 struct mlx5_ifc_pelc_reg_bits pelc_reg;
6743 struct mlx5_ifc_pfcc_reg_bits pfcc_reg;
6744 struct mlx5_ifc_phys_layer_cntrs_bits phys_layer_cntrs;
6745 struct mlx5_ifc_pifr_reg_bits pifr_reg;
6746 struct mlx5_ifc_pipg_reg_bits pipg_reg;
6747 struct mlx5_ifc_plbf_reg_bits plbf_reg;
6748 struct mlx5_ifc_plib_reg_bits plib_reg;
6749 struct mlx5_ifc_plpc_reg_bits plpc_reg;
6750 struct mlx5_ifc_pmaos_reg_bits pmaos_reg;
6751 struct mlx5_ifc_pmlp_reg_bits pmlp_reg;
6752 struct mlx5_ifc_pmlpn_reg_bits pmlpn_reg;
6753 struct mlx5_ifc_pmpc_reg_bits pmpc_reg;
6754 struct mlx5_ifc_pmpe_reg_bits pmpe_reg;
6755 struct mlx5_ifc_pmpr_reg_bits pmpr_reg;
6756 struct mlx5_ifc_pmtu_reg_bits pmtu_reg;
6757 struct mlx5_ifc_ppad_reg_bits ppad_reg;
6758 struct mlx5_ifc_ppcnt_reg_bits ppcnt_reg;
6759 struct mlx5_ifc_pplm_reg_bits pplm_reg;
6760 struct mlx5_ifc_pplr_reg_bits pplr_reg;
6761 struct mlx5_ifc_ppsc_reg_bits ppsc_reg;
6762 struct mlx5_ifc_pqdr_reg_bits pqdr_reg;
6763 struct mlx5_ifc_pspa_reg_bits pspa_reg;
6764 struct mlx5_ifc_ptas_reg_bits ptas_reg;
6765 struct mlx5_ifc_ptys_reg_bits ptys_reg;
6766 struct mlx5_ifc_pude_reg_bits pude_reg;
6767 struct mlx5_ifc_pvlc_reg_bits pvlc_reg;
6768 struct mlx5_ifc_slrg_reg_bits slrg_reg;
6769 struct mlx5_ifc_sltp_reg_bits sltp_reg;
6770 u8 reserved_0[0x60e0];
6771};
6772
6773union mlx5_ifc_debug_enhancements_document_bits {
6774 struct mlx5_ifc_health_buffer_bits health_buffer;
6775 u8 reserved_0[0x200];
6776};
6777
6778union mlx5_ifc_uplink_pci_interface_document_bits {
6779 struct mlx5_ifc_initial_seg_bits initial_seg;
6780 u8 reserved_0[0x20060];
347}; 6781};
348 6782
349#endif /* MLX5_IFC_H */ 6783#endif /* MLX5_IFC_H */
diff --git a/include/linux/mlx5/qp.h b/include/linux/mlx5/qp.h
index 310b5f7fd6ae..f079fb1a31f7 100644
--- a/include/linux/mlx5/qp.h
+++ b/include/linux/mlx5/qp.h
@@ -134,13 +134,21 @@ enum {
134 134
135enum { 135enum {
136 MLX5_WQE_CTRL_CQ_UPDATE = 2 << 2, 136 MLX5_WQE_CTRL_CQ_UPDATE = 2 << 2,
137 MLX5_WQE_CTRL_CQ_UPDATE_AND_EQE = 3 << 2,
137 MLX5_WQE_CTRL_SOLICITED = 1 << 1, 138 MLX5_WQE_CTRL_SOLICITED = 1 << 1,
138}; 139};
139 140
140enum { 141enum {
142 MLX5_SEND_WQE_DS = 16,
141 MLX5_SEND_WQE_BB = 64, 143 MLX5_SEND_WQE_BB = 64,
142}; 144};
143 145
146#define MLX5_SEND_WQEBB_NUM_DS (MLX5_SEND_WQE_BB / MLX5_SEND_WQE_DS)
147
148enum {
149 MLX5_SEND_WQE_MAX_WQEBBS = 16,
150};
151
144enum { 152enum {
145 MLX5_WQE_FMR_PERM_LOCAL_READ = 1 << 27, 153 MLX5_WQE_FMR_PERM_LOCAL_READ = 1 << 27,
146 MLX5_WQE_FMR_PERM_LOCAL_WRITE = 1 << 28, 154 MLX5_WQE_FMR_PERM_LOCAL_WRITE = 1 << 28,
@@ -200,6 +208,23 @@ struct mlx5_wqe_ctrl_seg {
200#define MLX5_WQE_CTRL_WQE_INDEX_MASK 0x00ffff00 208#define MLX5_WQE_CTRL_WQE_INDEX_MASK 0x00ffff00
201#define MLX5_WQE_CTRL_WQE_INDEX_SHIFT 8 209#define MLX5_WQE_CTRL_WQE_INDEX_SHIFT 8
202 210
211enum {
212 MLX5_ETH_WQE_L3_INNER_CSUM = 1 << 4,
213 MLX5_ETH_WQE_L4_INNER_CSUM = 1 << 5,
214 MLX5_ETH_WQE_L3_CSUM = 1 << 6,
215 MLX5_ETH_WQE_L4_CSUM = 1 << 7,
216};
217
218struct mlx5_wqe_eth_seg {
219 u8 rsvd0[4];
220 u8 cs_flags;
221 u8 rsvd1;
222 __be16 mss;
223 __be32 rsvd2;
224 __be16 inline_hdr_sz;
225 u8 inline_hdr_start[2];
226};
227
203struct mlx5_wqe_xrc_seg { 228struct mlx5_wqe_xrc_seg {
204 __be32 xrc_srqn; 229 __be32 xrc_srqn;
205 u8 rsvd[12]; 230 u8 rsvd[12];
diff --git a/include/linux/mlx5/vport.h b/include/linux/mlx5/vport.h
new file mode 100644
index 000000000000..967e0fd06e89
--- /dev/null
+++ b/include/linux/mlx5/vport.h
@@ -0,0 +1,55 @@
1/*
2 * Copyright (c) 2013-2015, Mellanox Technologies, Ltd. All rights reserved.
3 *
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 *
18 * - Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and/or other materials
21 * provided with the distribution.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE.
31 */
32
33#ifndef __MLX5_VPORT_H__
34#define __MLX5_VPORT_H__
35
36#include <linux/mlx5/driver.h>
37
38u8 mlx5_query_vport_state(struct mlx5_core_dev *mdev, u8 opmod);
39void mlx5_query_nic_vport_mac_address(struct mlx5_core_dev *mdev, u8 *addr);
40int mlx5_query_hca_vport_gid(struct mlx5_core_dev *dev, u8 other_vport,
41 u8 port_num, u16 vf_num, u16 gid_index,
42 union ib_gid *gid);
43int mlx5_query_hca_vport_pkey(struct mlx5_core_dev *dev, u8 other_vport,
44 u8 port_num, u16 vf_num, u16 pkey_index,
45 u16 *pkey);
46int mlx5_query_hca_vport_context(struct mlx5_core_dev *dev,
47 u8 other_vport, u8 port_num,
48 u16 vf_num,
49 struct mlx5_hca_vport_context *rep);
50int mlx5_query_hca_vport_system_image_guid(struct mlx5_core_dev *dev,
51 u64 *sys_image_guid);
52int mlx5_query_hca_vport_node_guid(struct mlx5_core_dev *dev,
53 u64 *node_guid);
54
55#endif /* __MLX5_VPORT_H__ */
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 8d37e26a1007..0038ac7466fd 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -226,6 +226,24 @@ struct page_frag {
226#endif 226#endif
227}; 227};
228 228
229#define PAGE_FRAG_CACHE_MAX_SIZE __ALIGN_MASK(32768, ~PAGE_MASK)
230#define PAGE_FRAG_CACHE_MAX_ORDER get_order(PAGE_FRAG_CACHE_MAX_SIZE)
231
232struct page_frag_cache {
233 void * va;
234#if (PAGE_SIZE < PAGE_FRAG_CACHE_MAX_SIZE)
235 __u16 offset;
236 __u16 size;
237#else
238 __u32 offset;
239#endif
240 /* we maintain a pagecount bias, so that we dont dirty cache line
241 * containing page->_count every time we allocate a fragment.
242 */
243 unsigned int pagecnt_bias;
244 bool pfmemalloc;
245};
246
229typedef unsigned long __nocast vm_flags_t; 247typedef unsigned long __nocast vm_flags_t;
230 248
231/* 249/*
diff --git a/include/linux/net.h b/include/linux/net.h
index 738ea48be889..04aa06852771 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -38,7 +38,6 @@ struct net;
38#define SOCK_NOSPACE 2 38#define SOCK_NOSPACE 2
39#define SOCK_PASSCRED 3 39#define SOCK_PASSCRED 3
40#define SOCK_PASSSEC 4 40#define SOCK_PASSSEC 4
41#define SOCK_EXTERNALLY_ALLOCATED 5
42 41
43#ifndef ARCH_HAS_SOCKET_TYPES 42#ifndef ARCH_HAS_SOCKET_TYPES
44/** 43/**
@@ -208,7 +207,7 @@ void sock_unregister(int family);
208int __sock_create(struct net *net, int family, int type, int proto, 207int __sock_create(struct net *net, int family, int type, int proto,
209 struct socket **res, int kern); 208 struct socket **res, int kern);
210int sock_create(int family, int type, int proto, struct socket **res); 209int sock_create(int family, int type, int proto, struct socket **res);
211int sock_create_kern(int family, int type, int proto, struct socket **res); 210int sock_create_kern(struct net *net, int family, int type, int proto, struct socket **res);
212int sock_create_lite(int family, int type, int proto, struct socket **res); 211int sock_create_lite(int family, int type, int proto, struct socket **res);
213void sock_release(struct socket *sock); 212void sock_release(struct socket *sock);
214int sock_sendmsg(struct socket *sock, struct msghdr *msg); 213int sock_sendmsg(struct socket *sock, struct msghdr *msg);
diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h
index 7d59dc6ab789..9672781c593d 100644
--- a/include/linux/netdev_features.h
+++ b/include/linux/netdev_features.h
@@ -66,7 +66,6 @@ enum {
66 NETIF_F_HW_VLAN_STAG_FILTER_BIT,/* Receive filtering on VLAN STAGs */ 66 NETIF_F_HW_VLAN_STAG_FILTER_BIT,/* Receive filtering on VLAN STAGs */
67 NETIF_F_HW_L2FW_DOFFLOAD_BIT, /* Allow L2 Forwarding in Hardware */ 67 NETIF_F_HW_L2FW_DOFFLOAD_BIT, /* Allow L2 Forwarding in Hardware */
68 NETIF_F_BUSY_POLL_BIT, /* Busy poll */ 68 NETIF_F_BUSY_POLL_BIT, /* Busy poll */
69 NETIF_F_HW_SWITCH_OFFLOAD_BIT, /* HW switch offload */
70 69
71 /* 70 /*
72 * Add your fresh new feature above and remember to update 71 * Add your fresh new feature above and remember to update
@@ -125,7 +124,6 @@ enum {
125#define NETIF_F_HW_VLAN_STAG_TX __NETIF_F(HW_VLAN_STAG_TX) 124#define NETIF_F_HW_VLAN_STAG_TX __NETIF_F(HW_VLAN_STAG_TX)
126#define NETIF_F_HW_L2FW_DOFFLOAD __NETIF_F(HW_L2FW_DOFFLOAD) 125#define NETIF_F_HW_L2FW_DOFFLOAD __NETIF_F(HW_L2FW_DOFFLOAD)
127#define NETIF_F_BUSY_POLL __NETIF_F(BUSY_POLL) 126#define NETIF_F_BUSY_POLL __NETIF_F(BUSY_POLL)
128#define NETIF_F_HW_SWITCH_OFFLOAD __NETIF_F(HW_SWITCH_OFFLOAD)
129 127
130/* Features valid for ethtool to change */ 128/* Features valid for ethtool to change */
131/* = all defined minus driver/device-class-related */ 129/* = all defined minus driver/device-class-related */
@@ -161,8 +159,7 @@ enum {
161 */ 159 */
162#define NETIF_F_ONE_FOR_ALL (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST | \ 160#define NETIF_F_ONE_FOR_ALL (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST | \
163 NETIF_F_SG | NETIF_F_HIGHDMA | \ 161 NETIF_F_SG | NETIF_F_HIGHDMA | \
164 NETIF_F_FRAGLIST | NETIF_F_VLAN_CHALLENGED | \ 162 NETIF_F_FRAGLIST | NETIF_F_VLAN_CHALLENGED)
165 NETIF_F_HW_SWITCH_OFFLOAD)
166 163
167/* 164/*
168 * If one device doesn't support one of these features, then disable it 165 * If one device doesn't support one of these features, then disable it
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 05b9a694e213..e20979dfd6a9 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1100,6 +1100,10 @@ struct net_device_ops {
1100 struct ifla_vf_info *ivf); 1100 struct ifla_vf_info *ivf);
1101 int (*ndo_set_vf_link_state)(struct net_device *dev, 1101 int (*ndo_set_vf_link_state)(struct net_device *dev,
1102 int vf, int link_state); 1102 int vf, int link_state);
1103 int (*ndo_get_vf_stats)(struct net_device *dev,
1104 int vf,
1105 struct ifla_vf_stats
1106 *vf_stats);
1103 int (*ndo_set_vf_port)(struct net_device *dev, 1107 int (*ndo_set_vf_port)(struct net_device *dev,
1104 int vf, 1108 int vf,
1105 struct nlattr *port[]); 1109 struct nlattr *port[]);
@@ -1564,7 +1568,7 @@ struct net_device {
1564 const struct net_device_ops *netdev_ops; 1568 const struct net_device_ops *netdev_ops;
1565 const struct ethtool_ops *ethtool_ops; 1569 const struct ethtool_ops *ethtool_ops;
1566#ifdef CONFIG_NET_SWITCHDEV 1570#ifdef CONFIG_NET_SWITCHDEV
1567 const struct swdev_ops *swdev_ops; 1571 const struct switchdev_ops *switchdev_ops;
1568#endif 1572#endif
1569 1573
1570 const struct header_ops *header_ops; 1574 const struct header_ops *header_ops;
@@ -1652,7 +1656,14 @@ struct net_device {
1652 rx_handler_func_t __rcu *rx_handler; 1656 rx_handler_func_t __rcu *rx_handler;
1653 void __rcu *rx_handler_data; 1657 void __rcu *rx_handler_data;
1654 1658
1659#ifdef CONFIG_NET_CLS_ACT
1660 struct tcf_proto __rcu *ingress_cl_list;
1661#endif
1655 struct netdev_queue __rcu *ingress_queue; 1662 struct netdev_queue __rcu *ingress_queue;
1663#ifdef CONFIG_NETFILTER_INGRESS
1664 struct list_head nf_hooks_ingress;
1665#endif
1666
1656 unsigned char broadcast[MAX_ADDR_LEN]; 1667 unsigned char broadcast[MAX_ADDR_LEN];
1657#ifdef CONFIG_RFS_ACCEL 1668#ifdef CONFIG_RFS_ACCEL
1658 struct cpu_rmap *rx_cpu_rmap; 1669 struct cpu_rmap *rx_cpu_rmap;
@@ -1990,6 +2001,7 @@ struct offload_callbacks {
1990 2001
1991struct packet_offload { 2002struct packet_offload {
1992 __be16 type; /* This is really htons(ether_type). */ 2003 __be16 type; /* This is really htons(ether_type). */
2004 u16 priority;
1993 struct offload_callbacks callbacks; 2005 struct offload_callbacks callbacks;
1994 struct list_head list; 2006 struct list_head list;
1995}; 2007};
@@ -2552,10 +2564,6 @@ static inline void netif_tx_wake_all_queues(struct net_device *dev)
2552 2564
2553static inline void netif_tx_stop_queue(struct netdev_queue *dev_queue) 2565static inline void netif_tx_stop_queue(struct netdev_queue *dev_queue)
2554{ 2566{
2555 if (WARN_ON(!dev_queue)) {
2556 pr_info("netif_stop_queue() cannot be called before register_netdev()\n");
2557 return;
2558 }
2559 set_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state); 2567 set_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state);
2560} 2568}
2561 2569
@@ -2571,15 +2579,7 @@ static inline void netif_stop_queue(struct net_device *dev)
2571 netif_tx_stop_queue(netdev_get_tx_queue(dev, 0)); 2579 netif_tx_stop_queue(netdev_get_tx_queue(dev, 0));
2572} 2580}
2573 2581
2574static inline void netif_tx_stop_all_queues(struct net_device *dev) 2582void netif_tx_stop_all_queues(struct net_device *dev);
2575{
2576 unsigned int i;
2577
2578 for (i = 0; i < dev->num_tx_queues; i++) {
2579 struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
2580 netif_tx_stop_queue(txq);
2581 }
2582}
2583 2583
2584static inline bool netif_tx_queue_stopped(const struct netdev_queue *dev_queue) 2584static inline bool netif_tx_queue_stopped(const struct netdev_queue *dev_queue)
2585{ 2585{
@@ -2840,6 +2840,9 @@ static inline int netif_set_xps_queue(struct net_device *dev,
2840} 2840}
2841#endif 2841#endif
2842 2842
2843u16 __skb_tx_hash(const struct net_device *dev, struct sk_buff *skb,
2844 unsigned int num_tx_queues);
2845
2843/* 2846/*
2844 * Returns a Tx hash for the given packet when dev->real_num_tx_queues is used 2847 * Returns a Tx hash for the given packet when dev->real_num_tx_queues is used
2845 * as a distribution range limit for the returned value. 2848 * as a distribution range limit for the returned value.
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
index 63560d0a8dfe..00050dfd9f23 100644
--- a/include/linux/netfilter.h
+++ b/include/linux/netfilter.h
@@ -10,7 +10,8 @@
10#include <linux/wait.h> 10#include <linux/wait.h>
11#include <linux/list.h> 11#include <linux/list.h>
12#include <linux/static_key.h> 12#include <linux/static_key.h>
13#include <uapi/linux/netfilter.h> 13#include <linux/netfilter_defs.h>
14
14#ifdef CONFIG_NETFILTER 15#ifdef CONFIG_NETFILTER
15static inline int NF_DROP_GETERR(int verdict) 16static inline int NF_DROP_GETERR(int verdict)
16{ 17{
@@ -38,9 +39,6 @@ static inline void nf_inet_addr_mask(const union nf_inet_addr *a1,
38 39
39int netfilter_init(void); 40int netfilter_init(void);
40 41
41/* Largest hook number + 1 */
42#define NF_MAX_HOOKS 8
43
44struct sk_buff; 42struct sk_buff;
45 43
46struct nf_hook_ops; 44struct nf_hook_ops;
@@ -54,10 +52,12 @@ struct nf_hook_state {
54 struct net_device *in; 52 struct net_device *in;
55 struct net_device *out; 53 struct net_device *out;
56 struct sock *sk; 54 struct sock *sk;
55 struct list_head *hook_list;
57 int (*okfn)(struct sock *, struct sk_buff *); 56 int (*okfn)(struct sock *, struct sk_buff *);
58}; 57};
59 58
60static inline void nf_hook_state_init(struct nf_hook_state *p, 59static inline void nf_hook_state_init(struct nf_hook_state *p,
60 struct list_head *hook_list,
61 unsigned int hook, 61 unsigned int hook,
62 int thresh, u_int8_t pf, 62 int thresh, u_int8_t pf,
63 struct net_device *indev, 63 struct net_device *indev,
@@ -71,6 +71,7 @@ static inline void nf_hook_state_init(struct nf_hook_state *p,
71 p->in = indev; 71 p->in = indev;
72 p->out = outdev; 72 p->out = outdev;
73 p->sk = sk; 73 p->sk = sk;
74 p->hook_list = hook_list;
74 p->okfn = okfn; 75 p->okfn = okfn;
75} 76}
76 77
@@ -79,16 +80,17 @@ typedef unsigned int nf_hookfn(const struct nf_hook_ops *ops,
79 const struct nf_hook_state *state); 80 const struct nf_hook_state *state);
80 81
81struct nf_hook_ops { 82struct nf_hook_ops {
82 struct list_head list; 83 struct list_head list;
83 84
84 /* User fills in from here down. */ 85 /* User fills in from here down. */
85 nf_hookfn *hook; 86 nf_hookfn *hook;
86 struct module *owner; 87 struct net_device *dev;
87 void *priv; 88 struct module *owner;
88 u_int8_t pf; 89 void *priv;
89 unsigned int hooknum; 90 u_int8_t pf;
91 unsigned int hooknum;
90 /* Hooks are ordered in ascending priority. */ 92 /* Hooks are ordered in ascending priority. */
91 int priority; 93 int priority;
92}; 94};
93 95
94struct nf_sockopt_ops { 96struct nf_sockopt_ops {
@@ -131,26 +133,33 @@ extern struct list_head nf_hooks[NFPROTO_NUMPROTO][NF_MAX_HOOKS];
131#ifdef HAVE_JUMP_LABEL 133#ifdef HAVE_JUMP_LABEL
132extern struct static_key nf_hooks_needed[NFPROTO_NUMPROTO][NF_MAX_HOOKS]; 134extern struct static_key nf_hooks_needed[NFPROTO_NUMPROTO][NF_MAX_HOOKS];
133 135
134static inline bool nf_hooks_active(u_int8_t pf, unsigned int hook) 136static inline bool nf_hook_list_active(struct list_head *nf_hook_list,
137 u_int8_t pf, unsigned int hook)
135{ 138{
136 if (__builtin_constant_p(pf) && 139 if (__builtin_constant_p(pf) &&
137 __builtin_constant_p(hook)) 140 __builtin_constant_p(hook))
138 return static_key_false(&nf_hooks_needed[pf][hook]); 141 return static_key_false(&nf_hooks_needed[pf][hook]);
139 142
140 return !list_empty(&nf_hooks[pf][hook]); 143 return !list_empty(nf_hook_list);
141} 144}
142#else 145#else
143static inline bool nf_hooks_active(u_int8_t pf, unsigned int hook) 146static inline bool nf_hook_list_active(struct list_head *nf_hook_list,
147 u_int8_t pf, unsigned int hook)
144{ 148{
145 return !list_empty(&nf_hooks[pf][hook]); 149 return !list_empty(nf_hook_list);
146} 150}
147#endif 151#endif
148 152
153static inline bool nf_hooks_active(u_int8_t pf, unsigned int hook)
154{
155 return nf_hook_list_active(&nf_hooks[pf][hook], pf, hook);
156}
157
149int nf_hook_slow(struct sk_buff *skb, struct nf_hook_state *state); 158int nf_hook_slow(struct sk_buff *skb, struct nf_hook_state *state);
150 159
151/** 160/**
152 * nf_hook_thresh - call a netfilter hook 161 * nf_hook_thresh - call a netfilter hook
153 * 162 *
154 * Returns 1 if the hook has allowed the packet to pass. The function 163 * Returns 1 if the hook has allowed the packet to pass. The function
155 * okfn must be invoked by the caller in this case. Any other return 164 * okfn must be invoked by the caller in this case. Any other return
156 * value indicates the packet has been consumed by the hook. 165 * value indicates the packet has been consumed by the hook.
@@ -166,8 +175,8 @@ static inline int nf_hook_thresh(u_int8_t pf, unsigned int hook,
166 if (nf_hooks_active(pf, hook)) { 175 if (nf_hooks_active(pf, hook)) {
167 struct nf_hook_state state; 176 struct nf_hook_state state;
168 177
169 nf_hook_state_init(&state, hook, thresh, pf, 178 nf_hook_state_init(&state, &nf_hooks[pf][hook], hook, thresh,
170 indev, outdev, sk, okfn); 179 pf, indev, outdev, sk, okfn);
171 return nf_hook_slow(skb, &state); 180 return nf_hook_slow(skb, &state);
172 } 181 }
173 return 1; 182 return 1;
diff --git a/include/linux/netfilter/ipset/ip_set.h b/include/linux/netfilter/ipset/ip_set.h
index 34b172301558..48bb01edcf30 100644
--- a/include/linux/netfilter/ipset/ip_set.h
+++ b/include/linux/netfilter/ipset/ip_set.h
@@ -108,8 +108,13 @@ struct ip_set_counter {
108 atomic64_t packets; 108 atomic64_t packets;
109}; 109};
110 110
111struct ip_set_comment_rcu {
112 struct rcu_head rcu;
113 char str[0];
114};
115
111struct ip_set_comment { 116struct ip_set_comment {
112 char *str; 117 struct ip_set_comment_rcu __rcu *c;
113}; 118};
114 119
115struct ip_set_skbinfo { 120struct ip_set_skbinfo {
@@ -122,13 +127,13 @@ struct ip_set_skbinfo {
122struct ip_set; 127struct ip_set;
123 128
124#define ext_timeout(e, s) \ 129#define ext_timeout(e, s) \
125(unsigned long *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_TIMEOUT]) 130((unsigned long *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_TIMEOUT]))
126#define ext_counter(e, s) \ 131#define ext_counter(e, s) \
127(struct ip_set_counter *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_COUNTER]) 132((struct ip_set_counter *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_COUNTER]))
128#define ext_comment(e, s) \ 133#define ext_comment(e, s) \
129(struct ip_set_comment *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_COMMENT]) 134((struct ip_set_comment *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_COMMENT]))
130#define ext_skbinfo(e, s) \ 135#define ext_skbinfo(e, s) \
131(struct ip_set_skbinfo *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_SKBINFO]) 136((struct ip_set_skbinfo *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_SKBINFO]))
132 137
133typedef int (*ipset_adtfn)(struct ip_set *set, void *value, 138typedef int (*ipset_adtfn)(struct ip_set *set, void *value,
134 const struct ip_set_ext *ext, 139 const struct ip_set_ext *ext,
@@ -176,6 +181,9 @@ struct ip_set_type_variant {
176 /* List elements */ 181 /* List elements */
177 int (*list)(const struct ip_set *set, struct sk_buff *skb, 182 int (*list)(const struct ip_set *set, struct sk_buff *skb,
178 struct netlink_callback *cb); 183 struct netlink_callback *cb);
184 /* Keep listing private when resizing runs parallel */
185 void (*uref)(struct ip_set *set, struct netlink_callback *cb,
186 bool start);
179 187
180 /* Return true if "b" set is the same as "a" 188 /* Return true if "b" set is the same as "a"
181 * according to the create set parameters */ 189 * according to the create set parameters */
@@ -223,7 +231,7 @@ struct ip_set {
223 /* The name of the set */ 231 /* The name of the set */
224 char name[IPSET_MAXNAMELEN]; 232 char name[IPSET_MAXNAMELEN];
225 /* Lock protecting the set data */ 233 /* Lock protecting the set data */
226 rwlock_t lock; 234 spinlock_t lock;
227 /* References to the set */ 235 /* References to the set */
228 u32 ref; 236 u32 ref;
229 /* The core set type */ 237 /* The core set type */
@@ -341,12 +349,11 @@ ip_set_put_skbinfo(struct sk_buff *skb, struct ip_set_skbinfo *skbinfo)
341 cpu_to_be64((u64)skbinfo->skbmark << 32 | 349 cpu_to_be64((u64)skbinfo->skbmark << 32 |
342 skbinfo->skbmarkmask))) || 350 skbinfo->skbmarkmask))) ||
343 (skbinfo->skbprio && 351 (skbinfo->skbprio &&
344 nla_put_net32(skb, IPSET_ATTR_SKBPRIO, 352 nla_put_net32(skb, IPSET_ATTR_SKBPRIO,
345 cpu_to_be32(skbinfo->skbprio))) || 353 cpu_to_be32(skbinfo->skbprio))) ||
346 (skbinfo->skbqueue && 354 (skbinfo->skbqueue &&
347 nla_put_net16(skb, IPSET_ATTR_SKBQUEUE, 355 nla_put_net16(skb, IPSET_ATTR_SKBQUEUE,
348 cpu_to_be16(skbinfo->skbqueue))); 356 cpu_to_be16(skbinfo->skbqueue)));
349
350} 357}
351 358
352static inline void 359static inline void
@@ -380,12 +387,12 @@ ip_set_init_counter(struct ip_set_counter *counter,
380 387
381/* Netlink CB args */ 388/* Netlink CB args */
382enum { 389enum {
383 IPSET_CB_NET = 0, 390 IPSET_CB_NET = 0, /* net namespace */
384 IPSET_CB_DUMP, 391 IPSET_CB_DUMP, /* dump single set/all sets */
385 IPSET_CB_INDEX, 392 IPSET_CB_INDEX, /* set index */
386 IPSET_CB_ARG0, 393 IPSET_CB_PRIVATE, /* set private data */
394 IPSET_CB_ARG0, /* type specific */
387 IPSET_CB_ARG1, 395 IPSET_CB_ARG1,
388 IPSET_CB_ARG2,
389}; 396};
390 397
391/* register and unregister set references */ 398/* register and unregister set references */
@@ -533,29 +540,9 @@ bitmap_bytes(u32 a, u32 b)
533#include <linux/netfilter/ipset/ip_set_timeout.h> 540#include <linux/netfilter/ipset/ip_set_timeout.h>
534#include <linux/netfilter/ipset/ip_set_comment.h> 541#include <linux/netfilter/ipset/ip_set_comment.h>
535 542
536static inline int 543int
537ip_set_put_extensions(struct sk_buff *skb, const struct ip_set *set, 544ip_set_put_extensions(struct sk_buff *skb, const struct ip_set *set,
538 const void *e, bool active) 545 const void *e, bool active);
539{
540 if (SET_WITH_TIMEOUT(set)) {
541 unsigned long *timeout = ext_timeout(e, set);
542
543 if (nla_put_net32(skb, IPSET_ATTR_TIMEOUT,
544 htonl(active ? ip_set_timeout_get(timeout)
545 : *timeout)))
546 return -EMSGSIZE;
547 }
548 if (SET_WITH_COUNTER(set) &&
549 ip_set_put_counter(skb, ext_counter(e, set)))
550 return -EMSGSIZE;
551 if (SET_WITH_COMMENT(set) &&
552 ip_set_put_comment(skb, ext_comment(e, set)))
553 return -EMSGSIZE;
554 if (SET_WITH_SKBINFO(set) &&
555 ip_set_put_skbinfo(skb, ext_skbinfo(e, set)))
556 return -EMSGSIZE;
557 return 0;
558}
559 546
560#define IP_SET_INIT_KEXT(skb, opt, set) \ 547#define IP_SET_INIT_KEXT(skb, opt, set) \
561 { .bytes = (skb)->len, .packets = 1, \ 548 { .bytes = (skb)->len, .packets = 1, \
@@ -565,8 +552,6 @@ ip_set_put_extensions(struct sk_buff *skb, const struct ip_set *set,
565 { .bytes = ULLONG_MAX, .packets = ULLONG_MAX, \ 552 { .bytes = ULLONG_MAX, .packets = ULLONG_MAX, \
566 .timeout = (set)->timeout } 553 .timeout = (set)->timeout }
567 554
568#define IP_SET_INIT_CIDR(a, b) ((a) ? (a) : (b))
569
570#define IPSET_CONCAT(a, b) a##b 555#define IPSET_CONCAT(a, b) a##b
571#define IPSET_TOKEN(a, b) IPSET_CONCAT(a, b) 556#define IPSET_TOKEN(a, b) IPSET_CONCAT(a, b)
572 557
diff --git a/include/linux/netfilter/ipset/ip_set_comment.h b/include/linux/netfilter/ipset/ip_set_comment.h
index 21217ea008d7..8d0248525957 100644
--- a/include/linux/netfilter/ipset/ip_set_comment.h
+++ b/include/linux/netfilter/ipset/ip_set_comment.h
@@ -16,41 +16,57 @@ ip_set_comment_uget(struct nlattr *tb)
16 return nla_data(tb); 16 return nla_data(tb);
17} 17}
18 18
19/* Called from uadd only, protected by the set spinlock.
20 * The kadt functions don't use the comment extensions in any way.
21 */
19static inline void 22static inline void
20ip_set_init_comment(struct ip_set_comment *comment, 23ip_set_init_comment(struct ip_set_comment *comment,
21 const struct ip_set_ext *ext) 24 const struct ip_set_ext *ext)
22{ 25{
26 struct ip_set_comment_rcu *c = rcu_dereference_protected(comment->c, 1);
23 size_t len = ext->comment ? strlen(ext->comment) : 0; 27 size_t len = ext->comment ? strlen(ext->comment) : 0;
24 28
25 if (unlikely(comment->str)) { 29 if (unlikely(c)) {
26 kfree(comment->str); 30 kfree_rcu(c, rcu);
27 comment->str = NULL; 31 rcu_assign_pointer(comment->c, NULL);
28 } 32 }
29 if (!len) 33 if (!len)
30 return; 34 return;
31 if (unlikely(len > IPSET_MAX_COMMENT_SIZE)) 35 if (unlikely(len > IPSET_MAX_COMMENT_SIZE))
32 len = IPSET_MAX_COMMENT_SIZE; 36 len = IPSET_MAX_COMMENT_SIZE;
33 comment->str = kzalloc(len + 1, GFP_ATOMIC); 37 c = kzalloc(sizeof(*c) + len + 1, GFP_ATOMIC);
34 if (unlikely(!comment->str)) 38 if (unlikely(!c))
35 return; 39 return;
36 strlcpy(comment->str, ext->comment, len + 1); 40 strlcpy(c->str, ext->comment, len + 1);
41 rcu_assign_pointer(comment->c, c);
37} 42}
38 43
44/* Used only when dumping a set, protected by rcu_read_lock_bh() */
39static inline int 45static inline int
40ip_set_put_comment(struct sk_buff *skb, struct ip_set_comment *comment) 46ip_set_put_comment(struct sk_buff *skb, struct ip_set_comment *comment)
41{ 47{
42 if (!comment->str) 48 struct ip_set_comment_rcu *c = rcu_dereference_bh(comment->c);
49
50 if (!c)
43 return 0; 51 return 0;
44 return nla_put_string(skb, IPSET_ATTR_COMMENT, comment->str); 52 return nla_put_string(skb, IPSET_ATTR_COMMENT, c->str);
45} 53}
46 54
55/* Called from uadd/udel, flush or the garbage collectors protected
56 * by the set spinlock.
57 * Called when the set is destroyed and when there can't be any user
58 * of the set data anymore.
59 */
47static inline void 60static inline void
48ip_set_comment_free(struct ip_set_comment *comment) 61ip_set_comment_free(struct ip_set_comment *comment)
49{ 62{
50 if (unlikely(!comment->str)) 63 struct ip_set_comment_rcu *c;
64
65 c = rcu_dereference_protected(comment->c, 1);
66 if (unlikely(!c))
51 return; 67 return;
52 kfree(comment->str); 68 kfree_rcu(c, rcu);
53 comment->str = NULL; 69 rcu_assign_pointer(comment->c, NULL);
54} 70}
55 71
56#endif 72#endif
diff --git a/include/linux/netfilter/ipset/ip_set_timeout.h b/include/linux/netfilter/ipset/ip_set_timeout.h
index 83c2f9e0886c..1d6a935c1ac5 100644
--- a/include/linux/netfilter/ipset/ip_set_timeout.h
+++ b/include/linux/netfilter/ipset/ip_set_timeout.h
@@ -40,38 +40,33 @@ ip_set_timeout_uget(struct nlattr *tb)
40} 40}
41 41
42static inline bool 42static inline bool
43ip_set_timeout_test(unsigned long timeout) 43ip_set_timeout_expired(unsigned long *t)
44{ 44{
45 return timeout == IPSET_ELEM_PERMANENT || 45 return *t != IPSET_ELEM_PERMANENT && time_is_before_jiffies(*t);
46 time_is_after_jiffies(timeout);
47}
48
49static inline bool
50ip_set_timeout_expired(unsigned long *timeout)
51{
52 return *timeout != IPSET_ELEM_PERMANENT &&
53 time_is_before_jiffies(*timeout);
54} 46}
55 47
56static inline void 48static inline void
57ip_set_timeout_set(unsigned long *timeout, u32 t) 49ip_set_timeout_set(unsigned long *timeout, u32 value)
58{ 50{
59 if (!t) { 51 unsigned long t;
52
53 if (!value) {
60 *timeout = IPSET_ELEM_PERMANENT; 54 *timeout = IPSET_ELEM_PERMANENT;
61 return; 55 return;
62 } 56 }
63 57
64 *timeout = msecs_to_jiffies(t * 1000) + jiffies; 58 t = msecs_to_jiffies(value * MSEC_PER_SEC) + jiffies;
65 if (*timeout == IPSET_ELEM_PERMANENT) 59 if (t == IPSET_ELEM_PERMANENT)
66 /* Bingo! :-) */ 60 /* Bingo! :-) */
67 (*timeout)--; 61 t--;
62 *timeout = t;
68} 63}
69 64
70static inline u32 65static inline u32
71ip_set_timeout_get(unsigned long *timeout) 66ip_set_timeout_get(unsigned long *timeout)
72{ 67{
73 return *timeout == IPSET_ELEM_PERMANENT ? 0 : 68 return *timeout == IPSET_ELEM_PERMANENT ? 0 :
74 jiffies_to_msecs(*timeout - jiffies)/1000; 69 jiffies_to_msecs(*timeout - jiffies)/MSEC_PER_SEC;
75} 70}
76 71
77#endif /* __KERNEL__ */ 72#endif /* __KERNEL__ */
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h
index a3e215bb0241..286098a5667f 100644
--- a/include/linux/netfilter/x_tables.h
+++ b/include/linux/netfilter/x_tables.h
@@ -62,6 +62,7 @@ struct xt_mtchk_param {
62 void *matchinfo; 62 void *matchinfo;
63 unsigned int hook_mask; 63 unsigned int hook_mask;
64 u_int8_t family; 64 u_int8_t family;
65 bool nft_compat;
65}; 66};
66 67
67/** 68/**
@@ -92,6 +93,7 @@ struct xt_tgchk_param {
92 void *targinfo; 93 void *targinfo;
93 unsigned int hook_mask; 94 unsigned int hook_mask;
94 u_int8_t family; 95 u_int8_t family;
96 bool nft_compat;
95}; 97};
96 98
97/* Target destructor parameters */ 99/* Target destructor parameters */
@@ -222,13 +224,10 @@ struct xt_table_info {
222 unsigned int stacksize; 224 unsigned int stacksize;
223 unsigned int __percpu *stackptr; 225 unsigned int __percpu *stackptr;
224 void ***jumpstack; 226 void ***jumpstack;
225 /* ipt_entry tables: one per CPU */ 227
226 /* Note : this field MUST be the last one, see XT_TABLE_INFO_SZ */ 228 unsigned char entries[0] __aligned(8);
227 void *entries[1];
228}; 229};
229 230
230#define XT_TABLE_INFO_SZ (offsetof(struct xt_table_info, entries) \
231 + nr_cpu_ids * sizeof(char *))
232int xt_register_target(struct xt_target *target); 231int xt_register_target(struct xt_target *target);
233void xt_unregister_target(struct xt_target *target); 232void xt_unregister_target(struct xt_target *target);
234int xt_register_targets(struct xt_target *target, unsigned int n); 233int xt_register_targets(struct xt_target *target, unsigned int n);
@@ -351,6 +350,57 @@ static inline unsigned long ifname_compare_aligned(const char *_a,
351 return ret; 350 return ret;
352} 351}
353 352
353
354/* On SMP, ip(6)t_entry->counters.pcnt holds address of the
355 * real (percpu) counter. On !SMP, its just the packet count,
356 * so nothing needs to be done there.
357 *
358 * xt_percpu_counter_alloc returns the address of the percpu
359 * counter, or 0 on !SMP. We force an alignment of 16 bytes
360 * so that bytes/packets share a common cache line.
361 *
362 * Hence caller must use IS_ERR_VALUE to check for error, this
363 * allows us to return 0 for single core systems without forcing
364 * callers to deal with SMP vs. NONSMP issues.
365 */
366static inline u64 xt_percpu_counter_alloc(void)
367{
368 if (nr_cpu_ids > 1) {
369 void __percpu *res = __alloc_percpu(sizeof(struct xt_counters),
370 sizeof(struct xt_counters));
371
372 if (res == NULL)
373 return (u64) -ENOMEM;
374
375 return (u64) (__force unsigned long) res;
376 }
377
378 return 0;
379}
380static inline void xt_percpu_counter_free(u64 pcnt)
381{
382 if (nr_cpu_ids > 1)
383 free_percpu((void __percpu *) (unsigned long) pcnt);
384}
385
386static inline struct xt_counters *
387xt_get_this_cpu_counter(struct xt_counters *cnt)
388{
389 if (nr_cpu_ids > 1)
390 return this_cpu_ptr((void __percpu *) (unsigned long) cnt->pcnt);
391
392 return cnt;
393}
394
395static inline struct xt_counters *
396xt_get_per_cpu_counter(struct xt_counters *cnt, unsigned int cpu)
397{
398 if (nr_cpu_ids > 1)
399 return per_cpu_ptr((void __percpu *) (unsigned long) cnt->pcnt, cpu);
400
401 return cnt;
402}
403
354struct nf_hook_ops *xt_hook_link(const struct xt_table *, nf_hookfn *); 404struct nf_hook_ops *xt_hook_link(const struct xt_table *, nf_hookfn *);
355void xt_hook_unlink(const struct xt_table *, struct nf_hook_ops *); 405void xt_hook_unlink(const struct xt_table *, struct nf_hook_ops *);
356 406
diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h
index f2fdb5a52070..6d80fc686323 100644
--- a/include/linux/netfilter_bridge.h
+++ b/include/linux/netfilter_bridge.h
@@ -20,13 +20,6 @@ enum nf_br_hook_priorities {
20#define BRNF_BRIDGED_DNAT 0x02 20#define BRNF_BRIDGED_DNAT 0x02
21#define BRNF_NF_BRIDGE_PREROUTING 0x08 21#define BRNF_NF_BRIDGE_PREROUTING 0x08
22 22
23static inline unsigned int nf_bridge_mtu_reduction(const struct sk_buff *skb)
24{
25 if (skb->nf_bridge->orig_proto == BRNF_PROTO_PPPOE)
26 return PPPOE_SES_HLEN;
27 return 0;
28}
29
30int br_handle_frame_finish(struct sock *sk, struct sk_buff *skb); 23int br_handle_frame_finish(struct sock *sk, struct sk_buff *skb);
31 24
32static inline void br_drop_fake_rtable(struct sk_buff *skb) 25static inline void br_drop_fake_rtable(struct sk_buff *skb)
diff --git a/include/linux/netfilter_defs.h b/include/linux/netfilter_defs.h
new file mode 100644
index 000000000000..d3a7f8597e82
--- /dev/null
+++ b/include/linux/netfilter_defs.h
@@ -0,0 +1,9 @@
1#ifndef __LINUX_NETFILTER_CORE_H_
2#define __LINUX_NETFILTER_CORE_H_
3
4#include <uapi/linux/netfilter.h>
5
6/* Largest hook number + 1, see uapi/linux/netfilter_decnet.h */
7#define NF_MAX_HOOKS 8
8
9#endif
diff --git a/include/linux/netfilter_ingress.h b/include/linux/netfilter_ingress.h
new file mode 100644
index 000000000000..cb0727fe2b3d
--- /dev/null
+++ b/include/linux/netfilter_ingress.h
@@ -0,0 +1,41 @@
1#ifndef _NETFILTER_INGRESS_H_
2#define _NETFILTER_INGRESS_H_
3
4#include <linux/netfilter.h>
5#include <linux/netdevice.h>
6
7#ifdef CONFIG_NETFILTER_INGRESS
8static inline int nf_hook_ingress_active(struct sk_buff *skb)
9{
10 return nf_hook_list_active(&skb->dev->nf_hooks_ingress,
11 NFPROTO_NETDEV, NF_NETDEV_INGRESS);
12}
13
14static inline int nf_hook_ingress(struct sk_buff *skb)
15{
16 struct nf_hook_state state;
17
18 nf_hook_state_init(&state, &skb->dev->nf_hooks_ingress,
19 NF_NETDEV_INGRESS, INT_MIN, NFPROTO_NETDEV, NULL,
20 skb->dev, NULL, NULL);
21 return nf_hook_slow(skb, &state);
22}
23
24static inline void nf_hook_ingress_init(struct net_device *dev)
25{
26 INIT_LIST_HEAD(&dev->nf_hooks_ingress);
27}
28#else /* CONFIG_NETFILTER_INGRESS */
29static inline int nf_hook_ingress_active(struct sk_buff *skb)
30{
31 return 0;
32}
33
34static inline int nf_hook_ingress(struct sk_buff *skb)
35{
36 return 0;
37}
38
39static inline void nf_hook_ingress_init(struct net_device *dev) {}
40#endif /* CONFIG_NETFILTER_INGRESS */
41#endif /* _NETFILTER_INGRESS_H_ */
diff --git a/include/linux/netfilter_ipv6.h b/include/linux/netfilter_ipv6.h
index 64dad1cc1a4b..8b7d28f3aada 100644
--- a/include/linux/netfilter_ipv6.h
+++ b/include/linux/netfilter_ipv6.h
@@ -25,6 +25,9 @@ void ipv6_netfilter_fini(void);
25struct nf_ipv6_ops { 25struct nf_ipv6_ops {
26 int (*chk_addr)(struct net *net, const struct in6_addr *addr, 26 int (*chk_addr)(struct net *net, const struct in6_addr *addr,
27 const struct net_device *dev, int strict); 27 const struct net_device *dev, int strict);
28 void (*route_input)(struct sk_buff *skb);
29 int (*fragment)(struct sock *sk, struct sk_buff *skb,
30 int (*output)(struct sock *, struct sk_buff *));
28}; 31};
29 32
30extern const struct nf_ipv6_ops __rcu *nf_ipv6_ops; 33extern const struct nf_ipv6_ops __rcu *nf_ipv6_ops;
diff --git a/include/linux/netlink.h b/include/linux/netlink.h
index 6835c1279df7..9120edb650a0 100644
--- a/include/linux/netlink.h
+++ b/include/linux/netlink.h
@@ -28,6 +28,8 @@ struct netlink_skb_parms {
28 __u32 dst_group; 28 __u32 dst_group;
29 __u32 flags; 29 __u32 flags;
30 struct sock *sk; 30 struct sock *sk;
31 bool nsid_is_set;
32 int nsid;
31}; 33};
32 34
33#define NETLINK_CB(skb) (*(struct netlink_skb_parms*)&((skb)->cb)) 35#define NETLINK_CB(skb) (*(struct netlink_skb_parms*)&((skb)->cb))
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index cb63a7b522ef..fcff8f865341 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2330,6 +2330,8 @@
2330#define PCI_DEVICE_ID_ALTIMA_AC9100 0x03ea 2330#define PCI_DEVICE_ID_ALTIMA_AC9100 0x03ea
2331#define PCI_DEVICE_ID_ALTIMA_AC1003 0x03eb 2331#define PCI_DEVICE_ID_ALTIMA_AC1003 0x03eb
2332 2332
2333#define PCI_VENDOR_ID_CAVIUM 0x177d
2334
2333#define PCI_VENDOR_ID_BELKIN 0x1799 2335#define PCI_VENDOR_ID_BELKIN 0x1799
2334#define PCI_DEVICE_ID_BELKIN_F5D7010V7 0x701f 2336#define PCI_DEVICE_ID_BELKIN_F5D7010V7 0x701f
2335 2337
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 685809835b5c..a26c3f84b8dd 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -181,6 +181,9 @@ struct mii_bus {
181 /* PHY addresses to be ignored when probing */ 181 /* PHY addresses to be ignored when probing */
182 u32 phy_mask; 182 u32 phy_mask;
183 183
184 /* PHY addresses to ignore the TA/read failure */
185 u32 phy_ignore_ta_mask;
186
184 /* 187 /*
185 * Pointer to an array of interrupts, each PHY's 188 * Pointer to an array of interrupts, each PHY's
186 * interrupt at the index matching its address 189 * interrupt at the index matching its address
@@ -675,6 +678,17 @@ static inline bool phy_is_internal(struct phy_device *phydev)
675} 678}
676 679
677/** 680/**
681 * phy_interface_is_rgmii - Convenience function for testing if a PHY interface
682 * is RGMII (all variants)
683 * @phydev: the phy_device struct
684 */
685static inline bool phy_interface_is_rgmii(struct phy_device *phydev)
686{
687 return phydev->interface >= PHY_INTERFACE_MODE_RGMII &&
688 phydev->interface <= PHY_INTERFACE_MODE_RGMII_TXID;
689}
690
691/**
678 * phy_write_mmd - Convenience function for writing a register 692 * phy_write_mmd - Convenience function for writing a register
679 * on an MMD on a given PHY. 693 * on an MMD on a given PHY.
680 * @phydev: The phy_device struct 694 * @phydev: The phy_device struct
diff --git a/include/linux/platform_data/nfcmrvl.h b/include/linux/platform_data/nfcmrvl.h
new file mode 100644
index 000000000000..ac91707dabcb
--- /dev/null
+++ b/include/linux/platform_data/nfcmrvl.h
@@ -0,0 +1,40 @@
1/*
2 * Copyright (C) 2015, Marvell International Ltd.
3 *
4 * This software file (the "File") is distributed by Marvell International
5 * Ltd. under the terms of the GNU General Public License Version 2, June 1991
6 * (the "License"). You may use, redistribute and/or modify this File in
7 * accordance with the terms and conditions of the License, a copy of which
8 * is available on the worldwide web at
9 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
10 *
11 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
12 * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
13 * ARE EXPRESSLY DISCLAIMED. The License provides additional details about
14 * this warranty disclaimer.
15 */
16
17#ifndef _NFCMRVL_PTF_H_
18#define _NFCMRVL_PTF_H_
19
20struct nfcmrvl_platform_data {
21 /*
22 * Generic
23 */
24
25 /* GPIO that is wired to RESET_N signal */
26 unsigned int reset_n_io;
27 /* Tell if transport is muxed in HCI one */
28 unsigned int hci_muxed;
29
30 /*
31 * UART specific
32 */
33
34 /* Tell if UART needs flow control at init */
35 unsigned int flow_control;
36 /* Tell if firmware supports break control for power management */
37 unsigned int break_control;
38};
39
40#endif /* _NFCMRVL_PTF_H_ */
diff --git a/include/linux/platform_data/st21nfcb.h b/include/linux/platform_data/st-nci.h
index b023373d9874..d9d400a297bd 100644
--- a/include/linux/platform_data/st21nfcb.h
+++ b/include/linux/platform_data/st-nci.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * Driver include for the ST21NFCB NFC chip. 2 * Driver include for ST NCI NFC chip family.
3 * 3 *
4 * Copyright (C) 2014 STMicroelectronics SAS. All rights reserved. 4 * Copyright (C) 2014-2015 STMicroelectronics SAS. All rights reserved.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License, 7 * under the terms and conditions of the GNU General Public License,
@@ -16,14 +16,14 @@
16 * along with this program; if not, see <http://www.gnu.org/licenses/>. 16 * along with this program; if not, see <http://www.gnu.org/licenses/>.
17 */ 17 */
18 18
19#ifndef _ST21NFCB_NCI_H_ 19#ifndef _ST_NCI_H_
20#define _ST21NFCB_NCI_H_ 20#define _ST_NCI_H_
21 21
22#define ST21NFCB_NCI_DRIVER_NAME "st21nfcb_nci" 22#define ST_NCI_DRIVER_NAME "st_nci"
23 23
24struct st21nfcb_nfc_platform_data { 24struct st_nci_nfc_platform_data {
25 unsigned int gpio_reset; 25 unsigned int gpio_reset;
26 unsigned int irq_polarity; 26 unsigned int irq_polarity;
27}; 27};
28 28
29#endif /* _ST21NFCB_NCI_H_ */ 29#endif /* _ST_NCI_H_ */
diff --git a/include/linux/platform_data/st_nci.h b/include/linux/platform_data/st_nci.h
new file mode 100644
index 000000000000..d9d400a297bd
--- /dev/null
+++ b/include/linux/platform_data/st_nci.h
@@ -0,0 +1,29 @@
1/*
2 * Driver include for ST NCI NFC chip family.
3 *
4 * Copyright (C) 2014-2015 STMicroelectronics SAS. All rights reserved.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License,
8 * version 2, as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef _ST_NCI_H_
20#define _ST_NCI_H_
21
22#define ST_NCI_DRIVER_NAME "st_nci"
23
24struct st_nci_nfc_platform_data {
25 unsigned int gpio_reset;
26 unsigned int irq_polarity;
27};
28
29#endif /* _ST_NCI_H_ */
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index 7b8e260c4a27..39adaa9529eb 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -79,17 +79,9 @@ static inline struct netdev_queue *dev_ingress_queue(struct net_device *dev)
79 79
80struct netdev_queue *dev_ingress_queue_create(struct net_device *dev); 80struct netdev_queue *dev_ingress_queue_create(struct net_device *dev);
81 81
82#ifdef CONFIG_NET_CLS_ACT 82#ifdef CONFIG_NET_INGRESS
83void net_inc_ingress_queue(void); 83void net_inc_ingress_queue(void);
84void net_dec_ingress_queue(void); 84void net_dec_ingress_queue(void);
85#else
86static inline void net_inc_ingress_queue(void)
87{
88}
89
90static inline void net_dec_ingress_queue(void)
91{
92}
93#endif 85#endif
94 86
95extern void rtnetlink_init(void); 87extern void rtnetlink_init(void);
@@ -122,5 +114,9 @@ extern int ndo_dflt_fdb_del(struct ndmsg *ndm,
122 114
123extern int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq, 115extern int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
124 struct net_device *dev, u16 mode, 116 struct net_device *dev, u16 mode,
125 u32 flags, u32 mask, int nlflags); 117 u32 flags, u32 mask, int nlflags,
118 u32 filter_mask,
119 int (*vlan_fill)(struct sk_buff *skb,
120 struct net_device *dev,
121 u32 filter_mask));
126#endif /* __LINUX_RTNETLINK_H */ 122#endif /* __LINUX_RTNETLINK_H */
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index f15154a879c7..d6cdd6e87d53 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -34,7 +34,9 @@
34#include <linux/dma-mapping.h> 34#include <linux/dma-mapping.h>
35#include <linux/netdev_features.h> 35#include <linux/netdev_features.h>
36#include <linux/sched.h> 36#include <linux/sched.h>
37#include <net/flow_keys.h> 37#include <net/flow_dissector.h>
38#include <linux/splice.h>
39#include <linux/in6.h>
38 40
39/* A. Checksumming of received packets by device. 41/* A. Checksumming of received packets by device.
40 * 42 *
@@ -170,13 +172,19 @@ struct nf_bridge_info {
170 BRNF_PROTO_UNCHANGED, 172 BRNF_PROTO_UNCHANGED,
171 BRNF_PROTO_8021Q, 173 BRNF_PROTO_8021Q,
172 BRNF_PROTO_PPPOE 174 BRNF_PROTO_PPPOE
173 } orig_proto; 175 } orig_proto:8;
174 bool pkt_otherhost; 176 bool pkt_otherhost;
177 __u16 frag_max_size;
175 unsigned int mask; 178 unsigned int mask;
176 struct net_device *physindev; 179 struct net_device *physindev;
177 struct net_device *physoutdev; 180 union {
178 char neigh_header[8]; 181 struct net_device *physoutdev;
179 __be32 ipv4_daddr; 182 char neigh_header[8];
183 };
184 union {
185 __be32 ipv4_daddr;
186 struct in6_addr ipv6_daddr;
187 };
180}; 188};
181#endif 189#endif
182 190
@@ -859,6 +867,9 @@ int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,
859 int len, int odd, struct sk_buff *skb), 867 int len, int odd, struct sk_buff *skb),
860 void *from, int length); 868 void *from, int length);
861 869
870int skb_append_pagefrags(struct sk_buff *skb, struct page *page,
871 int offset, size_t size);
872
862struct skb_seq_state { 873struct skb_seq_state {
863 __u32 lower_offset; 874 __u32 lower_offset;
864 __u32 upper_offset; 875 __u32 upper_offset;
@@ -919,7 +930,6 @@ skb_set_hash(struct sk_buff *skb, __u32 hash, enum pkt_hash_types type)
919 skb->hash = hash; 930 skb->hash = hash;
920} 931}
921 932
922void __skb_get_hash(struct sk_buff *skb);
923static inline __u32 skb_get_hash(struct sk_buff *skb) 933static inline __u32 skb_get_hash(struct sk_buff *skb)
924{ 934{
925 if (!skb->l4_hash && !skb->sw_hash) 935 if (!skb->l4_hash && !skb->sw_hash)
@@ -928,6 +938,8 @@ static inline __u32 skb_get_hash(struct sk_buff *skb)
928 return skb->hash; 938 return skb->hash;
929} 939}
930 940
941__u32 skb_get_hash_perturb(const struct sk_buff *skb, u32 perturb);
942
931static inline __u32 skb_get_hash_raw(const struct sk_buff *skb) 943static inline __u32 skb_get_hash_raw(const struct sk_buff *skb)
932{ 944{
933 return skb->hash; 945 return skb->hash;
@@ -1935,8 +1947,8 @@ static inline void skb_probe_transport_header(struct sk_buff *skb,
1935 1947
1936 if (skb_transport_header_was_set(skb)) 1948 if (skb_transport_header_was_set(skb))
1937 return; 1949 return;
1938 else if (skb_flow_dissect(skb, &keys)) 1950 else if (skb_flow_dissect_flow_keys(skb, &keys))
1939 skb_set_transport_header(skb, keys.thoff); 1951 skb_set_transport_header(skb, keys.control.thoff);
1940 else 1952 else
1941 skb_set_transport_header(skb, offset_hint); 1953 skb_set_transport_header(skb, offset_hint);
1942} 1954}
@@ -2127,10 +2139,6 @@ static inline void __skb_queue_purge(struct sk_buff_head *list)
2127 kfree_skb(skb); 2139 kfree_skb(skb);
2128} 2140}
2129 2141
2130#define NETDEV_FRAG_PAGE_MAX_ORDER get_order(32768)
2131#define NETDEV_FRAG_PAGE_MAX_SIZE (PAGE_SIZE << NETDEV_FRAG_PAGE_MAX_ORDER)
2132#define NETDEV_PAGECNT_MAX_BIAS NETDEV_FRAG_PAGE_MAX_SIZE
2133
2134void *netdev_alloc_frag(unsigned int fragsz); 2142void *netdev_alloc_frag(unsigned int fragsz);
2135 2143
2136struct sk_buff *__netdev_alloc_skb(struct net_device *dev, unsigned int length, 2144struct sk_buff *__netdev_alloc_skb(struct net_device *dev, unsigned int length,
@@ -2185,6 +2193,11 @@ static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,
2185 return __netdev_alloc_skb_ip_align(dev, length, GFP_ATOMIC); 2193 return __netdev_alloc_skb_ip_align(dev, length, GFP_ATOMIC);
2186} 2194}
2187 2195
2196static inline void skb_free_frag(void *addr)
2197{
2198 __free_page_frag(addr);
2199}
2200
2188void *napi_alloc_frag(unsigned int fragsz); 2201void *napi_alloc_frag(unsigned int fragsz);
2189struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, 2202struct sk_buff *__napi_alloc_skb(struct napi_struct *napi,
2190 unsigned int length, gfp_t gfp_mask); 2203 unsigned int length, gfp_t gfp_mask);
@@ -2692,9 +2705,15 @@ int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len);
2692int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len); 2705int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len);
2693__wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to, 2706__wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to,
2694 int len, __wsum csum); 2707 int len, __wsum csum);
2695int skb_splice_bits(struct sk_buff *skb, unsigned int offset, 2708ssize_t skb_socket_splice(struct sock *sk,
2709 struct pipe_inode_info *pipe,
2710 struct splice_pipe_desc *spd);
2711int skb_splice_bits(struct sk_buff *skb, struct sock *sk, unsigned int offset,
2696 struct pipe_inode_info *pipe, unsigned int len, 2712 struct pipe_inode_info *pipe, unsigned int len,
2697 unsigned int flags); 2713 unsigned int flags,
2714 ssize_t (*splice_cb)(struct sock *,
2715 struct pipe_inode_info *,
2716 struct splice_pipe_desc *));
2698void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to); 2717void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to);
2699unsigned int skb_zerocopy_headlen(const struct sk_buff *from); 2718unsigned int skb_zerocopy_headlen(const struct sk_buff *from);
2700int skb_zerocopy(struct sk_buff *to, struct sk_buff *from, 2719int skb_zerocopy(struct sk_buff *to, struct sk_buff *from,
@@ -2729,8 +2748,9 @@ __wsum __skb_checksum(const struct sk_buff *skb, int offset, int len,
2729__wsum skb_checksum(const struct sk_buff *skb, int offset, int len, 2748__wsum skb_checksum(const struct sk_buff *skb, int offset, int len,
2730 __wsum csum); 2749 __wsum csum);
2731 2750
2732static inline void *__skb_header_pointer(const struct sk_buff *skb, int offset, 2751static inline void * __must_check
2733 int len, void *data, int hlen, void *buffer) 2752__skb_header_pointer(const struct sk_buff *skb, int offset,
2753 int len, void *data, int hlen, void *buffer)
2734{ 2754{
2735 if (hlen - offset >= len) 2755 if (hlen - offset >= len)
2736 return data + offset; 2756 return data + offset;
@@ -2742,8 +2762,8 @@ static inline void *__skb_header_pointer(const struct sk_buff *skb, int offset,
2742 return buffer; 2762 return buffer;
2743} 2763}
2744 2764
2745static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, 2765static inline void * __must_check
2746 int len, void *buffer) 2766skb_header_pointer(const struct sk_buff *skb, int offset, int len, void *buffer)
2747{ 2767{
2748 return __skb_header_pointer(skb, offset, len, skb->data, 2768 return __skb_header_pointer(skb, offset, len, skb->data,
2749 skb_headlen(skb), buffer); 2769 skb_headlen(skb), buffer);
@@ -3050,7 +3070,7 @@ static inline __sum16 __skb_checksum_validate_complete(struct sk_buff *skb,
3050 } 3070 }
3051 } else if (skb->csum_bad) { 3071 } else if (skb->csum_bad) {
3052 /* ip_summed == CHECKSUM_NONE in this case */ 3072 /* ip_summed == CHECKSUM_NONE in this case */
3053 return 1; 3073 return (__force __sum16)1;
3054 } 3074 }
3055 3075
3056 skb->csum = psum; 3076 skb->csum = psum;
@@ -3298,9 +3318,6 @@ static inline bool skb_rx_queue_recorded(const struct sk_buff *skb)
3298 return skb->queue_mapping != 0; 3318 return skb->queue_mapping != 0;
3299} 3319}
3300 3320
3301u16 __skb_tx_hash(const struct net_device *dev, struct sk_buff *skb,
3302 unsigned int num_tx_queues);
3303
3304static inline struct sec_path *skb_sec_path(struct sk_buff *skb) 3321static inline struct sec_path *skb_sec_path(struct sk_buff *skb)
3305{ 3322{
3306#ifdef CONFIG_XFRM 3323#ifdef CONFIG_XFRM
@@ -3355,15 +3372,14 @@ static inline int gso_pskb_expand_head(struct sk_buff *skb, int extra)
3355static inline __sum16 gso_make_checksum(struct sk_buff *skb, __wsum res) 3372static inline __sum16 gso_make_checksum(struct sk_buff *skb, __wsum res)
3356{ 3373{
3357 int plen = SKB_GSO_CB(skb)->csum_start - skb_headroom(skb) - 3374 int plen = SKB_GSO_CB(skb)->csum_start - skb_headroom(skb) -
3358 skb_transport_offset(skb); 3375 skb_transport_offset(skb);
3359 __u16 csum; 3376 __wsum partial;
3360 3377
3361 csum = csum_fold(csum_partial(skb_transport_header(skb), 3378 partial = csum_partial(skb_transport_header(skb), plen, skb->csum);
3362 plen, skb->csum));
3363 skb->csum = res; 3379 skb->csum = res;
3364 SKB_GSO_CB(skb)->csum_start -= plen; 3380 SKB_GSO_CB(skb)->csum_start -= plen;
3365 3381
3366 return csum; 3382 return csum_fold(partial);
3367} 3383}
3368 3384
3369static inline bool skb_is_gso(const struct sk_buff *skb) 3385static inline bool skb_is_gso(const struct sk_buff *skb)
@@ -3418,10 +3434,9 @@ static inline void skb_checksum_none_assert(const struct sk_buff *skb)
3418bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off); 3434bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off);
3419 3435
3420int skb_checksum_setup(struct sk_buff *skb, bool recalculate); 3436int skb_checksum_setup(struct sk_buff *skb, bool recalculate);
3421 3437struct sk_buff *skb_checksum_trimmed(struct sk_buff *skb,
3422u32 skb_get_poff(const struct sk_buff *skb); 3438 unsigned int transport_len,
3423u32 __skb_get_poff(const struct sk_buff *skb, void *data, 3439 __sum16(*skb_chkf)(struct sk_buff *skb));
3424 const struct flow_keys *keys, int hlen);
3425 3440
3426/** 3441/**
3427 * skb_head_is_locked - Determine if the skb->head is locked down 3442 * skb_head_is_locked - Determine if the skb->head is locked down
diff --git a/include/linux/sock_diag.h b/include/linux/sock_diag.h
index 083ac388098e..fddebc617469 100644
--- a/include/linux/sock_diag.h
+++ b/include/linux/sock_diag.h
@@ -1,7 +1,10 @@
1#ifndef __SOCK_DIAG_H__ 1#ifndef __SOCK_DIAG_H__
2#define __SOCK_DIAG_H__ 2#define __SOCK_DIAG_H__
3 3
4#include <linux/netlink.h>
4#include <linux/user_namespace.h> 5#include <linux/user_namespace.h>
6#include <net/net_namespace.h>
7#include <net/sock.h>
5#include <uapi/linux/sock_diag.h> 8#include <uapi/linux/sock_diag.h>
6 9
7struct sk_buff; 10struct sk_buff;
@@ -11,6 +14,7 @@ struct sock;
11struct sock_diag_handler { 14struct sock_diag_handler {
12 __u8 family; 15 __u8 family;
13 int (*dump)(struct sk_buff *skb, struct nlmsghdr *nlh); 16 int (*dump)(struct sk_buff *skb, struct nlmsghdr *nlh);
17 int (*get_info)(struct sk_buff *skb, struct sock *sk);
14}; 18};
15 19
16int sock_diag_register(const struct sock_diag_handler *h); 20int sock_diag_register(const struct sock_diag_handler *h);
@@ -26,4 +30,42 @@ int sock_diag_put_meminfo(struct sock *sk, struct sk_buff *skb, int attr);
26int sock_diag_put_filterinfo(bool may_report_filterinfo, struct sock *sk, 30int sock_diag_put_filterinfo(bool may_report_filterinfo, struct sock *sk,
27 struct sk_buff *skb, int attrtype); 31 struct sk_buff *skb, int attrtype);
28 32
33static inline
34enum sknetlink_groups sock_diag_destroy_group(const struct sock *sk)
35{
36 switch (sk->sk_family) {
37 case AF_INET:
38 switch (sk->sk_protocol) {
39 case IPPROTO_TCP:
40 return SKNLGRP_INET_TCP_DESTROY;
41 case IPPROTO_UDP:
42 return SKNLGRP_INET_UDP_DESTROY;
43 default:
44 return SKNLGRP_NONE;
45 }
46 case AF_INET6:
47 switch (sk->sk_protocol) {
48 case IPPROTO_TCP:
49 return SKNLGRP_INET6_TCP_DESTROY;
50 case IPPROTO_UDP:
51 return SKNLGRP_INET6_UDP_DESTROY;
52 default:
53 return SKNLGRP_NONE;
54 }
55 default:
56 return SKNLGRP_NONE;
57 }
58}
59
60static inline
61bool sock_diag_has_destroy_listeners(const struct sock *sk)
62{
63 const struct net *n = sock_net(sk);
64 const enum sknetlink_groups group = sock_diag_destroy_group(sk);
65
66 return group != SKNLGRP_NONE && n->diag_nlsk &&
67 netlink_has_listeners(n->diag_nlsk, group);
68}
69void sock_diag_broadcast_destroy(struct sock *sk);
70
29#endif 71#endif
diff --git a/include/linux/spi/cc2520.h b/include/linux/spi/cc2520.h
index e741e8baad92..85b8ee67e937 100644
--- a/include/linux/spi/cc2520.h
+++ b/include/linux/spi/cc2520.h
@@ -21,7 +21,6 @@ struct cc2520_platform_data {
21 int sfd; 21 int sfd;
22 int reset; 22 int reset;
23 int vreg; 23 int vreg;
24 bool amplified;
25}; 24};
26 25
27#endif 26#endif
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
index 7f484a239f53..c735f5c91eea 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -99,6 +99,7 @@ struct plat_stmmacenet_data {
99 int phy_addr; 99 int phy_addr;
100 int interface; 100 int interface;
101 struct stmmac_mdio_bus_data *mdio_bus_data; 101 struct stmmac_mdio_bus_data *mdio_bus_data;
102 struct device_node *phy_node;
102 struct stmmac_dma_cfg *dma_cfg; 103 struct stmmac_dma_cfg *dma_cfg;
103 int clk_csr; 104 int clk_csr;
104 int has_gmac; 105 int has_gmac;
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index e8bbf403618f..48c3696e8645 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -149,11 +149,16 @@ struct tcp_sock {
149 * sum(delta(rcv_nxt)), or how many bytes 149 * sum(delta(rcv_nxt)), or how many bytes
150 * were acked. 150 * were acked.
151 */ 151 */
152 u32 segs_in; /* RFC4898 tcpEStatsPerfSegsIn
153 * total number of segments in.
154 */
152 u32 rcv_nxt; /* What we want to receive next */ 155 u32 rcv_nxt; /* What we want to receive next */
153 u32 copied_seq; /* Head of yet unread data */ 156 u32 copied_seq; /* Head of yet unread data */
154 u32 rcv_wup; /* rcv_nxt on last window update sent */ 157 u32 rcv_wup; /* rcv_nxt on last window update sent */
155 u32 snd_nxt; /* Next sequence we send */ 158 u32 snd_nxt; /* Next sequence we send */
156 159 u32 segs_out; /* RFC4898 tcpEStatsPerfSegsOut
160 * The total number of segments sent.
161 */
157 u64 bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked 162 u64 bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked
158 * sum(delta(snd_una)), or how many bytes 163 * sum(delta(snd_una)), or how many bytes
159 * were acked. 164 * were acked.
@@ -201,6 +206,7 @@ struct tcp_sock {
201 syn_fastopen:1, /* SYN includes Fast Open option */ 206 syn_fastopen:1, /* SYN includes Fast Open option */
202 syn_fastopen_exp:1,/* SYN includes Fast Open exp. option */ 207 syn_fastopen_exp:1,/* SYN includes Fast Open exp. option */
203 syn_data_acked:1,/* data in SYN is acked by SYN-ACK */ 208 syn_data_acked:1,/* data in SYN is acked by SYN-ACK */
209 save_syn:1, /* Save headers of SYN packet */
204 is_cwnd_limited:1;/* forward progress limited by snd_cwnd? */ 210 is_cwnd_limited:1;/* forward progress limited by snd_cwnd? */
205 u32 tlp_high_seq; /* snd_nxt at the time of TLP retransmit. */ 211 u32 tlp_high_seq; /* snd_nxt at the time of TLP retransmit. */
206 212
@@ -328,6 +334,7 @@ struct tcp_sock {
328 * socket. Used to retransmit SYNACKs etc. 334 * socket. Used to retransmit SYNACKs etc.
329 */ 335 */
330 struct request_sock *fastopen_rsk; 336 struct request_sock *fastopen_rsk;
337 u32 *saved_syn;
331}; 338};
332 339
333enum tsq_flags { 340enum tsq_flags {
@@ -395,4 +402,10 @@ static inline int fastopen_init_queue(struct sock *sk, int backlog)
395 return 0; 402 return 0;
396} 403}
397 404
405static inline void tcp_saved_syn_free(struct tcp_sock *tp)
406{
407 kfree(tp->saved_syn);
408 tp->saved_syn = NULL;
409}
410
398#endif /* _LINUX_TCP_H */ 411#endif /* _LINUX_TCP_H */
diff --git a/include/linux/u64_stats_sync.h b/include/linux/u64_stats_sync.h
index 4b4439e75f45..df89c9bcba7d 100644
--- a/include/linux/u64_stats_sync.h
+++ b/include/linux/u64_stats_sync.h
@@ -68,11 +68,12 @@ struct u64_stats_sync {
68}; 68};
69 69
70 70
71static inline void u64_stats_init(struct u64_stats_sync *syncp)
72{
71#if BITS_PER_LONG == 32 && defined(CONFIG_SMP) 73#if BITS_PER_LONG == 32 && defined(CONFIG_SMP)
72# define u64_stats_init(syncp) seqcount_init(syncp.seq) 74 seqcount_init(&syncp->seq);
73#else
74# define u64_stats_init(syncp) do { } while (0)
75#endif 75#endif
76}
76 77
77static inline void u64_stats_update_begin(struct u64_stats_sync *syncp) 78static inline void u64_stats_update_begin(struct u64_stats_sync *syncp)
78{ 79{