1 dnl Checks for the in-box ib_core
2 AC_DEFUN([RDMA_CONFIG_COMPAT],
4 AC_MSG_CHECKING([if ib_verbs has ib_dma_map_single])
6 #include <linux/version.h>
9 #include <rdma/ib_verbs.h>
11 ib_dma_map_single(NULL, NULL, 0, 0);
15 AC_DEFINE(HAVE_INBOX_IB_DMA_MAP, 1,
16 [ib_dma_map_single defined])
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>
28 ib_create_cq(NULL, NULL, NULL, NULL, 0, 0);
32 AC_DEFINE(HAVE_INBOX_IB_COMP_VECTOR, 1,
33 [has completion vector])
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>
45 return (RDMA_CM_EVENT_ADDR_CHANGE == 0);
48 AC_DEFINE(HAVE_INBOX_RDMA_CMEV_ADDRCHANGE, 1,
49 [has completion vector])
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>
61 return (RDMA_CM_EVENT_TIMEWAIT_EXIT == 0);
64 AC_DEFINE(HAVE_INBOX_RDMA_CMEV_TIMEWAIT_EXIT, 1,
65 [has completion vector])
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>
77 rdma_set_reuseaddr(NULL, 1);
81 AC_DEFINE(HAVE_INBOX_RDMA_SET_REUSEADDR, 1,
82 [rdma_set_reuse defined])
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>
98 AC_DEFINE(HAVE_INBOX_IB_WC_TS, 1,
99 [ib_wc has member named ts])
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>
109 struct ib_ah_attr *ah_attr;
110 memset(ah_attr->dmac, 0, 6);
115 AC_DEFINE(HAVE_INBOX_IB_AH_ATTR_DMAC, 1,
116 [ah_attr has member named dmac])
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>
126 struct ib_ah_attr *ah_attr;
127 ah_attr->vlan_id = 0;
132 AC_DEFINE(HAVE_INBOX_IB_AH_ATTR_VLAN_ID, 1,
133 [ah_attr has member named vlan_id])
139 dnl Examine kernel functionality
140 AC_DEFUN([LINUX_CONFIG_COMPAT],
142 AC_MSG_CHECKING([if kernel has ktime_get_ns])
143 LB_LINUX_TRY_COMPILE([
144 #include <linux/ktime.h>
146 unsigned long long ns;
152 AC_DEFINE(HAVE_KTIME_GET_NS, 1,
153 [ktime_get_ns defined])
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>
163 struct svc_xprt_class svc_rdma_class = {
164 .xcl_ident = XPRT_TRANSPORT_RDMA,
169 AC_DEFINE(HAVE_XCL_IDENT, 1,
175 AC_MSG_CHECKING([if struct ifla_vf_info has max_tx_rate])
176 LB_LINUX_TRY_COMPILE([
177 #include <linux/if_link.h>
179 struct ifla_vf_info *ivf;
181 ivf->max_tx_rate = 0;
182 ivf->min_tx_rate = 0;
187 AC_DEFINE(HAVE_TX_RATE_LIMIT, 1,
188 [max_tx_rate is defined])
193 AC_MSG_CHECKING([if struct ethtool_ops has get/set_rxfh])
194 LB_LINUX_TRY_COMPILE([
195 #include <linux/ethtool.h>
197 const struct ethtool_ops en_ethtool_ops = {
198 .get_rxfh_indir_size = NULL,
206 AC_DEFINE(HAVE_GET_SET_RXFH, 1,
207 [get/set_rxfh is defined])
213 AC_MSG_CHECKING([if struct ethtool_ops has get/set_tunable])
214 LB_LINUX_TRY_COMPILE([
215 #include <linux/ethtool.h>
217 const struct ethtool_ops en_ethtool_ops = {
225 AC_DEFINE(HAVE_GET_SET_TUNABLE, 1,
226 [get/set_tunable is defined])
230 AC_MSG_CHECKING([if struct net_device has dev_port])
231 LB_LINUX_TRY_COMPILE([
232 #include <linux/netdevice.h>
234 struct net_device *dev;
241 AC_DEFINE(HAVE_NET_DEVICE_DEV_PORT, 1,
242 [dev_port is defined])
247 AC_MSG_CHECKING([if struct ptp_clock_info has n_pins])
248 LB_LINUX_TRY_COMPILE([
249 #include <linux/ptp_clock_kernel.h>
251 struct ptp_clock_info *info;
257 AC_DEFINE(HAVE_PTP_CLOCK_INFO_N_PINS, 1,
263 AC_MSG_CHECKING([if pci.h pci_enable_msi_exact])
264 LB_LINUX_TRY_COMPILE([
265 #include <linux/pci.h>
267 int x = pci_enable_msi_exact(NULL, 0);
272 AC_DEFINE(HAVE_PCI_ENABLE_MSI_EXACT, 1,
273 [pci_enable_msi_exact is defined])
278 AC_MSG_CHECKING([if pci.h pci_enable_msix_range])
279 LB_LINUX_TRY_COMPILE([
280 #include <linux/pci.h>
282 int x = pci_enable_msix_range(NULL, 0, 0, 0);
287 AC_DEFINE(HAVE_PCI_ENABLE_MSIX_RANGE, 1,
288 [pci_enable_msix_range is defined])
293 AC_MSG_CHECKING([if struct iscsi_transport has check_protection])
294 LB_LINUX_TRY_COMPILE([
295 #include <scsi/scsi_transport_iscsi.h>
297 static struct iscsi_transport iscsi_iser_transport = {
298 .check_protection = NULL,
304 AC_DEFINE(HAVE_ISCSI_CHECK_PROTECTION, 1,
305 [check_protection is defined])
310 AC_MSG_CHECKING([if netdevice.h has select_queue_fallback_t])
311 LB_LINUX_TRY_COMPILE([
312 #include <linux/netdevice.h>
314 select_queue_fallback_t fallback;
319 AC_DEFINE(HAVE_SELECT_QUEUE_FALLBACK_T, 1,
320 [select_queue_fallback_t is defined])
325 AC_MSG_CHECKING([if skbuff.h has skb_set_hash])
326 LB_LINUX_TRY_COMPILE([
327 #include <linux/netdevice.h>
329 skb_set_hash(NULL, 0, PKT_HASH_TYPE_L3);
334 AC_DEFINE(HAVE_SKB_SET_HASH, 1,
335 [skb_set_hash is defined])
340 AC_MSG_CHECKING([if sockios.h has SIOCGHWTSTAMP])
341 LB_LINUX_TRY_COMPILE([
342 #include <linux/sockios.h>
344 int x = SIOCGHWTSTAMP;
349 AC_DEFINE(HAVE_SIOCGHWTSTAMP, 1,
350 [SIOCGHWTSTAMP is defined])
355 AC_MSG_CHECKING([if ip.h inet_get_local_port_range has 3 parameters])
356 LB_LINUX_TRY_COMPILE([
359 inet_get_local_port_range(NULL, NULL, NULL);
364 AC_DEFINE(HAVE_INET_GET_LOCAL_PORT_RANGE_3_PARAMS, 1,
365 [inet_get_local_port_range has 3 parameters])
370 AC_MSG_CHECKING([if net.h has net_get_random_once])
371 LB_LINUX_TRY_COMPILE([
372 #include <linux/net.h>
374 net_get_random_once(NULL, 0);
379 AC_DEFINE(HAVE_NET_GET_RANDOM_ONCE, 1,
380 [net_get_random_once is defined])
385 AC_MSG_CHECKING([if inet_sock.h has __inet_ehashfn])
386 LB_LINUX_TRY_COMPILE([
387 #include <net/inet_sock.h>
389 __inet_ehashfn(0, 0, 0, 0, 0);
394 AC_DEFINE(HAVE_INET_EHASHFN, 1,
395 [__inet_ehashfn is defined])
400 AC_MSG_CHECKING([if err.h has PTR_ERR_OR_ZERO])
401 LB_LINUX_TRY_COMPILE([
402 #include <linux/err.h>
404 int x = PTR_ERR_OR_ZERO(NULL);
409 AC_DEFINE(HAVE_PTR_ERR_OR_ZERO, 1,
410 [PTR_ERR_OR_ZERO is defined])
415 AC_MSG_CHECKING([if struct iscsi_session has discovery_sess])
416 LB_LINUX_TRY_COMPILE([
417 #include <scsi/libiscsi.h>
419 struct iscsi_session session;
420 session.discovery_sess = 0;
425 AC_DEFINE(HAVE_ISCSI_DISCOVERY_SESS, 1,
426 [discovery_sess is defined])
431 AC_MSG_CHECKING([if enum iscsi_param has ISCSI_PARAM_DISCOVERY_SESS])
432 LB_LINUX_TRY_COMPILE([
433 #include <scsi/iscsi_if.h>
435 int x = ISCSI_PARAM_DISCOVERY_SESS;
440 AC_DEFINE(HAVE_ISCSI_PARAM_DISCOVERY_SESS, 1,
441 [ISCSI_PARAM_DISCOVERY_SESS is defined])
446 AC_MSG_CHECKING([if pci.h has enum pcie_link_width])
447 LB_LINUX_TRY_COMPILE([
448 #include <linux/pci.h>
450 enum pcie_link_width width = PCIE_LNK_WIDTH_UNKNOWN;
455 AC_DEFINE(HAVE_PCIE_LINK_WIDTH, 1,
456 [pcie_link_width is defined])
461 AC_MSG_CHECKING([if pci.h has enum pci_bus_speed])
462 LB_LINUX_TRY_COMPILE([
463 #include <linux/pci.h>
465 enum pci_bus_speed speed = PCI_SPEED_UNKNOWN;
470 AC_DEFINE(HAVE_PCI_BUS_SPEED, 1,
471 [pci_bus_speed is defined])
476 AC_MSG_CHECKING([if netdevice.h has struct netdev_phys_port_id])
477 LB_LINUX_TRY_COMPILE([
478 #include <linux/netdevice.h>
480 struct netdev_phys_port_id x;
485 AC_DEFINE(HAVE_NETDEV_PHYS_PORT_ID, 1,
486 [netdev_phys_port_id is defined])
491 AC_MSG_CHECKING([if struct ifla_vf_info has linkstate])
492 LB_LINUX_TRY_COMPILE([
493 #include <linux/if_link.h>
495 struct struct ifla_vf_info x;
501 AC_DEFINE(HAVE_LINKSTATE, 1,
502 [linkstate is defined])
507 AC_MSG_CHECKING([if busy_poll.h has skb_mark_napi_id])
508 LB_LINUX_TRY_COMPILE([
509 #include <net/busy_poll.h>
511 skb_mark_napi_id(NULL, NULL);
516 AC_DEFINE(HAVE_SKB_MARK_NAPI_ID, 1,
517 [skb_mark_napi_id is defined])
522 AC_MSG_CHECKING([if netdevice.h has napi_hash_add])
523 LB_LINUX_TRY_COMPILE([
524 #include <linux/netdevice.h>
531 AC_DEFINE(HAVE_NAPI_HASH_ADD, 1,
532 [napi_hash_add is defined])
537 AC_MSG_CHECKING([if netdevice.h has netif_keep_dst])
538 LB_LINUX_TRY_COMPILE([
539 #include <linux/netdevice.h>
541 netif_keep_dst(NULL);
546 AC_DEFINE(HAVE_NETIF_KEEP_DST, 1,
547 [netif_keep_dst is defined])
552 AC_MSG_CHECKING([if mm.h has kvfree])
553 LB_LINUX_TRY_COMPILE([
554 #include <linux/mm.h>
561 AC_DEFINE(HAVE_KVFREE, 1,
567 AC_MSG_CHECKING([if netdevice.h has dev_consume_skb_any])
568 LB_LINUX_TRY_COMPILE([
569 #include <linux/netdevice.h>
571 dev_consume_skb_any(NULL);
576 AC_DEFINE(HAVE_DEV_CONSUME_SKB_ANY, 1,
577 [dev_consume_skb_any is defined])
582 AC_MSG_CHECKING([if netdevice.h has netdev_txq_bql_complete_prefetchw])
583 LB_LINUX_TRY_COMPILE([
584 #include <linux/netdevice.h>
586 netdev_txq_bql_complete_prefetchw(NULL);
587 netdev_txq_bql_enqueue_prefetchw(NULL);
592 AC_DEFINE(HAVE_NETDEV_TXQ_BQL_PREFETCHW, 1,
593 [netdev_txq_bql_complete_prefetchw is defined])
598 AC_MSG_CHECKING([if struct sk_buff has xmit_more])
599 LB_LINUX_TRY_COMPILE([
600 #include <linux/skbuff.h>
608 AC_DEFINE(HAVE_SK_BUFF_XMIT_MORE, 1,
609 [xmit_more is defined])
614 AC_MSG_CHECKING([if etherdevice.h has eth_get_headlen])
615 LB_LINUX_TRY_COMPILE([
616 #include <linux/etherdevice.h>
618 eth_get_headlen(NULL, 0);
623 AC_DEFINE(HAVE_ETH_GET_HEADLEN, 1,
624 [eth_get_headlen is defined])
629 AC_MSG_CHECKING([if struct sk_buff has csum_level])
630 LB_LINUX_TRY_COMPILE([
631 #include <linux/skbuff.h>
639 AC_DEFINE(HAVE_SK_BUFF_CSUM_LEVEL, 1,
640 [csum_level is defined])
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>
649 vlan_dev_get_egress_qos_mask(NULL, 0);
654 AC_DEFINE(HAVE_VLAN_DEV_GET_EGRESS_QOS_MASK, 1,
655 [vlan_dev_get_egress_qos_mask is defined])
660 AC_MSG_CHECKING([if netdevice.h has netdev_get_prio_tc_map])
661 LB_LINUX_TRY_COMPILE([
662 #include <linux/netdevice.h>
664 netdev_get_prio_tc_map(NULL, 0);
669 AC_DEFINE(HAVE_NETDEV_GET_PRIO_TC_MAP, 1,
670 [netdev_get_prio_tc_map is defined])
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>
679 __vlan_find_dev_deep_rcu(NULL, 0, 0);
684 AC_DEFINE(HAVE___VLAN_FIND_DEV_DEEP_RCU, 1,
685 [__vlan_find_dev_deep_rcu is defined])
692 # COMPAT_CONFIG_HEADERS
694 # add -include config.h
696 AC_DEFUN([COMPAT_CONFIG_HEADERS],[
697 AC_CONFIG_HEADERS([config.h])
698 EXTRA_KCFLAGS="-include $PWD/config.h $EXTRA_KCFLAGS"
699 AC_SUBST(EXTRA_KCFLAGS)
702 AC_DEFUN([OFA_PROG_LINUX],
707 LB_LINUX_CONFIG([MODULES],[],[
708 AC_MSG_ERROR([module support is required to build mlnx kernel modules.])
710 LB_LINUX_CONFIG([MODVERSIONS])
711 LB_LINUX_CONFIG([KALLSYMS],[],[
712 AC_MSG_ERROR([compat_mlnx requires that CONFIG_KALLSYMS is enabled in your kernel.])
716 COMPAT_CONFIG_HEADERS