net/sfc/base: import SFN7xxx family support
[dpdk.git] / drivers / net / sfc / base / ef10_impl.h
1 /*
2  * Copyright (c) 2015-2016 Solarflare Communications Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
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.
13  *
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.
25  *
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.
29  */
30
31 #ifndef _SYS_EF10_IMPL_H
32 #define _SYS_EF10_IMPL_H
33
34 #ifdef  __cplusplus
35 extern "C" {
36 #endif
37
38 #if   EFSYS_OPT_HUNTINGTON
39 #define EF10_MAX_PIOBUF_NBUFS   HUNT_PIOBUF_NBUFS
40 #endif
41
42 /*
43  * FIXME: This is just a power of 2 which fits in an MCDI v1 message, and could
44  * possibly be increased, or the write size reported by newer firmware used
45  * instead.
46  */
47 #define EF10_NVRAM_CHUNK 0x80
48
49 /* Alignment requirement for value written to RX WPTR:
50  *  the WPTR must be aligned to an 8 descriptor boundary
51  */
52 #define EF10_RX_WPTR_ALIGN 8
53
54 /*
55  * Max byte offset into the packet the TCP header must start for the hardware
56  * to be able to parse the packet correctly.
57  */
58 #define EF10_TCP_HEADER_OFFSET_LIMIT    208
59
60 /* Invalid RSS context handle */
61 #define EF10_RSS_CONTEXT_INVALID        (0xffffffff)
62
63
64 /* EV */
65
66         __checkReturn   efx_rc_t
67 ef10_ev_init(
68         __in            efx_nic_t *enp);
69
70                         void
71 ef10_ev_fini(
72         __in            efx_nic_t *enp);
73
74         __checkReturn   efx_rc_t
75 ef10_ev_qcreate(
76         __in            efx_nic_t *enp,
77         __in            unsigned int index,
78         __in            efsys_mem_t *esmp,
79         __in            size_t n,
80         __in            uint32_t id,
81         __in            uint32_t us,
82         __in            uint32_t flags,
83         __in            efx_evq_t *eep);
84
85                         void
86 ef10_ev_qdestroy(
87         __in            efx_evq_t *eep);
88
89         __checkReturn   efx_rc_t
90 ef10_ev_qprime(
91         __in            efx_evq_t *eep,
92         __in            unsigned int count);
93
94                         void
95 ef10_ev_qpost(
96         __in    efx_evq_t *eep,
97         __in    uint16_t data);
98
99         __checkReturn   efx_rc_t
100 ef10_ev_qmoderate(
101         __in            efx_evq_t *eep,
102         __in            unsigned int us);
103
104                 void
105 ef10_ev_rxlabel_init(
106         __in            efx_evq_t *eep,
107         __in            efx_rxq_t *erp,
108         __in            unsigned int label,
109         __in            boolean_t packed_stream);
110
111                 void
112 ef10_ev_rxlabel_fini(
113         __in            efx_evq_t *eep,
114         __in            unsigned int label);
115
116 /* INTR */
117
118         __checkReturn   efx_rc_t
119 ef10_intr_init(
120         __in            efx_nic_t *enp,
121         __in            efx_intr_type_t type,
122         __in            efsys_mem_t *esmp);
123
124                         void
125 ef10_intr_enable(
126         __in            efx_nic_t *enp);
127
128                         void
129 ef10_intr_disable(
130         __in            efx_nic_t *enp);
131
132                         void
133 ef10_intr_disable_unlocked(
134         __in            efx_nic_t *enp);
135
136         __checkReturn   efx_rc_t
137 ef10_intr_trigger(
138         __in            efx_nic_t *enp,
139         __in            unsigned int level);
140
141                         void
142 ef10_intr_status_line(
143         __in            efx_nic_t *enp,
144         __out           boolean_t *fatalp,
145         __out           uint32_t *qmaskp);
146
147                         void
148 ef10_intr_status_message(
149         __in            efx_nic_t *enp,
150         __in            unsigned int message,
151         __out           boolean_t *fatalp);
152
153                         void
154 ef10_intr_fatal(
155         __in            efx_nic_t *enp);
156                         void
157 ef10_intr_fini(
158         __in            efx_nic_t *enp);
159
160 /* NIC */
161
162 extern  __checkReturn   efx_rc_t
163 ef10_nic_probe(
164         __in            efx_nic_t *enp);
165
166 extern  __checkReturn   efx_rc_t
167 ef10_nic_set_drv_limits(
168         __inout         efx_nic_t *enp,
169         __in            efx_drv_limits_t *edlp);
170
171 extern  __checkReturn   efx_rc_t
172 ef10_nic_get_vi_pool(
173         __in            efx_nic_t *enp,
174         __out           uint32_t *vi_countp);
175
176 extern  __checkReturn   efx_rc_t
177 ef10_nic_get_bar_region(
178         __in            efx_nic_t *enp,
179         __in            efx_nic_region_t region,
180         __out           uint32_t *offsetp,
181         __out           size_t *sizep);
182
183 extern  __checkReturn   efx_rc_t
184 ef10_nic_reset(
185         __in            efx_nic_t *enp);
186
187 extern  __checkReturn   efx_rc_t
188 ef10_nic_init(
189         __in            efx_nic_t *enp);
190
191 extern                  void
192 ef10_nic_fini(
193         __in            efx_nic_t *enp);
194
195 extern                  void
196 ef10_nic_unprobe(
197         __in            efx_nic_t *enp);
198
199
200 /* MAC */
201
202 extern  __checkReturn   efx_rc_t
203 ef10_mac_poll(
204         __in            efx_nic_t *enp,
205         __out           efx_link_mode_t *link_modep);
206
207 extern  __checkReturn   efx_rc_t
208 ef10_mac_up(
209         __in            efx_nic_t *enp,
210         __out           boolean_t *mac_upp);
211
212 extern  __checkReturn   efx_rc_t
213 ef10_mac_addr_set(
214         __in    efx_nic_t *enp);
215
216 extern  __checkReturn   efx_rc_t
217 ef10_mac_pdu_set(
218         __in    efx_nic_t *enp);
219
220 extern  __checkReturn   efx_rc_t
221 ef10_mac_pdu_get(
222         __in    efx_nic_t *enp,
223         __out   size_t *pdu);
224
225 extern  __checkReturn   efx_rc_t
226 ef10_mac_reconfigure(
227         __in    efx_nic_t *enp);
228
229 extern  __checkReturn   efx_rc_t
230 ef10_mac_multicast_list_set(
231         __in                            efx_nic_t *enp);
232
233 extern  __checkReturn   efx_rc_t
234 ef10_mac_filter_default_rxq_set(
235         __in            efx_nic_t *enp,
236         __in            efx_rxq_t *erp,
237         __in            boolean_t using_rss);
238
239 extern                  void
240 ef10_mac_filter_default_rxq_clear(
241         __in            efx_nic_t *enp);
242
243
244 /* MCDI */
245
246 #if EFSYS_OPT_MCDI
247
248 extern  __checkReturn   efx_rc_t
249 ef10_mcdi_init(
250         __in            efx_nic_t *enp,
251         __in            const efx_mcdi_transport_t *mtp);
252
253 extern                  void
254 ef10_mcdi_fini(
255         __in            efx_nic_t *enp);
256
257 extern                  void
258 ef10_mcdi_send_request(
259         __in                    efx_nic_t *enp,
260         __in_bcount(hdr_len)    void *hdrp,
261         __in                    size_t hdr_len,
262         __in_bcount(sdu_len)    void *sdup,
263         __in                    size_t sdu_len);
264
265 extern  __checkReturn   boolean_t
266 ef10_mcdi_poll_response(
267         __in            efx_nic_t *enp);
268
269 extern                  void
270 ef10_mcdi_read_response(
271         __in                    efx_nic_t *enp,
272         __out_bcount(length)    void *bufferp,
273         __in                    size_t offset,
274         __in                    size_t length);
275
276 extern                  efx_rc_t
277 ef10_mcdi_poll_reboot(
278         __in            efx_nic_t *enp);
279
280 extern  __checkReturn   efx_rc_t
281 ef10_mcdi_feature_supported(
282         __in            efx_nic_t *enp,
283         __in            efx_mcdi_feature_id_t id,
284         __out           boolean_t *supportedp);
285
286 extern                  void
287 ef10_mcdi_get_timeout(
288         __in            efx_nic_t *enp,
289         __in            efx_mcdi_req_t *emrp,
290         __out           uint32_t *timeoutp);
291
292 #endif /* EFSYS_OPT_MCDI */
293
294 /* NVRAM */
295
296
297 /* PHY */
298
299 typedef struct ef10_link_state_s {
300         uint32_t                els_adv_cap_mask;
301         uint32_t                els_lp_cap_mask;
302         unsigned int            els_fcntl;
303         efx_link_mode_t         els_link_mode;
304         boolean_t               els_mac_up;
305 } ef10_link_state_t;
306
307 extern                  void
308 ef10_phy_link_ev(
309         __in            efx_nic_t *enp,
310         __in            efx_qword_t *eqp,
311         __out           efx_link_mode_t *link_modep);
312
313 extern  __checkReturn   efx_rc_t
314 ef10_phy_get_link(
315         __in            efx_nic_t *enp,
316         __out           ef10_link_state_t *elsp);
317
318 extern  __checkReturn   efx_rc_t
319 ef10_phy_power(
320         __in            efx_nic_t *enp,
321         __in            boolean_t on);
322
323 extern  __checkReturn   efx_rc_t
324 ef10_phy_reconfigure(
325         __in            efx_nic_t *enp);
326
327 extern  __checkReturn   efx_rc_t
328 ef10_phy_verify(
329         __in            efx_nic_t *enp);
330
331 extern  __checkReturn   efx_rc_t
332 ef10_phy_oui_get(
333         __in            efx_nic_t *enp,
334         __out           uint32_t *ouip);
335
336 /* TX */
337
338 extern  __checkReturn   efx_rc_t
339 ef10_tx_init(
340         __in            efx_nic_t *enp);
341
342 extern                  void
343 ef10_tx_fini(
344         __in            efx_nic_t *enp);
345
346 extern  __checkReturn   efx_rc_t
347 ef10_tx_qcreate(
348         __in            efx_nic_t *enp,
349         __in            unsigned int index,
350         __in            unsigned int label,
351         __in            efsys_mem_t *esmp,
352         __in            size_t n,
353         __in            uint32_t id,
354         __in            uint16_t flags,
355         __in            efx_evq_t *eep,
356         __in            efx_txq_t *etp,
357         __out           unsigned int *addedp);
358
359 extern          void
360 ef10_tx_qdestroy(
361         __in            efx_txq_t *etp);
362
363 extern  __checkReturn   efx_rc_t
364 ef10_tx_qpost(
365         __in            efx_txq_t *etp,
366         __in_ecount(n)  efx_buffer_t *eb,
367         __in            unsigned int n,
368         __in            unsigned int completed,
369         __inout         unsigned int *addedp);
370
371 extern                  void
372 ef10_tx_qpush(
373         __in            efx_txq_t *etp,
374         __in            unsigned int added,
375         __in            unsigned int pushed);
376
377 extern  __checkReturn   efx_rc_t
378 ef10_tx_qpace(
379         __in            efx_txq_t *etp,
380         __in            unsigned int ns);
381
382 extern  __checkReturn   efx_rc_t
383 ef10_tx_qflush(
384         __in            efx_txq_t *etp);
385
386 extern                  void
387 ef10_tx_qenable(
388         __in            efx_txq_t *etp);
389
390 extern  __checkReturn   efx_rc_t
391 ef10_tx_qpio_enable(
392         __in            efx_txq_t *etp);
393
394 extern                  void
395 ef10_tx_qpio_disable(
396         __in            efx_txq_t *etp);
397
398 extern  __checkReturn   efx_rc_t
399 ef10_tx_qpio_write(
400         __in                    efx_txq_t *etp,
401         __in_ecount(buf_length) uint8_t *buffer,
402         __in                    size_t buf_length,
403         __in                    size_t pio_buf_offset);
404
405 extern  __checkReturn   efx_rc_t
406 ef10_tx_qpio_post(
407         __in                    efx_txq_t *etp,
408         __in                    size_t pkt_length,
409         __in                    unsigned int completed,
410         __inout                 unsigned int *addedp);
411
412 extern  __checkReturn   efx_rc_t
413 ef10_tx_qdesc_post(
414         __in            efx_txq_t *etp,
415         __in_ecount(n)  efx_desc_t *ed,
416         __in            unsigned int n,
417         __in            unsigned int completed,
418         __inout         unsigned int *addedp);
419
420 extern  void
421 ef10_tx_qdesc_dma_create(
422         __in    efx_txq_t *etp,
423         __in    efsys_dma_addr_t addr,
424         __in    size_t size,
425         __in    boolean_t eop,
426         __out   efx_desc_t *edp);
427
428 extern  void
429 ef10_tx_qdesc_tso_create(
430         __in    efx_txq_t *etp,
431         __in    uint16_t ipv4_id,
432         __in    uint32_t tcp_seq,
433         __in    uint8_t  tcp_flags,
434         __out   efx_desc_t *edp);
435
436 extern  void
437 ef10_tx_qdesc_tso2_create(
438         __in                    efx_txq_t *etp,
439         __in                    uint16_t ipv4_id,
440         __in                    uint32_t tcp_seq,
441         __in                    uint16_t tcp_mss,
442         __out_ecount(count)     efx_desc_t *edp,
443         __in                    int count);
444
445 extern  void
446 ef10_tx_qdesc_vlantci_create(
447         __in    efx_txq_t *etp,
448         __in    uint16_t vlan_tci,
449         __out   efx_desc_t *edp);
450
451
452 typedef uint32_t        efx_piobuf_handle_t;
453
454 #define EFX_PIOBUF_HANDLE_INVALID       ((efx_piobuf_handle_t) -1)
455
456 extern  __checkReturn   efx_rc_t
457 ef10_nic_pio_alloc(
458         __inout         efx_nic_t *enp,
459         __out           uint32_t *bufnump,
460         __out           efx_piobuf_handle_t *handlep,
461         __out           uint32_t *blknump,
462         __out           uint32_t *offsetp,
463         __out           size_t *sizep);
464
465 extern  __checkReturn   efx_rc_t
466 ef10_nic_pio_free(
467         __inout         efx_nic_t *enp,
468         __in            uint32_t bufnum,
469         __in            uint32_t blknum);
470
471 extern  __checkReturn   efx_rc_t
472 ef10_nic_pio_link(
473         __inout         efx_nic_t *enp,
474         __in            uint32_t vi_index,
475         __in            efx_piobuf_handle_t handle);
476
477 extern  __checkReturn   efx_rc_t
478 ef10_nic_pio_unlink(
479         __inout         efx_nic_t *enp,
480         __in            uint32_t vi_index);
481
482
483 /* VPD */
484
485
486 /* RX */
487
488 extern  __checkReturn   efx_rc_t
489 ef10_rx_init(
490         __in            efx_nic_t *enp);
491
492
493 extern  __checkReturn   efx_rc_t
494 ef10_rx_prefix_pktlen(
495         __in            efx_nic_t *enp,
496         __in            uint8_t *buffer,
497         __out           uint16_t *lengthp);
498
499 extern                  void
500 ef10_rx_qpost(
501         __in            efx_rxq_t *erp,
502         __in_ecount(n)  efsys_dma_addr_t *addrp,
503         __in            size_t size,
504         __in            unsigned int n,
505         __in            unsigned int completed,
506         __in            unsigned int added);
507
508 extern                  void
509 ef10_rx_qpush(
510         __in            efx_rxq_t *erp,
511         __in            unsigned int added,
512         __inout         unsigned int *pushedp);
513
514 extern  __checkReturn   efx_rc_t
515 ef10_rx_qflush(
516         __in            efx_rxq_t *erp);
517
518 extern          void
519 ef10_rx_qenable(
520         __in            efx_rxq_t *erp);
521
522 extern  __checkReturn   efx_rc_t
523 ef10_rx_qcreate(
524         __in            efx_nic_t *enp,
525         __in            unsigned int index,
526         __in            unsigned int label,
527         __in            efx_rxq_type_t type,
528         __in            efsys_mem_t *esmp,
529         __in            size_t n,
530         __in            uint32_t id,
531         __in            efx_evq_t *eep,
532         __in            efx_rxq_t *erp);
533
534 extern                  void
535 ef10_rx_qdestroy(
536         __in            efx_rxq_t *erp);
537
538 extern                  void
539 ef10_rx_fini(
540         __in            efx_nic_t *enp);
541
542 #if EFSYS_OPT_FILTER
543
544 typedef struct ef10_filter_handle_s {
545         uint32_t        efh_lo;
546         uint32_t        efh_hi;
547 } ef10_filter_handle_t;
548
549 typedef struct ef10_filter_entry_s {
550         uintptr_t efe_spec; /* pointer to filter spec plus busy bit */
551         ef10_filter_handle_t efe_handle;
552 } ef10_filter_entry_t;
553
554 /*
555  * BUSY flag indicates that an update is in progress.
556  * AUTO_OLD flag is used to mark and sweep MAC packet filters.
557  */
558 #define EFX_EF10_FILTER_FLAG_BUSY       1U
559 #define EFX_EF10_FILTER_FLAG_AUTO_OLD   2U
560 #define EFX_EF10_FILTER_FLAGS           3U
561
562 /*
563  * Size of the hash table used by the driver. Doesn't need to be the
564  * same size as the hardware's table.
565  */
566 #define EFX_EF10_FILTER_TBL_ROWS 8192
567
568 /* Only need to allow for one directed and one unknown unicast filter */
569 #define EFX_EF10_FILTER_UNICAST_FILTERS_MAX     2
570
571 /* Allow for the broadcast address to be added to the multicast list */
572 #define EFX_EF10_FILTER_MULTICAST_FILTERS_MAX   (EFX_MAC_MULTICAST_LIST_MAX + 1)
573
574 typedef struct ef10_filter_table_s {
575         ef10_filter_entry_t     eft_entry[EFX_EF10_FILTER_TBL_ROWS];
576         efx_rxq_t               *eft_default_rxq;
577         boolean_t               eft_using_rss;
578         uint32_t                eft_unicst_filter_indexes[
579             EFX_EF10_FILTER_UNICAST_FILTERS_MAX];
580         uint32_t                eft_unicst_filter_count;
581         uint32_t                eft_mulcst_filter_indexes[
582             EFX_EF10_FILTER_MULTICAST_FILTERS_MAX];
583         uint32_t                eft_mulcst_filter_count;
584         boolean_t               eft_using_all_mulcst;
585 } ef10_filter_table_t;
586
587         __checkReturn   efx_rc_t
588 ef10_filter_init(
589         __in            efx_nic_t *enp);
590
591                         void
592 ef10_filter_fini(
593         __in            efx_nic_t *enp);
594
595         __checkReturn   efx_rc_t
596 ef10_filter_restore(
597         __in            efx_nic_t *enp);
598
599         __checkReturn   efx_rc_t
600 ef10_filter_add(
601         __in            efx_nic_t *enp,
602         __inout         efx_filter_spec_t *spec,
603         __in            boolean_t may_replace);
604
605         __checkReturn   efx_rc_t
606 ef10_filter_delete(
607         __in            efx_nic_t *enp,
608         __inout         efx_filter_spec_t *spec);
609
610 extern  __checkReturn   efx_rc_t
611 ef10_filter_supported_filters(
612         __in            efx_nic_t *enp,
613         __out           uint32_t *list,
614         __out           size_t *length);
615
616 extern  __checkReturn   efx_rc_t
617 ef10_filter_reconfigure(
618         __in                            efx_nic_t *enp,
619         __in_ecount(6)                  uint8_t const *mac_addr,
620         __in                            boolean_t all_unicst,
621         __in                            boolean_t mulcst,
622         __in                            boolean_t all_mulcst,
623         __in                            boolean_t brdcst,
624         __in_ecount(6*count)            uint8_t const *addrs,
625         __in                            uint32_t count);
626
627 extern          void
628 ef10_filter_get_default_rxq(
629         __in            efx_nic_t *enp,
630         __out           efx_rxq_t **erpp,
631         __out           boolean_t *using_rss);
632
633 extern          void
634 ef10_filter_default_rxq_set(
635         __in            efx_nic_t *enp,
636         __in            efx_rxq_t *erp,
637         __in            boolean_t using_rss);
638
639 extern          void
640 ef10_filter_default_rxq_clear(
641         __in            efx_nic_t *enp);
642
643
644 #endif /* EFSYS_OPT_FILTER */
645
646 extern  __checkReturn                   efx_rc_t
647 efx_mcdi_get_function_info(
648         __in                            efx_nic_t *enp,
649         __out                           uint32_t *pfp,
650         __out_opt                       uint32_t *vfp);
651
652 extern  __checkReturn           efx_rc_t
653 efx_mcdi_privilege_mask(
654         __in                    efx_nic_t *enp,
655         __in                    uint32_t pf,
656         __in                    uint32_t vf,
657         __out                   uint32_t *maskp);
658
659 extern  __checkReturn   efx_rc_t
660 efx_mcdi_get_port_assignment(
661         __in            efx_nic_t *enp,
662         __out           uint32_t *portp);
663
664 extern  __checkReturn   efx_rc_t
665 efx_mcdi_get_port_modes(
666         __in            efx_nic_t *enp,
667         __out           uint32_t *modesp,
668         __out_opt       uint32_t *current_modep);
669
670 extern  __checkReturn   efx_rc_t
671 ef10_nic_get_port_mode_bandwidth(
672         __in            uint32_t port_mode,
673         __out           uint32_t *bandwidth_mbpsp);
674
675 extern  __checkReturn   efx_rc_t
676 efx_mcdi_get_mac_address_pf(
677         __in                    efx_nic_t *enp,
678         __out_ecount_opt(6)     uint8_t mac_addrp[6]);
679
680 extern  __checkReturn   efx_rc_t
681 efx_mcdi_get_mac_address_vf(
682         __in                    efx_nic_t *enp,
683         __out_ecount_opt(6)     uint8_t mac_addrp[6]);
684
685 extern  __checkReturn   efx_rc_t
686 efx_mcdi_get_clock(
687         __in            efx_nic_t *enp,
688         __out           uint32_t *sys_freqp,
689         __out           uint32_t *dpcpu_freqp);
690
691
692 extern  __checkReturn   efx_rc_t
693 efx_mcdi_get_vector_cfg(
694         __in            efx_nic_t *enp,
695         __out_opt       uint32_t *vec_basep,
696         __out_opt       uint32_t *pf_nvecp,
697         __out_opt       uint32_t *vf_nvecp);
698
699 extern  __checkReturn   efx_rc_t
700 ef10_get_datapath_caps(
701         __in            efx_nic_t *enp);
702
703 extern  __checkReturn           efx_rc_t
704 ef10_get_privilege_mask(
705         __in                    efx_nic_t *enp,
706         __out                   uint32_t *maskp);
707
708 extern  __checkReturn   efx_rc_t
709 ef10_external_port_mapping(
710         __in            efx_nic_t *enp,
711         __in            uint32_t port,
712         __out           uint8_t *external_portp);
713
714 #ifdef  __cplusplus
715 }
716 #endif
717
718 #endif  /* _SYS_EF10_IMPL_H */