Adding defines for backporting be2net
[~tnikolova/compat/.git] / config / rdma.m4
1 dnl Checks for the in-box ib_core
2 AC_DEFUN([RDMA_CONFIG_COMPAT],
3 [
4         AC_MSG_CHECKING([if ib_verbs has ib_dma_map_single])
5         LB_LINUX_TRY_COMPILE([
6                 #include <linux/version.h>
7                 #include <linux/pci.h>
8                 #include <linux/gfp.h>
9                 #include <rdma/ib_verbs.h>
10         ],[
11                 ib_dma_map_single(NULL, NULL, 0, 0);
12                 return 0;
13         ],[
14                 AC_MSG_RESULT(yes)
15                 AC_DEFINE(HAVE_INBOX_IB_DMA_MAP, 1,
16                           [ib_dma_map_single defined])
17         ],[
18                 AC_MSG_RESULT(no)
19         ])
20
21         AC_MSG_CHECKING([if ib_create_cq wants comp_vector])
22         LB_LINUX_TRY_COMPILE([
23                 #include <linux/version.h>
24                 #include <linux/pci.h>
25                 #include <linux/gfp.h>
26                 #include <rdma/ib_verbs.h>
27         ],[
28                 ib_create_cq(NULL, NULL, NULL, NULL, 0, 0);
29                 return 0;
30         ],[
31                 AC_MSG_RESULT(yes)
32                 AC_DEFINE(HAVE_INBOX_IB_COMP_VECTOR, 1,
33                           [has completion vector])
34         ],[
35                 AC_MSG_RESULT(no)
36         ])
37
38         AC_MSG_CHECKING([if rdma_cm has RDMA_CM_EVENT_ADDR_CHANGE])
39         LB_LINUX_TRY_COMPILE([
40                 #include <linux/version.h>
41                 #include <linux/pci.h>
42                 #include <linux/gfp.h>
43                 #include <rdma/rdma_cm.h>
44         ],[
45                 return (RDMA_CM_EVENT_ADDR_CHANGE == 0);
46         ],[
47                 AC_MSG_RESULT(yes)
48                 AC_DEFINE(HAVE_INBOX_RDMA_CMEV_ADDRCHANGE, 1,
49                           [has completion vector])
50         ],[
51                 AC_MSG_RESULT(no)
52         ])
53
54         AC_MSG_CHECKING([if rdma_cm has RDMA_CM_EVENT_TIMEWAIT_EXIT])
55         LB_LINUX_TRY_COMPILE([
56                 #include <linux/version.h>
57                 #include <linux/pci.h>
58                 #include <linux/gfp.h>
59                 #include <rdma/rdma_cm.h>
60         ],[
61                 return (RDMA_CM_EVENT_TIMEWAIT_EXIT == 0);
62         ],[
63                 AC_MSG_RESULT(yes)
64                 AC_DEFINE(HAVE_INBOX_RDMA_CMEV_TIMEWAIT_EXIT, 1,
65                           [has completion vector])
66         ],[
67                 AC_MSG_RESULT(no)
68         ])
69
70         AC_MSG_CHECKING([if rdma_cm has rdma_set_reuseaddr])
71         LB_LINUX_TRY_COMPILE([
72                 #include <linux/version.h>
73                 #include <linux/pci.h>
74                 #include <linux/gfp.h>
75                 #include <rdma/rdma_cm.h>
76         ],[
77                 rdma_set_reuseaddr(NULL, 1);
78                 return 0;
79         ],[
80                 AC_MSG_RESULT(yes)
81                 AC_DEFINE(HAVE_INBOX_RDMA_SET_REUSEADDR, 1,
82                           [rdma_set_reuse defined])
83         ],[
84                 AC_MSG_RESULT(no)
85         ])
86
87         AC_MSG_CHECKING([if struct ib_wc has member named ts])
88         LB_LINUX_TRY_COMPILE([
89                 #include <linux/version.h>
90                 #include <rdma/ib_verbs.h>
91         ],[
92         struct ib_wc wc;
93         wc->ts.timestamp = 0;
94
95                 return 0;
96         ],[
97                 AC_MSG_RESULT(yes)
98                 AC_DEFINE(HAVE_INBOX_IB_WC_TS, 1,
99                           [ib_wc has member named ts])
100         ],[
101                 AC_MSG_RESULT(no)
102         ])
103
104         AC_MSG_CHECKING([if struct ib_ah_attr has member named dmac])
105         LB_LINUX_TRY_COMPILE([
106                 #include <linux/version.h>
107                 #include <rdma/ib_verbs.h>
108         ],[
109         struct ib_ah_attr *ah_attr;
110         memset(ah_attr->dmac, 0, 6);
111
112                 return 0;
113         ],[
114                 AC_MSG_RESULT(yes)
115                 AC_DEFINE(HAVE_INBOX_IB_AH_ATTR_DMAC, 1,
116                           [ah_attr has member named dmac])
117         ],[
118                 AC_MSG_RESULT(no)
119         ])
120
121         AC_MSG_CHECKING([if struct ib_ah_attr has member named vlan_id])
122         LB_LINUX_TRY_COMPILE([
123                 #include <linux/version.h>
124                 #include <rdma/ib_verbs.h>
125         ],[
126         struct ib_ah_attr *ah_attr;
127         ah_attr->vlan_id = 0;
128
129                 return 0;
130         ],[
131                 AC_MSG_RESULT(yes)
132                 AC_DEFINE(HAVE_INBOX_IB_AH_ATTR_VLAN_ID, 1,
133                           [ah_attr has member named vlan_id])
134         ],[
135                 AC_MSG_RESULT(no)
136         ])
137 ])
138
139 dnl Examine kernel functionality
140 AC_DEFUN([LINUX_CONFIG_COMPAT],
141 [
142         AC_MSG_CHECKING([if kernel has ktime_get_ns])
143         LB_LINUX_TRY_COMPILE([
144                 #include <linux/ktime.h>
145         ],[
146                 unsigned long long ns;
147
148                 ns = ktime_get_ns();
149                 return 0;
150         ],[
151                 AC_MSG_RESULT(yes)
152                 AC_DEFINE(HAVE_KTIME_GET_NS, 1,
153                           [ktime_get_ns defined])
154         ],[
155                 AC_MSG_RESULT(no)
156         ])
157
158         AC_MSG_CHECKING([if svc_xprt_class has xcl_ident])
159         LB_LINUX_TRY_COMPILE([
160                 #include <linux/sunrpc/xprt.h>
161                 #include <linux/sunrpc/svc_xprt.h>
162         ],[
163                 struct svc_xprt_class svc_rdma_class = {
164                         .xcl_ident = XPRT_TRANSPORT_RDMA,
165                 };
166                 return 0;
167         ],[
168                 AC_MSG_RESULT(yes)
169                 AC_DEFINE(HAVE_XCL_IDENT, 1,
170                           [xcl_ident defined])
171         ],[
172                 AC_MSG_RESULT(no)
173         ])
174
175         AC_MSG_CHECKING([if struct ifla_vf_info has max_tx_rate])
176         LB_LINUX_TRY_COMPILE([
177                 #include <linux/if_link.h>
178         ],[
179                 struct ifla_vf_info *ivf;
180
181                 ivf->max_tx_rate = 0;
182                 ivf->min_tx_rate = 0;
183
184                 return 0;
185         ],[
186                 AC_MSG_RESULT(yes)
187                 AC_DEFINE(HAVE_TX_RATE_LIMIT, 1,
188                           [max_tx_rate is defined])
189         ],[
190                 AC_MSG_RESULT(no)
191         ])
192
193         AC_MSG_CHECKING([if struct ethtool_ops has get/set_rxfh])
194         LB_LINUX_TRY_COMPILE([
195                 #include <linux/ethtool.h>
196         ],[
197                 const struct ethtool_ops en_ethtool_ops = {
198                         .get_rxfh_indir_size = NULL,
199                         .get_rxfh = NULL,
200                         .set_rxfh = NULL,
201                 };
202
203                 return 0;
204         ],[
205                 AC_MSG_RESULT(yes)
206                 AC_DEFINE(HAVE_GET_SET_RXFH, 1,
207                           [get/set_rxfh is defined])
208         ],[
209                 AC_MSG_RESULT(no)
210         ])
211
212
213         AC_MSG_CHECKING([if struct ethtool_ops has get/set_tunable])
214         LB_LINUX_TRY_COMPILE([
215                 #include <linux/ethtool.h>
216         ],[
217                 const struct ethtool_ops en_ethtool_ops = {
218                         .get_tunable = NULL,
219                         .set_tunable = NULL,
220                 };
221
222                 return 0;
223         ],[
224                 AC_MSG_RESULT(yes)
225                 AC_DEFINE(HAVE_GET_SET_TUNABLE, 1,
226                           [get/set_tunable is defined])
227         ],[
228                 AC_MSG_RESULT(no)
229         ])
230         AC_MSG_CHECKING([if struct net_device has dev_port])
231         LB_LINUX_TRY_COMPILE([
232                 #include <linux/netdevice.h>
233         ],[
234                 struct net_device *dev;
235
236                 dev->dev_port = 0;
237
238                 return 0;
239         ],[
240                 AC_MSG_RESULT(yes)
241                 AC_DEFINE(HAVE_NET_DEVICE_DEV_PORT, 1,
242                           [dev_port is defined])
243         ],[
244                 AC_MSG_RESULT(no)
245         ])
246
247         AC_MSG_CHECKING([if struct ptp_clock_info has n_pins])
248         LB_LINUX_TRY_COMPILE([
249                 #include <linux/ptp_clock_kernel.h>
250         ],[
251                 struct ptp_clock_info *info;
252                 info->n_pins = 0;
253
254                 return 0;
255         ],[
256                 AC_MSG_RESULT(yes)
257                 AC_DEFINE(HAVE_PTP_CLOCK_INFO_N_PINS, 1,
258                           [n_pins is defined])
259         ],[
260                 AC_MSG_RESULT(no)
261         ])
262
263         AC_MSG_CHECKING([if pci.h pci_enable_msi_exact])
264         LB_LINUX_TRY_COMPILE([
265                 #include <linux/pci.h>
266         ],[
267                 int x = pci_enable_msi_exact(NULL, 0);
268
269                 return 0;
270         ],[
271                 AC_MSG_RESULT(yes)
272                 AC_DEFINE(HAVE_PCI_ENABLE_MSI_EXACT, 1,
273                           [pci_enable_msi_exact is defined])
274         ],[
275                 AC_MSG_RESULT(no)
276         ])
277
278         AC_MSG_CHECKING([if pci.h pci_enable_msix_range])
279         LB_LINUX_TRY_COMPILE([
280                 #include <linux/pci.h>
281         ],[
282                 int x = pci_enable_msix_range(NULL, 0, 0, 0);
283
284                 return 0;
285         ],[
286                 AC_MSG_RESULT(yes)
287                 AC_DEFINE(HAVE_PCI_ENABLE_MSIX_RANGE, 1,
288                           [pci_enable_msix_range is defined])
289         ],[
290                 AC_MSG_RESULT(no)
291         ])
292
293         AC_MSG_CHECKING([if struct iscsi_transport has check_protection])
294         LB_LINUX_TRY_COMPILE([
295                 #include <scsi/scsi_transport_iscsi.h>
296         ],[
297                 static struct iscsi_transport iscsi_iser_transport = {
298                         .check_protection = NULL,
299                 };
300
301                 return 0;
302         ],[
303                 AC_MSG_RESULT(yes)
304                 AC_DEFINE(HAVE_ISCSI_CHECK_PROTECTION, 1,
305                           [check_protection is defined])
306         ],[
307                 AC_MSG_RESULT(no)
308         ])
309
310         AC_MSG_CHECKING([if netdevice.h has select_queue_fallback_t])
311         LB_LINUX_TRY_COMPILE([
312                 #include <linux/netdevice.h>
313         ],[
314                 select_queue_fallback_t fallback;
315
316                 return 0;
317         ],[
318                 AC_MSG_RESULT(yes)
319                 AC_DEFINE(HAVE_SELECT_QUEUE_FALLBACK_T, 1,
320                           [select_queue_fallback_t is defined])
321         ],[
322                 AC_MSG_RESULT(no)
323         ])
324
325         AC_MSG_CHECKING([if skbuff.h has skb_set_hash])
326         LB_LINUX_TRY_COMPILE([
327                 #include <linux/netdevice.h>
328         ],[
329                 skb_set_hash(NULL, 0, PKT_HASH_TYPE_L3);
330
331                 return 0;
332         ],[
333                 AC_MSG_RESULT(yes)
334                 AC_DEFINE(HAVE_SKB_SET_HASH, 1,
335                           [skb_set_hash is defined])
336         ],[
337                 AC_MSG_RESULT(no)
338         ])
339
340         AC_MSG_CHECKING([if sockios.h has SIOCGHWTSTAMP])
341         LB_LINUX_TRY_COMPILE([
342                 #include <linux/sockios.h>
343         ],[
344                 int x = SIOCGHWTSTAMP;
345
346                 return 0;
347         ],[
348                 AC_MSG_RESULT(yes)
349                 AC_DEFINE(HAVE_SIOCGHWTSTAMP, 1,
350                           [SIOCGHWTSTAMP is defined])
351         ],[
352                 AC_MSG_RESULT(no)
353         ])
354
355         AC_MSG_CHECKING([if ip.h inet_get_local_port_range has 3 parameters])
356         LB_LINUX_TRY_COMPILE([
357                 #include <net/ip.h>
358         ],[
359                 inet_get_local_port_range(NULL, NULL, NULL);
360
361                 return 0;
362         ],[
363                 AC_MSG_RESULT(yes)
364                 AC_DEFINE(HAVE_INET_GET_LOCAL_PORT_RANGE_3_PARAMS, 1,
365                           [inet_get_local_port_range has 3 parameters])
366         ],[
367                 AC_MSG_RESULT(no)
368         ])
369
370         AC_MSG_CHECKING([if net.h has net_get_random_once])
371         LB_LINUX_TRY_COMPILE([
372                 #include <linux/net.h>
373         ],[
374                 net_get_random_once(NULL, 0);
375
376                 return 0;
377         ],[
378                 AC_MSG_RESULT(yes)
379                 AC_DEFINE(HAVE_NET_GET_RANDOM_ONCE, 1,
380                           [net_get_random_once is defined])
381         ],[
382                 AC_MSG_RESULT(no)
383         ])
384
385         AC_MSG_CHECKING([if inet_sock.h has __inet_ehashfn])
386         LB_LINUX_TRY_COMPILE([
387                 #include <net/inet_sock.h>
388         ],[
389                 __inet_ehashfn(0, 0, 0, 0, 0);
390
391                 return 0;
392         ],[
393                 AC_MSG_RESULT(yes)
394                 AC_DEFINE(HAVE_INET_EHASHFN, 1,
395                           [__inet_ehashfn is defined])
396         ],[
397                 AC_MSG_RESULT(no)
398         ])
399
400         AC_MSG_CHECKING([if err.h has PTR_ERR_OR_ZERO])
401         LB_LINUX_TRY_COMPILE([
402                 #include <linux/err.h>
403         ],[
404                 int x = PTR_ERR_OR_ZERO(NULL);
405
406                 return 0;
407         ],[
408                 AC_MSG_RESULT(yes)
409                 AC_DEFINE(HAVE_PTR_ERR_OR_ZERO, 1,
410                           [PTR_ERR_OR_ZERO is defined])
411         ],[
412                 AC_MSG_RESULT(no)
413         ])
414
415         AC_MSG_CHECKING([if struct iscsi_session has discovery_sess])
416         LB_LINUX_TRY_COMPILE([
417                 #include <scsi/libiscsi.h>
418         ],[
419                 struct iscsi_session session;
420                 session.discovery_sess = 0;
421
422                 return 0;
423         ],[
424                 AC_MSG_RESULT(yes)
425                 AC_DEFINE(HAVE_ISCSI_DISCOVERY_SESS, 1,
426                           [discovery_sess is defined])
427         ],[
428                 AC_MSG_RESULT(no)
429         ])
430
431         AC_MSG_CHECKING([if enum iscsi_param has ISCSI_PARAM_DISCOVERY_SESS])
432         LB_LINUX_TRY_COMPILE([
433                 #include <scsi/iscsi_if.h>
434         ],[
435                 int x = ISCSI_PARAM_DISCOVERY_SESS;
436
437                 return 0;
438         ],[
439                 AC_MSG_RESULT(yes)
440                 AC_DEFINE(HAVE_ISCSI_PARAM_DISCOVERY_SESS, 1,
441                           [ISCSI_PARAM_DISCOVERY_SESS is defined])
442         ],[
443                 AC_MSG_RESULT(no)
444         ])
445
446         AC_MSG_CHECKING([if pci.h has enum pcie_link_width])
447         LB_LINUX_TRY_COMPILE([
448                 #include <linux/pci.h>
449         ],[
450                 enum pcie_link_width width = PCIE_LNK_WIDTH_UNKNOWN;
451
452                 return 0;
453         ],[
454                 AC_MSG_RESULT(yes)
455                 AC_DEFINE(HAVE_PCIE_LINK_WIDTH, 1,
456                           [pcie_link_width is defined])
457         ],[
458                 AC_MSG_RESULT(no)
459         ])
460
461         AC_MSG_CHECKING([if pci.h has enum pci_bus_speed])
462         LB_LINUX_TRY_COMPILE([
463                 #include <linux/pci.h>
464         ],[
465                 enum pci_bus_speed speed = PCI_SPEED_UNKNOWN;
466
467                 return 0;
468         ],[
469                 AC_MSG_RESULT(yes)
470                 AC_DEFINE(HAVE_PCI_BUS_SPEED, 1,
471                           [pci_bus_speed is defined])
472         ],[
473                 AC_MSG_RESULT(no)
474         ])
475
476         AC_MSG_CHECKING([if netdevice.h has struct netdev_phys_port_id])
477         LB_LINUX_TRY_COMPILE([
478                 #include <linux/netdevice.h>
479         ],[
480                 struct netdev_phys_port_id x;
481
482                 return 0;
483         ],[
484                 AC_MSG_RESULT(yes)
485                 AC_DEFINE(HAVE_NETDEV_PHYS_PORT_ID, 1,
486                           [netdev_phys_port_id is defined])
487         ],[
488                 AC_MSG_RESULT(no)
489         ])
490
491         AC_MSG_CHECKING([if struct ifla_vf_info has linkstate])
492         LB_LINUX_TRY_COMPILE([
493                 #include <linux/if_link.h>
494         ],[
495                 struct struct ifla_vf_info x;
496                 x->linkstate = 0;
497
498                 return 0;
499         ],[
500                 AC_MSG_RESULT(yes)
501                 AC_DEFINE(HAVE_LINKSTATE, 1,
502                           [linkstate is defined])
503         ],[
504                 AC_MSG_RESULT(no)
505         ])
506
507         AC_MSG_CHECKING([if busy_poll.h has skb_mark_napi_id])
508         LB_LINUX_TRY_COMPILE([
509                 #include <net/busy_poll.h>
510         ],[
511                 skb_mark_napi_id(NULL, NULL);
512
513                 return 0;
514         ],[
515                 AC_MSG_RESULT(yes)
516                 AC_DEFINE(HAVE_SKB_MARK_NAPI_ID, 1,
517                           [skb_mark_napi_id is defined])
518         ],[
519                 AC_MSG_RESULT(no)
520         ])
521
522         AC_MSG_CHECKING([if netdevice.h has napi_hash_add])
523         LB_LINUX_TRY_COMPILE([
524                 #include <linux/netdevice.h>
525         ],[
526                 napi_hash_add(NULL);
527
528                 return 0;
529         ],[
530                 AC_MSG_RESULT(yes)
531                 AC_DEFINE(HAVE_NAPI_HASH_ADD, 1,
532                           [napi_hash_add is defined])
533         ],[
534                 AC_MSG_RESULT(no)
535         ])
536
537         AC_MSG_CHECKING([if netdevice.h has netif_keep_dst])
538         LB_LINUX_TRY_COMPILE([
539                 #include <linux/netdevice.h>
540         ],[
541                 netif_keep_dst(NULL);
542
543                 return 0;
544         ],[
545                 AC_MSG_RESULT(yes)
546                 AC_DEFINE(HAVE_NETIF_KEEP_DST, 1,
547                           [netif_keep_dst is defined])
548         ],[
549                 AC_MSG_RESULT(no)
550         ])
551
552         AC_MSG_CHECKING([if mm.h has kvfree])
553         LB_LINUX_TRY_COMPILE([
554                 #include <linux/mm.h>
555         ],[
556                 kvfree(NULL);
557
558                 return 0;
559         ],[
560                 AC_MSG_RESULT(yes)
561                 AC_DEFINE(HAVE_KVFREE, 1,
562                           [kvfree is defined])
563         ],[
564                 AC_MSG_RESULT(no)
565         ])
566
567         AC_MSG_CHECKING([if netdevice.h has dev_consume_skb_any])
568         LB_LINUX_TRY_COMPILE([
569                 #include <linux/netdevice.h>
570         ],[
571                 dev_consume_skb_any(NULL);
572
573                 return 0;
574         ],[
575                 AC_MSG_RESULT(yes)
576                 AC_DEFINE(HAVE_DEV_CONSUME_SKB_ANY, 1,
577                           [dev_consume_skb_any is defined])
578         ],[
579                 AC_MSG_RESULT(no)
580         ])
581
582         AC_MSG_CHECKING([if netdevice.h has netdev_txq_bql_complete_prefetchw])
583         LB_LINUX_TRY_COMPILE([
584                 #include <linux/netdevice.h>
585         ],[
586                 netdev_txq_bql_complete_prefetchw(NULL);
587                 netdev_txq_bql_enqueue_prefetchw(NULL);
588
589                 return 0;
590         ],[
591                 AC_MSG_RESULT(yes)
592                 AC_DEFINE(HAVE_NETDEV_TXQ_BQL_PREFETCHW, 1,
593                           [netdev_txq_bql_complete_prefetchw is defined])
594         ],[
595                 AC_MSG_RESULT(no)
596         ])
597
598         AC_MSG_CHECKING([if struct sk_buff has xmit_more])
599         LB_LINUX_TRY_COMPILE([
600                 #include <linux/skbuff.h>
601         ],[
602                 struct sk_buff *skb;
603                 skb->xmit_more = 0;
604
605                 return 0;
606         ],[
607                 AC_MSG_RESULT(yes)
608                 AC_DEFINE(HAVE_SK_BUFF_XMIT_MORE, 1,
609                           [xmit_more is defined])
610         ],[
611                 AC_MSG_RESULT(no)
612         ])
613
614         AC_MSG_CHECKING([if etherdevice.h has eth_get_headlen])
615         LB_LINUX_TRY_COMPILE([
616                 #include <linux/etherdevice.h>
617         ],[
618                 eth_get_headlen(NULL, 0);
619
620                 return 0;
621         ],[
622                 AC_MSG_RESULT(yes)
623                 AC_DEFINE(HAVE_ETH_GET_HEADLEN, 1,
624                           [eth_get_headlen is defined])
625         ],[
626                 AC_MSG_RESULT(no)
627         ])
628
629         AC_MSG_CHECKING([if struct sk_buff has csum_level])
630         LB_LINUX_TRY_COMPILE([
631                 #include <linux/skbuff.h>
632         ],[
633                 struct sk_buff *skb;
634                 skb->csum_level = 0;
635
636                 return 0;
637         ],[
638                 AC_MSG_RESULT(yes)
639                 AC_DEFINE(HAVE_SK_BUFF_CSUM_LEVEL, 1,
640                           [csum_level is defined])
641         ],[
642                 AC_MSG_RESULT(no)
643         ])
644
645         AC_MSG_CHECKING([if if_vlan.h has vlan_dev_get_egress_qos_mask])
646         LB_LINUX_TRY_COMPILE([
647                 #include <linux/if_vlan.h>
648         ],[
649                 vlan_dev_get_egress_qos_mask(NULL, 0);
650
651                 return 0;
652         ],[
653                 AC_MSG_RESULT(yes)
654                 AC_DEFINE(HAVE_VLAN_DEV_GET_EGRESS_QOS_MASK, 1,
655                           [vlan_dev_get_egress_qos_mask is defined])
656         ],[
657                 AC_MSG_RESULT(no)
658         ])
659
660         AC_MSG_CHECKING([if netdevice.h has netdev_get_prio_tc_map])
661         LB_LINUX_TRY_COMPILE([
662                 #include <linux/netdevice.h>
663         ],[
664                 netdev_get_prio_tc_map(NULL, 0);
665
666                 return 0;
667         ],[
668                 AC_MSG_RESULT(yes)
669                 AC_DEFINE(HAVE_NETDEV_GET_PRIO_TC_MAP, 1,
670                           [netdev_get_prio_tc_map is defined])
671         ],[
672                 AC_MSG_RESULT(no)
673         ])
674
675         AC_MSG_CHECKING([if if_vlan.h has __vlan_find_dev_deep_rcu])
676         LB_LINUX_TRY_COMPILE([
677                 #include <linux/if_vlan.h>
678         ],[
679                 __vlan_find_dev_deep_rcu(NULL, 0, 0);
680
681                 return 0;
682         ],[
683                 AC_MSG_RESULT(yes)
684                 AC_DEFINE(HAVE___VLAN_FIND_DEV_DEEP_RCU, 1,
685                           [__vlan_find_dev_deep_rcu is defined])
686         ],[
687                 AC_MSG_RESULT(no)
688         ])
689
690         AC_MSG_CHECKING([if ndo_select_queue has accel_priv])
691         LB_LINUX_TRY_COMPILE([
692                 #include <linux/netdevice.h>
693         ],[
694                 struct net_device_opts ndops;
695
696                 static u16 select_queue(struct net_device *dev, struct sk_buff *skb,
697                                         void *accel_priv)
698                 {
699                         return 0;
700                 }
701
702                 ndoops.ndo_select_queue = select_queue;
703
704                 return 0;
705         ],[
706                 AC_MSG_RESULT(yes)
707                 AC_DEFINE(NDO_SELECT_QUEUE_HAS_ACCEL_PRIV, 1,
708                           [ndo_select_queue has accel_priv])
709         ],[
710                 AC_MSG_RESULT(no)
711         ])
712
713         AC_MSG_CHECKING([if drivers/net/bonding/bonding.h exists])
714         LB_LINUX_TRY_COMPILE([
715                 #include "../drivers/net/bonding/bonding.h"
716         ],[
717                 return 0;
718         ],[
719                 AC_MSG_RESULT(yes)
720                 AC_DEFINE(HAVE_BONDING_H, 1,
721                           [drivers/net/bonding/bonding.h exists])
722         ],[
723                 AC_MSG_RESULT(no)
724         ])
725
726         AC_MSG_CHECKING([if bonding.h bond_for_each_slave has 3 parameters])
727         LB_LINUX_TRY_COMPILE([
728                 #include "../drivers/net/bonding/bonding.h"
729         ],[
730                 struct bonding *bond = NULL;
731                 struct list_head *iter = NULL;
732                 struct slave *slave = NULL;
733
734                 bond_for_each_slave(bond, slave, iter) ;
735
736                 return 0;
737         ],[
738                 AC_MSG_RESULT(yes)
739                 AC_DEFINE(HAVE_BOND_FOR_EACH_SLAVE_3_PARAMS, 1,
740                           [bond_for_each_slave has 3 parameters])
741         ],[
742                 AC_MSG_RESULT(no)
743         ])
744
745
746         AC_MSG_CHECKING([if u64_stats_sync.h has u64_stats_init])
747         LB_LINUX_TRY_COMPILE([
748                 #include <linux/u64_stats_sync.h>
749         ],[
750                 struct u64_stats_sync sync;
751                 u64_stats_init(&sync);
752                 };
753
754                 return 0;
755         ],[
756                 AC_MSG_RESULT(yes)
757                 AC_DEFINE(HAVE_U64_STATS_SYNC, 1,
758                           [u64_stats_sync is defined])
759         ],[
760                 AC_MSG_RESULT(no)
761         ])
762
763         AC_MSG_CHECKING([if u64_stats_sync.h has u64_stats_fetch_begin_irq])
764         LB_LINUX_TRY_COMPILE([
765                 #include <linux/u64_stats_sync.h>
766         ],[
767                 struct u64_stats_sync sync;
768                 u64_stats_fetch_begin_irq(&sync);
769                 };
770
771                 return 0;
772         ],[
773                 AC_MSG_RESULT(yes)
774                 AC_DEFINE(HAVE_U64_STATS_FETCH_BEGIN_IRQ, 1,
775                           [u64_stats_fetch_begin_irq is defined])
776         ],[
777                 AC_MSG_RESULT(no)
778         ])
779         AC_MSG_CHECKING([if etherdevice.h has ether_addr_copy])
780         LB_LINUX_TRY_COMPILE([
781                 #include <linux/etherdevice.h>
782         ],[
783                 char dest[6], src[6];
784                         ether_addr_copy(&dest, &src);
785
786                 };
787
788                 return 0;
789         ],[
790                 AC_MSG_RESULT(yes)
791                 AC_DEFINE(HAVE_ETHER_ADDR_COPY, 1,
792                           [ether_addr_copy is defined])
793         ],[
794                 AC_MSG_RESULT(no)
795         ])
796
797         AC_MSG_CHECKING([if struct net_device_ops has *ndo_set_vf_rate])
798         LB_LINUX_TRY_COMPILE([
799                 #include <linux/netdevice.h>
800         ],[
801                 struct net_device_ops netdev_ops;
802                 int set_vf_rate(struct net_device *dev, int vf, int min_tx_rate,
803                                                    int max_tx_rate)
804                 {
805                         return 0;
806                 }
807                 netdev_ops.ndo_set_vf_rate = set_vf_rate;
808                 return 0;
809         ],[
810                 AC_MSG_RESULT(yes)
811                 AC_DEFINE(HAVE_SET_VF_RATE, 1,
812                           [ndo_set_vf_rate is defined])
813         ],[
814                 AC_MSG_RESULT(no)
815         ])
816
817         AC_MSG_CHECKING([if struct net_device has priv_flags])
818         LB_LINUX_TRY_COMPILE([
819                 #include <linux/netdevice.h>
820         ],[
821                 struct net_device *netdev;
822                 netdev->priv_flags = 0;
823
824                 return 0;
825         ],[
826                 AC_MSG_RESULT(yes)
827                 AC_DEFINE(HAVE_NET_DEVICE_PRIV_FLAGS, 1,
828                           [priv_flags is defined])
829         ],[
830                 AC_MSG_RESULT(no)
831         ])
832
833         AC_MSG_CHECKING([if struct net_device_ops has *ndo_get_stats64])
834         LB_LINUX_TRY_COMPILE([
835                 #include <linux/netdevice.h>
836         ],[
837                 struct net_device_ops netdev_ops;
838                 struct rtnl_link_stats64* get_stats_64(struct net_device *dev,
839                                                      struct rtnl_link_stats64 *storage)
840                 {
841                         struct rtnl_link_stats64 stats_64;
842                         return &stats_64;
843                 }
844
845                 netdev_ops.ndo_get_stats64 = get_stats_64;
846
847                 return 0;
848         ],[
849                 AC_MSG_RESULT(yes)
850                 AC_DEFINE(HAVE_NDO_GET_STATS64, 1,
851                           [ndo_get_stats64 is defined])
852         ],[
853                 AC_MSG_RESULT(no)
854         ])
855         AC_MSG_CHECKING([if struct net_device_ops has ndo_bridge_set/getlink])
856         LB_LINUX_TRY_COMPILE([
857                 #include <linux/netdevice.h>
858         ],[
859                 struct net_device_ops netdev_ops =  {
860                         .ndo_bridge_setlink = NULL,
861                         .ndo_bridge_getlink = NULL,
862                 };
863
864                 return 0;
865         ],[
866                 AC_MSG_RESULT(yes)
867                 AC_DEFINE(HAVE_NDO_BRIDGE_SET_GET_LINK, 1,
868                           [ndo_bridge_set/getlink is defined])
869         ],[
870                 AC_MSG_RESULT(no)
871         ])
872
873         AC_MSG_CHECKING([if struct net_device_ops ndo_vlan_rx_add_vid has 3 parameters ])
874         LB_LINUX_TRY_COMPILE([
875                 #include <linux/netdevice.h>
876         ],[
877                 struct net_device_ops netdev_ops;
878                 int vlan_rx_add_vid(struct net_device *dev,__be16 proto, u16 vid)
879                 {
880                         return 0;
881                 }
882                 netdev_ops.ndo_vlan_rx_add_vid = vlan_rx_add_vid;
883
884                 return 0;
885         ],[
886                 AC_MSG_RESULT(yes)
887                 AC_DEFINE(HAVE_NDO_RX_ADD_VID_HAS_3_PARAMS, 1,
888                           [ndo_vlan_rx_add_vid has 3 parameters])
889         ],[
890                 AC_MSG_RESULT(no)
891         ])
892
893         AC_MSG_CHECKING([if netdevice.h netif_set_real_num_tx_queues returns int])
894         LB_LINUX_TRY_COMPILE([
895                 #include <linux/netdevice.h>
896         ],[
897                 struct net_device dev;
898                 int ret;
899                 ret = netif_set_real_num_tx_queues(&dev, 2);
900                 return 0;
901         ],[
902                 AC_MSG_RESULT(yes)
903                 AC_DEFINE(HAVE_RETURN_INT_FOR_SET_NUM_TX_QUEUES, 1,
904                           [netif_set_real_num_tx_queues returns int])
905         ],[
906                 AC_MSG_RESULT(no)
907         ])
908
909         AC_MSG_CHECKING([if struct ethtool_ops has set_phys_id])
910         LB_LINUX_TRY_COMPILE([
911                 #include <linux/ethtool.h>
912         ],[
913                 const struct ethtool_ops en_ethtool_ops = {
914                         .set_phys_id= NULL,
915                 };
916
917                 return 0;
918         ],[
919                 AC_MSG_RESULT(yes)
920                 AC_DEFINE(HAVE_SET_PHYS_ID, 1,
921                           [set_phys_id is defined])
922         ],[
923                 AC_MSG_RESULT(no)
924         ])
925
926         AC_MSG_CHECKING([if struct ethtool_ops has get/set_channels])
927         LB_LINUX_TRY_COMPILE([
928                 #include <linux/ethtool.h>
929         ],[
930                 const struct ethtool_ops en_ethtool_ops = {
931                         .get_channels = NULL,
932                         .set_channels = NULL,
933                 };
934
935                 return 0;
936         ],[
937                 AC_MSG_RESULT(yes)
938                 AC_DEFINE(HAVE_GET_SET_CHANNELS, 1,
939                           [get/set_channels is defined])
940         ],[
941                 AC_MSG_RESULT(no)
942         ])
943
944         AC_MSG_CHECKING([if netdevice.h has struct netdev_hw_addr])
945         LB_LINUX_TRY_COMPILE([
946                 #include <linux/netdevice.h>
947         ],[
948                 struct netdev_hw_addr addr;
949                 return 0;
950         ],[
951                 AC_MSG_RESULT(yes)
952                 AC_DEFINE(HAVE_NETDEV_HW_ADDR, 1,
953                           [netdev_hw_addr is defined])
954         ],[
955                 AC_MSG_RESULT(no)
956         ])
957
958         AC_MSG_CHECKING([if pci.h has pci_vfs_assigned])
959         LB_LINUX_TRY_COMPILE([
960                 #include <linux/pci.h>
961         ],[
962                 struct pci_dev pdev;
963                 pci_vfs_assigned(&pdev);
964                 return 0;
965         ],[
966                 AC_MSG_RESULT(yes)
967                 AC_DEFINE(HAVE_PCI_VF_ASSIGNED, 1,
968                           [pci_vfs_assigned is defined])
969         ],[
970                 AC_MSG_RESULT(no)
971         ])
972         AC_MSG_CHECKING([if __vlan_put_tag has 3 parameters])
973         LB_LINUX_TRY_COMPILE([
974                 #include <linux/if_vlan.h>
975         ],[
976                 struct sk_buff *skb;
977                 __vlan_put_tag(skb, 0, 0);
978
979                 return 0;
980         ],[
981                 AC_MSG_RESULT(yes)
982                 AC_DEFINE(HAVE_3_PARAMS_FOR_VLAN_PUT_TAG, 1,
983                           [__vlan_put_tag has 3 parameters])
984         ],[
985                 AC_MSG_RESULT(no)
986         ])
987
988         AC_MSG_CHECKING([if __vlan_hwaccel_put_tag has 3 parameters])
989         LB_LINUX_TRY_COMPILE([
990                 #include <linux/if_vlan.h>
991         ],[
992                 struct sk_buff *skb;
993                 __vlan_hwaccel_put_tag(skb, 0, 0);
994
995                 return 0;
996         ],[
997                 AC_MSG_RESULT(yes)
998                 AC_DEFINE(HAVE_3_PARAMS_FOR_VLAN_HWACCEL_PUT_TAG, 1,
999                           [__vlan_hwaccel_put_tag has 3 parameters])
1000         ],[
1001                 AC_MSG_RESULT(no)
1002         ])
1003
1004         AC_MSG_CHECKING([if struct net_device has hw_features])
1005         LB_LINUX_TRY_COMPILE([
1006                 #include <linux/netdevice.h>
1007         ],[
1008                 struct net_device dev;
1009                 dev.hw_features = 0;
1010
1011                 return 0;
1012         ],[
1013                 AC_MSG_RESULT(yes)
1014                 AC_DEFINE(HAVE_NETDEV_HW_FEATURES, 1,
1015                           [hw_features is defined])
1016         ],[
1017                 AC_MSG_RESULT(no)
1018         ])
1019
1020         AC_MSG_CHECKING([if if_vlan.h has vlan_hwaccel_receive_skb])
1021         LB_LINUX_TRY_COMPILE([
1022                 #include <linux/if_vlan.h>
1023         ],[
1024                 struct sk_buff *skb;
1025                 vlan_hwaccel_receive_skb(skb,0,0);
1026                 return 0;
1027         ],[
1028                 AC_MSG_RESULT(yes)
1029                 AC_DEFINE(HAVE_VLAN_HWACCEL_RECEIVE_SKB, 1,
1030                           [vlan_hwaccel_receive_skb is defined])
1031         ],[
1032                 AC_MSG_RESULT(no)
1033         ])
1034
1035
1036 ])
1037 #
1038 # COMPAT_CONFIG_HEADERS
1039 #
1040 # add -include config.h
1041 #
1042 AC_DEFUN([COMPAT_CONFIG_HEADERS],[
1043         AC_CONFIG_HEADERS([config.h])
1044         EXTRA_KCFLAGS="-include $PWD/config.h $EXTRA_KCFLAGS"
1045         AC_SUBST(EXTRA_KCFLAGS)
1046 ])
1047
1048 AC_DEFUN([OFA_PROG_LINUX],
1049 [
1050
1051 LB_LINUX_PATH
1052 LB_LINUX_SYMVERFILE
1053 LB_LINUX_CONFIG([MODULES],[],[
1054     AC_MSG_ERROR([module support is required to build mlnx kernel modules.])
1055 ])
1056 LB_LINUX_CONFIG([MODVERSIONS])
1057 LB_LINUX_CONFIG([KALLSYMS],[],[
1058     AC_MSG_ERROR([compat_mlnx requires that CONFIG_KALLSYMS is enabled in your kernel.])
1059 ])
1060
1061 LINUX_CONFIG_COMPAT
1062 COMPAT_CONFIG_HEADERS
1063
1064 ])