FreeBSD kernel E1000 device code
e1000_mbx.c
Go to the documentation of this file.
1/******************************************************************************
2 SPDX-License-Identifier: BSD-3-Clause
3
4 Copyright (c) 2001-2020, Intel Corporation
5 All rights reserved.
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
9
10 1. Redistributions of source code must retain the above copyright notice,
11 this list of conditions and the following disclaimer.
12
13 2. Redistributions in binary form must reproduce the above copyright
14 notice, this list of conditions and the following disclaimer in the
15 documentation and/or other materials provided with the distribution.
16
17 3. Neither the name of the Intel Corporation nor the names of its
18 contributors may be used to endorse or promote products derived from
19 this software without specific prior written permission.
20
21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 POSSIBILITY OF SUCH DAMAGE.
32
33******************************************************************************/
34/*$FreeBSD$*/
35
36#include "e1000_mbx.h"
37
44 u16 E1000_UNUSEDARG mbx_id)
45{
46 DEBUGFUNC("e1000_null_mbx_check_flag");
47
48 return E1000_SUCCESS;
49}
50
61 u16 E1000_UNUSEDARG mbx_id)
62{
63 DEBUGFUNC("e1000_null_mbx_rw_msg");
64
65 return E1000_SUCCESS;
66}
67
77s32 e1000_read_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
78{
79 struct e1000_mbx_info *mbx = &hw->mbx;
80 s32 ret_val = -E1000_ERR_MBX;
81
82 DEBUGFUNC("e1000_read_mbx");
83
84 /* limit read to size of mailbox */
85 if (size > mbx->size)
86 size = mbx->size;
87
88 if (mbx->ops.read)
89 ret_val = mbx->ops.read(hw, msg, size, mbx_id);
90
91 return ret_val;
92}
93
103s32 e1000_write_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
104{
105 struct e1000_mbx_info *mbx = &hw->mbx;
106 s32 ret_val = E1000_SUCCESS;
107
108 DEBUGFUNC("e1000_write_mbx");
109
110 if (size > mbx->size)
111 ret_val = -E1000_ERR_MBX;
112
113 else if (mbx->ops.write)
114 ret_val = mbx->ops.write(hw, msg, size, mbx_id);
115
116 return ret_val;
117}
118
127{
128 struct e1000_mbx_info *mbx = &hw->mbx;
129 s32 ret_val = -E1000_ERR_MBX;
130
131 DEBUGFUNC("e1000_check_for_msg");
132
133 if (mbx->ops.check_for_msg)
134 ret_val = mbx->ops.check_for_msg(hw, mbx_id);
135
136 return ret_val;
137}
138
147{
148 struct e1000_mbx_info *mbx = &hw->mbx;
149 s32 ret_val = -E1000_ERR_MBX;
150
151 DEBUGFUNC("e1000_check_for_ack");
152
153 if (mbx->ops.check_for_ack)
154 ret_val = mbx->ops.check_for_ack(hw, mbx_id);
155
156 return ret_val;
157}
158
167{
168 struct e1000_mbx_info *mbx = &hw->mbx;
169 s32 ret_val = -E1000_ERR_MBX;
170
171 DEBUGFUNC("e1000_check_for_rst");
172
173 if (mbx->ops.check_for_rst)
174 ret_val = mbx->ops.check_for_rst(hw, mbx_id);
175
176 return ret_val;
177}
178
186static s32 e1000_poll_for_msg(struct e1000_hw *hw, u16 mbx_id)
187{
188 struct e1000_mbx_info *mbx = &hw->mbx;
189 int countdown = mbx->timeout;
190
191 DEBUGFUNC("e1000_poll_for_msg");
192
193 if (!countdown || !mbx->ops.check_for_msg)
194 goto out;
195
196 while (countdown && mbx->ops.check_for_msg(hw, mbx_id)) {
197 countdown--;
198 if (!countdown)
199 break;
201 }
202
203 /* if we failed, all future posted messages fail until reset */
204 if (!countdown)
205 mbx->timeout = 0;
206out:
207 return countdown ? E1000_SUCCESS : -E1000_ERR_MBX;
208}
209
217static s32 e1000_poll_for_ack(struct e1000_hw *hw, u16 mbx_id)
218{
219 struct e1000_mbx_info *mbx = &hw->mbx;
220 int countdown = mbx->timeout;
221
222 DEBUGFUNC("e1000_poll_for_ack");
223
224 if (!countdown || !mbx->ops.check_for_ack)
225 goto out;
226
227 while (countdown && mbx->ops.check_for_ack(hw, mbx_id)) {
228 countdown--;
229 if (!countdown)
230 break;
232 }
233
234 /* if we failed, all future posted messages fail until reset */
235 if (!countdown)
236 mbx->timeout = 0;
237out:
238 return countdown ? E1000_SUCCESS : -E1000_ERR_MBX;
239}
240
251s32 e1000_read_posted_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
252{
253 struct e1000_mbx_info *mbx = &hw->mbx;
254 s32 ret_val = -E1000_ERR_MBX;
255
256 DEBUGFUNC("e1000_read_posted_mbx");
257
258 if (!mbx->ops.read)
259 goto out;
260
261 ret_val = e1000_poll_for_msg(hw, mbx_id);
262
263 /* if ack received read message, otherwise we timed out */
264 if (!ret_val)
265 ret_val = mbx->ops.read(hw, msg, size, mbx_id);
266out:
267 return ret_val;
268}
269
281{
282 struct e1000_mbx_info *mbx = &hw->mbx;
283 s32 ret_val = -E1000_ERR_MBX;
284
285 DEBUGFUNC("e1000_write_posted_mbx");
286
287 /* exit if either we can't write or there isn't a defined timeout */
288 if (!mbx->ops.write || !mbx->timeout)
289 goto out;
290
291 /* send msg */
292 ret_val = mbx->ops.write(hw, msg, size, mbx_id);
293
294 /* if msg sent wait until we receive an ack */
295 if (!ret_val)
296 ret_val = e1000_poll_for_ack(hw, mbx_id);
297out:
298 return ret_val;
299}
300
308{
309 struct e1000_mbx_info *mbx = &hw->mbx;
318}
319
328{
329 u32 v2p_mailbox = E1000_READ_REG(hw, E1000_V2PMAILBOX(0));
330
331 v2p_mailbox |= hw->dev_spec.vf.v2p_mailbox;
333
334 return v2p_mailbox;
335}
336
345static s32 e1000_check_for_bit_vf(struct e1000_hw *hw, u32 mask)
346{
347 u32 v2p_mailbox = e1000_read_v2p_mailbox(hw);
348 s32 ret_val = -E1000_ERR_MBX;
349
350 if (v2p_mailbox & mask)
351 ret_val = E1000_SUCCESS;
352
353 hw->dev_spec.vf.v2p_mailbox &= ~mask;
354
355 return ret_val;
356}
357
366 u16 E1000_UNUSEDARG mbx_id)
367{
368 s32 ret_val = -E1000_ERR_MBX;
369
370 DEBUGFUNC("e1000_check_for_msg_vf");
371
373 ret_val = E1000_SUCCESS;
374 hw->mbx.stats.reqs++;
375 }
376
377 return ret_val;
378}
379
388 u16 E1000_UNUSEDARG mbx_id)
389{
390 s32 ret_val = -E1000_ERR_MBX;
391
392 DEBUGFUNC("e1000_check_for_ack_vf");
393
395 ret_val = E1000_SUCCESS;
396 hw->mbx.stats.acks++;
397 }
398
399 return ret_val;
400}
401
410 u16 E1000_UNUSEDARG mbx_id)
411{
412 s32 ret_val = -E1000_ERR_MBX;
413
414 DEBUGFUNC("e1000_check_for_rst_vf");
415
418 ret_val = E1000_SUCCESS;
419 hw->mbx.stats.rsts++;
420 }
421
422 return ret_val;
423}
424
432{
433 s32 ret_val = -E1000_ERR_MBX;
434 int count = 10;
435
436 DEBUGFUNC("e1000_obtain_mbx_lock_vf");
437
438 do {
439 /* Take ownership of the buffer */
441
442 /* reserve mailbox for vf use */
444 ret_val = E1000_SUCCESS;
445 break;
446 }
447 usec_delay(1000);
448 } while (count-- > 0);
449
450 return ret_val;
451}
452
462static s32 e1000_write_mbx_vf(struct e1000_hw *hw, u32 *msg, u16 size,
463 u16 E1000_UNUSEDARG mbx_id)
464{
465 s32 ret_val;
466 u16 i;
467
468
469 DEBUGFUNC("e1000_write_mbx_vf");
470
471 /* lock the mailbox to prevent pf/vf race condition */
472 ret_val = e1000_obtain_mbx_lock_vf(hw);
473 if (ret_val)
474 goto out_no_write;
475
476 /* flush msg and acks as we are overwriting the message buffer */
479
480 /* copy the caller specified message to the mailbox memory buffer */
481 for (i = 0; i < size; i++)
482 E1000_WRITE_REG_ARRAY(hw, E1000_VMBMEM(0), i, msg[i]);
483
484 /* update stats */
485 hw->mbx.stats.msgs_tx++;
486
487 /* Drop VFU and interrupt the PF to tell it a message has been sent */
489
490out_no_write:
491 return ret_val;
492}
493
503static s32 e1000_read_mbx_vf(struct e1000_hw *hw, u32 *msg, u16 size,
504 u16 E1000_UNUSEDARG mbx_id)
505{
506 s32 ret_val = E1000_SUCCESS;
507 u16 i;
508
509 DEBUGFUNC("e1000_read_mbx_vf");
510
511 /* lock the mailbox to prevent pf/vf race condition */
512 ret_val = e1000_obtain_mbx_lock_vf(hw);
513 if (ret_val)
514 goto out_no_read;
515
516 /* copy the message from the mailbox memory buffer */
517 for (i = 0; i < size; i++)
518 msg[i] = E1000_READ_REG_ARRAY(hw, E1000_VMBMEM(0), i);
519
520 /* Acknowledge receipt and release mailbox, then we're done */
522
523 /* update stats */
524 hw->mbx.stats.msgs_rx++;
525
526out_no_read:
527 return ret_val;
528}
529
537{
538 struct e1000_mbx_info *mbx = &hw->mbx;
539
540 /* start mailbox as timed out and let the reset_hw call set the timeout
541 * value to begin communications */
542 mbx->timeout = 0;
544
546
554
555 mbx->stats.msgs_tx = 0;
556 mbx->stats.msgs_rx = 0;
557 mbx->stats.reqs = 0;
558 mbx->stats.acks = 0;
559 mbx->stats.rsts = 0;
560
561 return E1000_SUCCESS;
562}
563
564static s32 e1000_check_for_bit_pf(struct e1000_hw *hw, u32 mask)
565{
566 u32 mbvficr = E1000_READ_REG(hw, E1000_MBVFICR);
567 s32 ret_val = -E1000_ERR_MBX;
568
569 if (mbvficr & mask) {
570 ret_val = E1000_SUCCESS;
572 }
573
574 return ret_val;
575}
576
584static s32 e1000_check_for_msg_pf(struct e1000_hw *hw, u16 vf_number)
585{
586 s32 ret_val = -E1000_ERR_MBX;
587
588 DEBUGFUNC("e1000_check_for_msg_pf");
589
590 if (!e1000_check_for_bit_pf(hw, E1000_MBVFICR_VFREQ_VF1 << vf_number)) {
591 ret_val = E1000_SUCCESS;
592 hw->mbx.stats.reqs++;
593 }
594
595 return ret_val;
596}
597
605static s32 e1000_check_for_ack_pf(struct e1000_hw *hw, u16 vf_number)
606{
607 s32 ret_val = -E1000_ERR_MBX;
608
609 DEBUGFUNC("e1000_check_for_ack_pf");
610
611 if (!e1000_check_for_bit_pf(hw, E1000_MBVFICR_VFACK_VF1 << vf_number)) {
612 ret_val = E1000_SUCCESS;
613 hw->mbx.stats.acks++;
614 }
615
616 return ret_val;
617}
618
626static s32 e1000_check_for_rst_pf(struct e1000_hw *hw, u16 vf_number)
627{
628 u32 vflre = E1000_READ_REG(hw, E1000_VFLRE);
629 s32 ret_val = -E1000_ERR_MBX;
630
631 DEBUGFUNC("e1000_check_for_rst_pf");
632
633 if (vflre & (1 << vf_number)) {
634 ret_val = E1000_SUCCESS;
635 E1000_WRITE_REG(hw, E1000_VFLRE, (1 << vf_number));
636 hw->mbx.stats.rsts++;
637 }
638
639 return ret_val;
640}
641
649static s32 e1000_obtain_mbx_lock_pf(struct e1000_hw *hw, u16 vf_number)
650{
651 s32 ret_val = -E1000_ERR_MBX;
652 u32 p2v_mailbox;
653 int count = 10;
654
655 DEBUGFUNC("e1000_obtain_mbx_lock_pf");
656
657 do {
658 /* Take ownership of the buffer */
659 E1000_WRITE_REG(hw, E1000_P2VMAILBOX(vf_number),
661
662 /* reserve mailbox for pf use */
663 p2v_mailbox = E1000_READ_REG(hw, E1000_P2VMAILBOX(vf_number));
664 if (p2v_mailbox & E1000_P2VMAILBOX_PFU) {
665 ret_val = E1000_SUCCESS;
666 break;
667 }
668 usec_delay(1000);
669 } while (count-- > 0);
670
671 return ret_val;
672
673}
674
684static s32 e1000_write_mbx_pf(struct e1000_hw *hw, u32 *msg, u16 size,
685 u16 vf_number)
686{
687 s32 ret_val;
688 u16 i;
689
690 DEBUGFUNC("e1000_write_mbx_pf");
691
692 /* lock the mailbox to prevent pf/vf race condition */
693 ret_val = e1000_obtain_mbx_lock_pf(hw, vf_number);
694 if (ret_val)
695 goto out_no_write;
696
697 /* flush msg and acks as we are overwriting the message buffer */
698 e1000_check_for_msg_pf(hw, vf_number);
699 e1000_check_for_ack_pf(hw, vf_number);
700
701 /* copy the caller specified message to the mailbox memory buffer */
702 for (i = 0; i < size; i++)
703 E1000_WRITE_REG_ARRAY(hw, E1000_VMBMEM(vf_number), i, msg[i]);
704
705 /* Interrupt VF to tell it a message has been sent and release buffer*/
707
708 /* update stats */
709 hw->mbx.stats.msgs_tx++;
710
711out_no_write:
712 return ret_val;
713
714}
715
727static s32 e1000_read_mbx_pf(struct e1000_hw *hw, u32 *msg, u16 size,
728 u16 vf_number)
729{
730 s32 ret_val;
731 u16 i;
732
733 DEBUGFUNC("e1000_read_mbx_pf");
734
735 /* lock the mailbox to prevent pf/vf race condition */
736 ret_val = e1000_obtain_mbx_lock_pf(hw, vf_number);
737 if (ret_val)
738 goto out_no_read;
739
740 /* copy the message to the mailbox memory buffer */
741 for (i = 0; i < size; i++)
742 msg[i] = E1000_READ_REG_ARRAY(hw, E1000_VMBMEM(vf_number), i);
743
744 /* Acknowledge the message and release buffer */
746
747 /* update stats */
748 hw->mbx.stats.msgs_rx++;
749
750out_no_read:
751 return ret_val;
752}
753
761{
762 struct e1000_mbx_info *mbx = &hw->mbx;
763
764 switch (hw->mac.type) {
765 case e1000_82576:
766 case e1000_i350:
767 case e1000_i354:
768 mbx->timeout = 0;
769 mbx->usec_delay = 0;
770
772
780
781 mbx->stats.msgs_tx = 0;
782 mbx->stats.msgs_rx = 0;
783 mbx->stats.reqs = 0;
784 mbx->stats.acks = 0;
785 mbx->stats.rsts = 0;
786 /* FALLTHROUGH */
787 default:
788 return E1000_SUCCESS;
789 }
790}
791
#define E1000_ERR_MBX
#define E1000_SUCCESS
#define E1000_UNUSEDARG
@ e1000_i354
Definition: e1000_hw.h:273
@ e1000_i350
Definition: e1000_hw.h:272
@ e1000_82576
Definition: e1000_hw.h:270
s32 e1000_null_ops_generic(struct e1000_hw E1000_UNUSEDARG *hw)
Definition: e1000_mac.c:88
static s32 e1000_write_mbx_pf(struct e1000_hw *hw, u32 *msg, u16 size, u16 vf_number)
Definition: e1000_mbx.c:684
static s32 e1000_null_mbx_transact(struct e1000_hw E1000_UNUSEDARG *hw, u32 E1000_UNUSEDARG *msg, u16 E1000_UNUSEDARG size, u16 E1000_UNUSEDARG mbx_id)
Definition: e1000_mbx.c:58
static s32 e1000_write_mbx_vf(struct e1000_hw *hw, u32 *msg, u16 size, u16 E1000_UNUSEDARG mbx_id)
Definition: e1000_mbx.c:462
static u32 e1000_read_v2p_mailbox(struct e1000_hw *hw)
Definition: e1000_mbx.c:327
static s32 e1000_check_for_bit_vf(struct e1000_hw *hw, u32 mask)
Definition: e1000_mbx.c:345
static s32 e1000_check_for_ack_pf(struct e1000_hw *hw, u16 vf_number)
Definition: e1000_mbx.c:605
static s32 e1000_check_for_msg_vf(struct e1000_hw *hw, u16 E1000_UNUSEDARG mbx_id)
Definition: e1000_mbx.c:365
static s32 e1000_check_for_msg_pf(struct e1000_hw *hw, u16 vf_number)
Definition: e1000_mbx.c:584
s32 e1000_write_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
Definition: e1000_mbx.c:103
s32 e1000_init_mbx_params_vf(struct e1000_hw *hw)
Definition: e1000_mbx.c:536
static s32 e1000_null_mbx_check_for_flag(struct e1000_hw E1000_UNUSEDARG *hw, u16 E1000_UNUSEDARG mbx_id)
Definition: e1000_mbx.c:43
s32 e1000_read_posted_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
Definition: e1000_mbx.c:251
void e1000_init_mbx_ops_generic(struct e1000_hw *hw)
Definition: e1000_mbx.c:307
s32 e1000_init_mbx_params_pf(struct e1000_hw *hw)
Definition: e1000_mbx.c:760
static s32 e1000_check_for_rst_vf(struct e1000_hw *hw, u16 E1000_UNUSEDARG mbx_id)
Definition: e1000_mbx.c:409
static s32 e1000_poll_for_ack(struct e1000_hw *hw, u16 mbx_id)
Definition: e1000_mbx.c:217
static s32 e1000_read_mbx_pf(struct e1000_hw *hw, u32 *msg, u16 size, u16 vf_number)
Definition: e1000_mbx.c:727
s32 e1000_read_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
Definition: e1000_mbx.c:77
static s32 e1000_obtain_mbx_lock_pf(struct e1000_hw *hw, u16 vf_number)
Definition: e1000_mbx.c:649
static s32 e1000_check_for_ack_vf(struct e1000_hw *hw, u16 E1000_UNUSEDARG mbx_id)
Definition: e1000_mbx.c:387
static s32 e1000_read_mbx_vf(struct e1000_hw *hw, u32 *msg, u16 size, u16 E1000_UNUSEDARG mbx_id)
Definition: e1000_mbx.c:503
s32 e1000_check_for_msg(struct e1000_hw *hw, u16 mbx_id)
Definition: e1000_mbx.c:126
static s32 e1000_obtain_mbx_lock_vf(struct e1000_hw *hw)
Definition: e1000_mbx.c:431
static s32 e1000_poll_for_msg(struct e1000_hw *hw, u16 mbx_id)
Definition: e1000_mbx.c:186
static s32 e1000_check_for_rst_pf(struct e1000_hw *hw, u16 vf_number)
Definition: e1000_mbx.c:626
static s32 e1000_check_for_bit_pf(struct e1000_hw *hw, u32 mask)
Definition: e1000_mbx.c:564
s32 e1000_check_for_rst(struct e1000_hw *hw, u16 mbx_id)
Definition: e1000_mbx.c:166
s32 e1000_write_posted_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
Definition: e1000_mbx.c:280
s32 e1000_check_for_ack(struct e1000_hw *hw, u16 mbx_id)
Definition: e1000_mbx.c:146
#define E1000_V2PMAILBOX_R2C_BITS
Definition: e1000_mbx.h:50
#define E1000_P2VMAILBOX_ACK
Definition: e1000_mbx.h:53
#define E1000_VF_MBX_INIT_DELAY
Definition: e1000_mbx.h:94
#define E1000_V2PMAILBOX_RSTI
Definition: e1000_mbx.h:48
#define E1000_MBVFICR_VFACK_VF1
Definition: e1000_mbx.h:61
#define E1000_VFMAILBOX_SIZE
Definition: e1000_mbx.h:63
#define E1000_P2VMAILBOX_PFU
Definition: e1000_mbx.h:55
#define E1000_MBVFICR_VFREQ_VF1
Definition: e1000_mbx.h:59
#define E1000_V2PMAILBOX_REQ
Definition: e1000_mbx.h:42
#define E1000_V2PMAILBOX_VFU
Definition: e1000_mbx.h:44
#define E1000_V2PMAILBOX_PFSTS
Definition: e1000_mbx.h:46
#define E1000_V2PMAILBOX_RSTD
Definition: e1000_mbx.h:49
#define E1000_P2VMAILBOX_STS
Definition: e1000_mbx.h:52
#define E1000_V2PMAILBOX_ACK
Definition: e1000_mbx.h:43
#define E1000_V2PMAILBOX_PFACK
Definition: e1000_mbx.h:47
#define usec_delay(x)
Definition: e1000_osdep.h:101
#define E1000_WRITE_REG_ARRAY(hw, reg, index, value)
Definition: e1000_osdep.h:206
#define E1000_READ_REG_ARRAY(hw, reg, index)
Definition: e1000_osdep.h:201
#define DEBUGFUNC(F)
Definition: e1000_osdep.h:115
#define E1000_WRITE_REG(hw, reg, value)
Definition: e1000_osdep.h:196
uint16_t u16
Definition: e1000_osdep.h:123
#define E1000_READ_REG(hw, reg)
Definition: e1000_osdep.h:191
int32_t s32
Definition: e1000_osdep.h:126
uint32_t u32
Definition: e1000_osdep.h:122
#define E1000_MBVFICR
Definition: e1000_regs.h:570
#define E1000_VFLRE
Definition: e1000_regs.h:572
#define E1000_V2PMAILBOX(_n)
Definition: e1000_regs.h:591
#define E1000_P2VMAILBOX(_n)
Definition: e1000_regs.h:592
#define E1000_VMBMEM(_n)
Definition: e1000_regs.h:593
union e1000_hw::@46 dev_spec
struct e1000_mac_info mac
Definition: e1000_hw.h:1028
struct e1000_mbx_info mbx
Definition: e1000_hw.h:1033
struct e1000_dev_spec_vf vf
Definition: e1000_hw.h:1044
enum e1000_mac_type type
Definition: e1000_hw.h:815
struct e1000_mbx_stats stats
Definition: e1000_hw.h:945
struct e1000_mbx_operations ops
Definition: e1000_hw.h:944
s32(* check_for_ack)(struct e1000_hw *, u16)
Definition: e1000_hw.h:930
s32(* init_params)(struct e1000_hw *hw)
Definition: e1000_hw.h:924
s32(* write_posted)(struct e1000_hw *, u32 *, u16, u16)
Definition: e1000_hw.h:928
s32(* check_for_rst)(struct e1000_hw *, u16)
Definition: e1000_hw.h:931
s32(* write)(struct e1000_hw *, u32 *, u16, u16)
Definition: e1000_hw.h:926
s32(* check_for_msg)(struct e1000_hw *, u16)
Definition: e1000_hw.h:929
s32(* read)(struct e1000_hw *, u32 *, u16, u16)
Definition: e1000_hw.h:925
s32(* read_posted)(struct e1000_hw *, u32 *, u16, u16)
Definition: e1000_hw.h:927