2 * Copyright (c) 2012-2015 Solarflare Communications Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
24 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 * The views and conclusions contained in the software and documentation are
27 * those of the authors and should not be interpreted as representing official
28 * policies, either expressed or implied, of the FreeBSD Project.
33 #ifndef _SYS_HUNT_IMPL_H
34 #define _SYS_HUNT_IMPL_H
38 #include "efx_regs_ef10.h"
45 #define HUNTINGTON_NVRAM_CHUNK 0x80
47 /* Alignment requirement for value written to RX WPTR:
48 * the WPTR must be aligned to an 8 descriptor boundary
50 #define HUNTINGTON_RX_WPTR_ALIGN 8
52 /* Invalid RSS context handle */
53 #define HUNTINGTON_RSS_CONTEXT_INVALID (0xffffffff)
58 __checkReturn efx_rc_t
66 __checkReturn efx_rc_t
69 __in unsigned int index,
70 __in efsys_mem_t *esmp,
79 __checkReturn efx_rc_t
82 __in unsigned int count);
89 __checkReturn efx_rc_t
92 __in unsigned int us);
96 hunt_ev_qstats_update(
98 __inout_ecount(EV_NQSTATS) efsys_stat_t *stat);
99 #endif /* EFSYS_OPT_QSTATS */
102 hunt_ev_rxlabel_init(
105 __in unsigned int label);
108 hunt_ev_rxlabel_fini(
110 __in unsigned int label);
114 __checkReturn efx_rc_t
117 __in efx_intr_type_t type,
118 __in efsys_mem_t *esmp);
122 __in efx_nic_t *enp);
126 __in efx_nic_t *enp);
129 hunt_intr_disable_unlocked(
130 __in efx_nic_t *enp);
132 __checkReturn efx_rc_t
135 __in unsigned int level);
139 __in efx_nic_t *enp);
143 extern __checkReturn efx_rc_t
145 __in efx_nic_t *enp);
147 extern __checkReturn efx_rc_t
148 hunt_nic_set_drv_limits(
149 __inout efx_nic_t *enp,
150 __in efx_drv_limits_t *edlp);
152 extern __checkReturn efx_rc_t
153 hunt_nic_get_vi_pool(
155 __out uint32_t *vi_countp);
157 extern __checkReturn efx_rc_t
158 hunt_nic_get_bar_region(
160 __in efx_nic_region_t region,
161 __out uint32_t *offsetp,
162 __out size_t *sizep);
164 extern __checkReturn efx_rc_t
166 __in efx_nic_t *enp);
168 extern __checkReturn efx_rc_t
170 __in efx_nic_t *enp);
174 extern __checkReturn efx_rc_t
175 hunt_nic_register_test(
176 __in efx_nic_t *enp);
178 #endif /* EFSYS_OPT_DIAG */
182 __in efx_nic_t *enp);
186 __in efx_nic_t *enp);
191 extern __checkReturn efx_rc_t
194 __out efx_link_mode_t *link_modep);
196 extern __checkReturn efx_rc_t
199 __out boolean_t *mac_upp);
201 extern __checkReturn efx_rc_t
203 __in efx_nic_t *enp);
205 extern __checkReturn efx_rc_t
206 hunt_mac_reconfigure(
207 __in efx_nic_t *enp);
209 extern __checkReturn efx_rc_t
210 hunt_mac_multicast_list_set(
211 __in efx_nic_t *enp);
213 extern __checkReturn efx_rc_t
214 hunt_mac_filter_default_rxq_set(
217 __in boolean_t using_rss);
220 hunt_mac_filter_default_rxq_clear(
221 __in efx_nic_t *enp);
223 #if EFSYS_OPT_LOOPBACK
225 extern __checkReturn efx_rc_t
226 hunt_mac_loopback_set(
228 __in efx_link_mode_t link_mode,
229 __in efx_loopback_type_t loopback_type);
231 #endif /* EFSYS_OPT_LOOPBACK */
233 #if EFSYS_OPT_MAC_STATS
235 extern __checkReturn efx_rc_t
236 hunt_mac_stats_update(
238 __in efsys_mem_t *esmp,
239 __inout_ecount(EFX_MAC_NSTATS) efsys_stat_t *stat,
240 __inout_opt uint32_t *generationp);
242 #endif /* EFSYS_OPT_MAC_STATS */
249 extern __checkReturn efx_rc_t
252 __in const efx_mcdi_transport_t *mtp);
256 __in efx_nic_t *enp);
259 hunt_mcdi_request_copyin(
261 __in efx_mcdi_req_t *emrp,
262 __in unsigned int seq,
263 __in boolean_t ev_cpl,
264 __in boolean_t new_epoch);
267 hunt_mcdi_read_response(
273 extern __checkReturn boolean_t
274 hunt_mcdi_request_poll(
275 __in efx_nic_t *enp);
278 hunt_mcdi_request_copyout(
280 __in efx_mcdi_req_t *emrp);
283 hunt_mcdi_poll_reboot(
284 __in efx_nic_t *enp);
286 extern __checkReturn efx_rc_t
287 hunt_mcdi_fw_update_supported(
289 __out boolean_t *supportedp);
291 extern __checkReturn efx_rc_t
292 hunt_mcdi_macaddr_change_supported(
294 __out boolean_t *supportedp);
296 extern __checkReturn efx_rc_t
297 hunt_mcdi_link_control_supported(
299 __out boolean_t *supportedp);
301 extern __checkReturn efx_rc_t
302 hunt_mcdi_mac_spoofing_supported(
304 __out boolean_t *supportedp);
307 #endif /* EFSYS_OPT_MCDI */
311 #if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
313 extern __checkReturn efx_rc_t
314 hunt_nvram_buf_read_tlv(
316 __in_bcount(max_seg_size) caddr_t seg_data,
317 __in size_t max_seg_size,
319 __deref_out_bcount_opt(*sizep) caddr_t *datap,
320 __out size_t *sizep);
322 extern __checkReturn efx_rc_t
323 hunt_nvram_buf_write_tlv(
324 __inout_bcount(partn_size) caddr_t partn_data,
325 __in size_t partn_size,
327 __in_bcount(tag_size) caddr_t tag_data,
328 __in size_t tag_size,
329 __out size_t *total_lengthp);
331 extern __checkReturn efx_rc_t
332 hunt_nvram_partn_read_tlv(
336 __deref_out_bcount_opt(*sizep) caddr_t *datap,
337 __out size_t *sizep);
339 extern __checkReturn efx_rc_t
340 hunt_nvram_partn_write_tlv(
344 __in_bcount(size) caddr_t data,
347 extern __checkReturn efx_rc_t
348 hunt_nvram_partn_write_segment_tlv(
352 __in_bcount(size) caddr_t data,
354 __in boolean_t all_segments);
356 extern __checkReturn efx_rc_t
357 hunt_nvram_partn_size(
359 __in unsigned int partn,
360 __out size_t *sizep);
362 extern __checkReturn efx_rc_t
363 hunt_nvram_partn_lock(
365 __in unsigned int partn);
367 extern __checkReturn efx_rc_t
368 hunt_nvram_partn_read(
370 __in unsigned int partn,
371 __in unsigned int offset,
372 __out_bcount(size) caddr_t data,
375 extern __checkReturn efx_rc_t
376 hunt_nvram_partn_erase(
378 __in unsigned int partn,
379 __in unsigned int offset,
382 extern __checkReturn efx_rc_t
383 hunt_nvram_partn_write(
385 __in unsigned int partn,
386 __in unsigned int offset,
387 __out_bcount(size) caddr_t data,
391 hunt_nvram_partn_unlock(
393 __in unsigned int partn);
395 #endif /* EFSYS_OPT_NVRAM || EFSYS_OPT_VPD */
401 extern __checkReturn efx_rc_t
403 __in efx_nic_t *enp);
405 #endif /* EFSYS_OPT_DIAG */
407 extern __checkReturn efx_rc_t
410 __in efx_nvram_type_t type,
411 __out size_t *sizep);
413 extern __checkReturn efx_rc_t
414 hunt_nvram_get_version(
416 __in efx_nvram_type_t type,
417 __out uint32_t *subtypep,
418 __out_ecount(4) uint16_t version[4]);
420 extern __checkReturn efx_rc_t
423 __in efx_nvram_type_t type,
424 __out size_t *pref_chunkp);
426 extern __checkReturn efx_rc_t
427 hunt_nvram_read_chunk(
429 __in efx_nvram_type_t type,
430 __in unsigned int offset,
431 __out_bcount(size) caddr_t data,
434 extern __checkReturn efx_rc_t
437 __in efx_nvram_type_t type);
439 extern __checkReturn efx_rc_t
440 hunt_nvram_write_chunk(
442 __in efx_nvram_type_t type,
443 __in unsigned int offset,
444 __in_bcount(size) caddr_t data,
448 hunt_nvram_rw_finish(
450 __in efx_nvram_type_t type);
452 extern __checkReturn efx_rc_t
453 hunt_nvram_partn_set_version(
455 __in unsigned int partn,
456 __in_ecount(4) uint16_t version[4]);
458 extern __checkReturn efx_rc_t
459 hunt_nvram_set_version(
461 __in efx_nvram_type_t type,
462 __in_ecount(4) uint16_t version[4]);
464 #endif /* EFSYS_OPT_NVRAM */
469 typedef struct hunt_link_state_s {
470 uint32_t hls_adv_cap_mask;
471 uint32_t hls_lp_cap_mask;
472 unsigned int hls_fcntl;
473 efx_link_mode_t hls_link_mode;
474 #if EFSYS_OPT_LOOPBACK
475 efx_loopback_type_t hls_loopback;
477 boolean_t hls_mac_up;
483 __in efx_qword_t *eqp,
484 __out efx_link_mode_t *link_modep);
486 extern __checkReturn efx_rc_t
489 __out hunt_link_state_t *hlsp);
491 extern __checkReturn efx_rc_t
496 extern __checkReturn efx_rc_t
497 hunt_phy_reconfigure(
498 __in efx_nic_t *enp);
500 extern __checkReturn efx_rc_t
502 __in efx_nic_t *enp);
504 extern __checkReturn efx_rc_t
507 __out uint32_t *ouip);
509 #if EFSYS_OPT_PHY_STATS
511 extern __checkReturn efx_rc_t
512 hunt_phy_stats_update(
514 __in efsys_mem_t *esmp,
515 __inout_ecount(EFX_PHY_NSTATS) uint32_t *stat);
517 #endif /* EFSYS_OPT_PHY_STATS */
519 #if EFSYS_OPT_PHY_PROPS
526 __in unsigned int id);
528 #endif /* EFSYS_OPT_NAMES */
530 extern __checkReturn efx_rc_t
533 __in unsigned int id,
535 __out uint32_t *valp);
537 extern __checkReturn efx_rc_t
540 __in unsigned int id,
543 #endif /* EFSYS_OPT_PHY_PROPS */
547 extern __checkReturn efx_rc_t
548 hunt_bist_enable_offline(
549 __in efx_nic_t *enp);
551 extern __checkReturn efx_rc_t
554 __in efx_bist_type_t type);
556 extern __checkReturn efx_rc_t
559 __in efx_bist_type_t type,
560 __out efx_bist_result_t *resultp,
561 __out_opt __drv_when(count > 0, __notnull)
562 uint32_t *value_maskp,
563 __out_ecount_opt(count) __drv_when(count > 0, __notnull)
564 unsigned long *valuesp,
570 __in efx_bist_type_t type);
572 #endif /* EFSYS_OPT_BIST */
579 extern __checkReturn efx_rc_t
582 __in efx_sram_pattern_fn_t func);
584 #endif /* EFSYS_OPT_DIAG */
589 extern __checkReturn efx_rc_t
591 __in efx_nic_t *enp);
595 __in efx_nic_t *enp);
597 extern __checkReturn efx_rc_t
600 __in unsigned int index,
601 __in unsigned int label,
602 __in efsys_mem_t *esmp,
608 __out unsigned int *addedp);
612 __in efx_txq_t *etp);
614 extern __checkReturn efx_rc_t
617 __in_ecount(n) efx_buffer_t *eb,
619 __in unsigned int completed,
620 __inout unsigned int *addedp);
625 __in unsigned int added,
626 __in unsigned int pushed);
628 extern __checkReturn efx_rc_t
631 __in unsigned int ns);
633 extern __checkReturn efx_rc_t
635 __in efx_txq_t *etp);
639 __in efx_txq_t *etp);
641 extern __checkReturn efx_rc_t
643 __in efx_txq_t *etp);
646 hunt_tx_qpio_disable(
647 __in efx_txq_t *etp);
649 extern __checkReturn efx_rc_t
652 __in_ecount(buf_length) uint8_t *buffer,
653 __in size_t buf_length,
654 __in size_t pio_buf_offset);
656 extern __checkReturn efx_rc_t
659 __in size_t pkt_length,
660 __in unsigned int completed,
661 __inout unsigned int *addedp);
663 extern __checkReturn efx_rc_t
666 __in_ecount(n) efx_desc_t *ed,
668 __in unsigned int completed,
669 __inout unsigned int *addedp);
672 hunt_tx_qdesc_dma_create(
674 __in efsys_dma_addr_t addr,
677 __out efx_desc_t *edp);
680 hunt_tx_qdesc_tso_create(
682 __in uint16_t ipv4_id,
683 __in uint32_t tcp_seq,
684 __in uint8_t tcp_flags,
685 __out efx_desc_t *edp);
688 hunt_tx_qdesc_vlantci_create(
690 __in uint16_t vlan_tci,
691 __out efx_desc_t *edp);
697 hunt_tx_qstats_update(
699 __inout_ecount(TX_NQSTATS) efsys_stat_t *stat);
701 #endif /* EFSYS_OPT_QSTATS */
705 /* Missing register definitions */
706 #ifndef ER_DZ_TX_PIOBUF_OFST
707 #define ER_DZ_TX_PIOBUF_OFST 0x00001000
709 #ifndef ER_DZ_TX_PIOBUF_STEP
710 #define ER_DZ_TX_PIOBUF_STEP 8192
712 #ifndef ER_DZ_TX_PIOBUF_ROWS
713 #define ER_DZ_TX_PIOBUF_ROWS 2048
716 #ifndef ER_DZ_TX_PIOBUF_SIZE
717 #define ER_DZ_TX_PIOBUF_SIZE 2048
720 #define HUNT_PIOBUF_NBUFS (16)
721 #define HUNT_PIOBUF_SIZE (ER_DZ_TX_PIOBUF_SIZE)
723 #define HUNT_MIN_PIO_ALLOC_SIZE (HUNT_PIOBUF_SIZE / 32)
725 #define HUNT_LEGACY_PF_PRIVILEGE_MASK \
726 (MC_CMD_PRIVILEGE_MASK_IN_GRP_ADMIN | \
727 MC_CMD_PRIVILEGE_MASK_IN_GRP_LINK | \
728 MC_CMD_PRIVILEGE_MASK_IN_GRP_ONLOAD | \
729 MC_CMD_PRIVILEGE_MASK_IN_GRP_PTP | \
730 MC_CMD_PRIVILEGE_MASK_IN_GRP_INSECURE_FILTERS | \
731 MC_CMD_PRIVILEGE_MASK_IN_GRP_MAC_SPOOFING | \
732 MC_CMD_PRIVILEGE_MASK_IN_GRP_UNICAST | \
733 MC_CMD_PRIVILEGE_MASK_IN_GRP_MULTICAST | \
734 MC_CMD_PRIVILEGE_MASK_IN_GRP_BROADCAST | \
735 MC_CMD_PRIVILEGE_MASK_IN_GRP_ALL_MULTICAST | \
736 MC_CMD_PRIVILEGE_MASK_IN_GRP_PROMISCUOUS)
738 #define HUNT_LEGACY_VF_PRIVILEGE_MASK 0
740 typedef uint32_t efx_piobuf_handle_t;
742 #define EFX_PIOBUF_HANDLE_INVALID ((efx_piobuf_handle_t) -1)
744 extern __checkReturn efx_rc_t
746 __inout efx_nic_t *enp,
747 __out uint32_t *bufnump,
748 __out efx_piobuf_handle_t *handlep,
749 __out uint32_t *blknump,
750 __out uint32_t *offsetp,
751 __out size_t *sizep);
753 extern __checkReturn efx_rc_t
755 __inout efx_nic_t *enp,
756 __in uint32_t bufnum,
757 __in uint32_t blknum);
759 extern __checkReturn efx_rc_t
761 __inout efx_nic_t *enp,
762 __in uint32_t vi_index,
763 __in efx_piobuf_handle_t handle);
765 extern __checkReturn efx_rc_t
767 __inout efx_nic_t *enp,
768 __in uint32_t vi_index);
775 extern __checkReturn efx_rc_t
777 __in efx_nic_t *enp);
779 extern __checkReturn efx_rc_t
782 __out size_t *sizep);
784 extern __checkReturn efx_rc_t
787 __out_bcount(size) caddr_t data,
790 extern __checkReturn efx_rc_t
793 __in_bcount(size) caddr_t data,
796 extern __checkReturn efx_rc_t
799 __in_bcount(size) caddr_t data,
802 extern __checkReturn efx_rc_t
805 __in_bcount(size) caddr_t data,
807 __inout efx_vpd_value_t *evvp);
809 extern __checkReturn efx_rc_t
812 __in_bcount(size) caddr_t data,
814 __in efx_vpd_value_t *evvp);
816 extern __checkReturn efx_rc_t
819 __in_bcount(size) caddr_t data,
821 __out efx_vpd_value_t *evvp,
822 __inout unsigned int *contp);
824 extern __checkReturn efx_rc_t
827 __in_bcount(size) caddr_t data,
832 __in efx_nic_t *enp);
834 #endif /* EFSYS_OPT_VPD */
839 extern __checkReturn efx_rc_t
841 __in efx_nic_t *enp);
843 #if EFSYS_OPT_RX_HDR_SPLIT
844 extern __checkReturn efx_rc_t
845 hunt_rx_hdr_split_enable(
847 __in unsigned int hdr_buf_size,
848 __in unsigned int pld_buf_size);
849 #endif /* EFSYS_OPT_RX_HDR_SPLIT */
851 #if EFSYS_OPT_RX_SCATTER
852 extern __checkReturn efx_rc_t
853 hunt_rx_scatter_enable(
855 __in unsigned int buf_size);
856 #endif /* EFSYS_OPT_RX_SCATTER */
859 #if EFSYS_OPT_RX_SCALE
861 extern __checkReturn efx_rc_t
862 hunt_rx_scale_mode_set(
864 __in efx_rx_hash_alg_t alg,
865 __in efx_rx_hash_type_t type,
866 __in boolean_t insert);
868 extern __checkReturn efx_rc_t
869 hunt_rx_scale_key_set(
871 __in_ecount(n) uint8_t *key,
874 extern __checkReturn efx_rc_t
875 hunt_rx_scale_tbl_set(
877 __in_ecount(n) unsigned int *table,
880 #endif /* EFSYS_OPT_RX_SCALE */
885 __in_ecount(n) efsys_dma_addr_t *addrp,
888 __in unsigned int completed,
889 __in unsigned int added);
894 __in unsigned int added,
895 __inout unsigned int *pushedp);
897 extern __checkReturn efx_rc_t
899 __in efx_rxq_t *erp);
903 __in efx_rxq_t *erp);
905 extern __checkReturn efx_rc_t
908 __in unsigned int index,
909 __in unsigned int label,
910 __in efx_rxq_type_t type,
911 __in efsys_mem_t *esmp,
915 __in efx_rxq_t *erp);
919 __in efx_rxq_t *erp);
923 __in efx_nic_t *enp);
927 typedef struct hunt_filter_handle_s {
930 } hunt_filter_handle_t;
932 typedef struct hunt_filter_entry_s {
933 uintptr_t hfe_spec; /* pointer to filter spec plus busy bit */
934 hunt_filter_handle_t hfe_handle;
935 } hunt_filter_entry_t;
938 * BUSY flag indicates that an update is in progress.
939 * AUTO_OLD flag is used to mark and sweep MAC packet filters.
941 #define EFX_HUNT_FILTER_FLAG_BUSY 1U
942 #define EFX_HUNT_FILTER_FLAG_AUTO_OLD 2U
943 #define EFX_HUNT_FILTER_FLAGS 3U
945 #define EFX_HUNT_FILTER_TBL_ROWS 8192
947 /* Allow for the broadcast address to be added to the multicast list */
948 #define EFX_HUNT_FILTER_MULTICAST_FILTERS_MAX (EFX_MAC_MULTICAST_LIST_MAX + 1)
950 typedef struct hunt_filter_table_s {
951 hunt_filter_entry_t hft_entry[EFX_HUNT_FILTER_TBL_ROWS];
952 efx_rxq_t * hft_default_rxq;
953 boolean_t hft_using_rss;
954 uint32_t hft_unicst_filter_index;
955 boolean_t hft_unicst_filter_set;
956 uint32_t hft_mulcst_filter_indexes[
957 EFX_HUNT_FILTER_MULTICAST_FILTERS_MAX];
958 uint32_t hft_mulcst_filter_count;
959 } hunt_filter_table_t;
961 __checkReturn efx_rc_t
963 __in efx_nic_t *enp);
967 __in efx_nic_t *enp);
969 __checkReturn efx_rc_t
971 __in efx_nic_t *enp);
973 __checkReturn efx_rc_t
976 __inout efx_filter_spec_t *spec,
977 __in boolean_t may_replace);
979 __checkReturn efx_rc_t
982 __inout efx_filter_spec_t *spec);
984 extern __checkReturn efx_rc_t
985 hunt_filter_supported_filters(
987 __out uint32_t *list,
988 __out size_t *length);
990 extern __checkReturn efx_rc_t
991 hunt_filter_reconfigure(
993 __in_ecount(6) uint8_t const *mac_addr,
994 __in boolean_t all_unicst,
995 __in boolean_t mulcst,
996 __in boolean_t all_mulcst,
997 __in boolean_t brdcst,
998 __in_ecount(6*count) uint8_t const *addrs,
1002 hunt_filter_get_default_rxq(
1003 __in efx_nic_t *enp,
1004 __out efx_rxq_t **erpp,
1005 __out boolean_t *using_rss);
1008 hunt_filter_default_rxq_set(
1009 __in efx_nic_t *enp,
1010 __in efx_rxq_t *erp,
1011 __in boolean_t using_rss);
1014 hunt_filter_default_rxq_clear(
1015 __in efx_nic_t *enp);
1018 #endif /* EFSYS_OPT_FILTER */
1020 extern __checkReturn efx_rc_t
1022 __in efx_nic_t *enp,
1023 __in boolean_t unicst,
1024 __in boolean_t brdcst);
1026 #if EFSYS_OPT_MCAST_FILTER_LIST
1028 extern __checkReturn efx_rc_t
1029 hunt_pktfilter_mcast_set(
1030 __in efx_nic_t *enp,
1031 __in uint8_t const *addrs,
1034 #endif /* EFSYS_OPT_MCAST_FILTER_LIST */
1036 extern __checkReturn efx_rc_t
1037 hunt_pktfilter_mcast_all(
1038 __in efx_nic_t *enp);
1040 extern __checkReturn efx_rc_t
1041 efx_mcdi_get_function_info(
1042 __in efx_nic_t *enp,
1043 __out uint32_t *pfp,
1044 __out_opt uint32_t *vfp);
1046 extern __checkReturn efx_rc_t
1047 efx_mcdi_privilege_mask(
1048 __in efx_nic_t *enp,
1051 __out uint32_t *maskp);
1057 #endif /* _SYS_HUNT_IMPL_H */