1 /******************************************************************************
2 SPDX-License-Identifier: BSD-3-Clause
4 Copyright (c) 2001-2020, Intel Corporation
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
10 1. Redistributions of source code must retain the above copyright notice,
11 this list of conditions and the following disclaimer.
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.
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.
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.
33 ******************************************************************************/
36 #include "e1000_mbx.h"
39 * e1000_null_mbx_check_for_flag - No-op function, return 0
40 * @hw: pointer to the HW structure
41 * @mbx_id: id of mailbox to read
43 static s32 e1000_null_mbx_check_for_flag(struct e1000_hw E1000_UNUSEDARG *hw,
44 u16 E1000_UNUSEDARG mbx_id)
46 DEBUGFUNC("e1000_null_mbx_check_flag");
52 * e1000_null_mbx_transact - No-op function, return 0
53 * @hw: pointer to the HW structure
54 * @msg: The message buffer
55 * @size: Length of buffer
56 * @mbx_id: id of mailbox to read
58 static s32 e1000_null_mbx_transact(struct e1000_hw E1000_UNUSEDARG *hw,
59 u32 E1000_UNUSEDARG *msg,
60 u16 E1000_UNUSEDARG size,
61 u16 E1000_UNUSEDARG mbx_id)
63 DEBUGFUNC("e1000_null_mbx_rw_msg");
69 * e1000_read_mbx - Reads a message from the mailbox
70 * @hw: pointer to the HW structure
71 * @msg: The message buffer
72 * @size: Length of buffer
73 * @mbx_id: id of mailbox to read
75 * returns SUCCESS if it successfully read message from buffer
77 s32 e1000_read_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
79 struct e1000_mbx_info *mbx = &hw->mbx;
80 s32 ret_val = -E1000_ERR_MBX;
82 DEBUGFUNC("e1000_read_mbx");
84 /* limit read to size of mailbox */
89 ret_val = mbx->ops.read(hw, msg, size, mbx_id);
95 * e1000_write_mbx - Write a message to the mailbox
96 * @hw: pointer to the HW structure
97 * @msg: The message buffer
98 * @size: Length of buffer
99 * @mbx_id: id of mailbox to write
101 * returns SUCCESS if it successfully copied message into the buffer
103 s32 e1000_write_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
105 struct e1000_mbx_info *mbx = &hw->mbx;
106 s32 ret_val = E1000_SUCCESS;
108 DEBUGFUNC("e1000_write_mbx");
110 if (size > mbx->size)
111 ret_val = -E1000_ERR_MBX;
113 else if (mbx->ops.write)
114 ret_val = mbx->ops.write(hw, msg, size, mbx_id);
120 * e1000_check_for_msg - checks to see if someone sent us mail
121 * @hw: pointer to the HW structure
122 * @mbx_id: id of mailbox to check
124 * returns SUCCESS if the Status bit was found or else ERR_MBX
126 s32 e1000_check_for_msg(struct e1000_hw *hw, u16 mbx_id)
128 struct e1000_mbx_info *mbx = &hw->mbx;
129 s32 ret_val = -E1000_ERR_MBX;
131 DEBUGFUNC("e1000_check_for_msg");
133 if (mbx->ops.check_for_msg)
134 ret_val = mbx->ops.check_for_msg(hw, mbx_id);
140 * e1000_check_for_ack - checks to see if someone sent us ACK
141 * @hw: pointer to the HW structure
142 * @mbx_id: id of mailbox to check
144 * returns SUCCESS if the Status bit was found or else ERR_MBX
146 s32 e1000_check_for_ack(struct e1000_hw *hw, u16 mbx_id)
148 struct e1000_mbx_info *mbx = &hw->mbx;
149 s32 ret_val = -E1000_ERR_MBX;
151 DEBUGFUNC("e1000_check_for_ack");
153 if (mbx->ops.check_for_ack)
154 ret_val = mbx->ops.check_for_ack(hw, mbx_id);
160 * e1000_check_for_rst - checks to see if other side has reset
161 * @hw: pointer to the HW structure
162 * @mbx_id: id of mailbox to check
164 * returns SUCCESS if the Status bit was found or else ERR_MBX
166 s32 e1000_check_for_rst(struct e1000_hw *hw, u16 mbx_id)
168 struct e1000_mbx_info *mbx = &hw->mbx;
169 s32 ret_val = -E1000_ERR_MBX;
171 DEBUGFUNC("e1000_check_for_rst");
173 if (mbx->ops.check_for_rst)
174 ret_val = mbx->ops.check_for_rst(hw, mbx_id);
180 * e1000_poll_for_msg - Wait for message notification
181 * @hw: pointer to the HW structure
182 * @mbx_id: id of mailbox to write
184 * returns SUCCESS if it successfully received a message notification
186 static s32 e1000_poll_for_msg(struct e1000_hw *hw, u16 mbx_id)
188 struct e1000_mbx_info *mbx = &hw->mbx;
189 int countdown = mbx->timeout;
191 DEBUGFUNC("e1000_poll_for_msg");
193 if (!countdown || !mbx->ops.check_for_msg)
196 while (countdown && mbx->ops.check_for_msg(hw, mbx_id)) {
200 usec_delay(mbx->usec_delay);
203 /* if we failed, all future posted messages fail until reset */
207 return countdown ? E1000_SUCCESS : -E1000_ERR_MBX;
211 * e1000_poll_for_ack - Wait for message acknowledgement
212 * @hw: pointer to the HW structure
213 * @mbx_id: id of mailbox to write
215 * returns SUCCESS if it successfully received a message acknowledgement
217 static s32 e1000_poll_for_ack(struct e1000_hw *hw, u16 mbx_id)
219 struct e1000_mbx_info *mbx = &hw->mbx;
220 int countdown = mbx->timeout;
222 DEBUGFUNC("e1000_poll_for_ack");
224 if (!countdown || !mbx->ops.check_for_ack)
227 while (countdown && mbx->ops.check_for_ack(hw, mbx_id)) {
231 usec_delay(mbx->usec_delay);
234 /* if we failed, all future posted messages fail until reset */
238 return countdown ? E1000_SUCCESS : -E1000_ERR_MBX;
242 * e1000_read_posted_mbx - Wait for message notification and receive message
243 * @hw: pointer to the HW structure
244 * @msg: The message buffer
245 * @size: Length of buffer
246 * @mbx_id: id of mailbox to write
248 * returns SUCCESS if it successfully received a message notification and
249 * copied it into the receive buffer.
251 s32 e1000_read_posted_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
253 struct e1000_mbx_info *mbx = &hw->mbx;
254 s32 ret_val = -E1000_ERR_MBX;
256 DEBUGFUNC("e1000_read_posted_mbx");
261 ret_val = e1000_poll_for_msg(hw, mbx_id);
263 /* if ack received read message, otherwise we timed out */
265 ret_val = mbx->ops.read(hw, msg, size, mbx_id);
271 * e1000_write_posted_mbx - Write a message to the mailbox, wait for ack
272 * @hw: pointer to the HW structure
273 * @msg: The message buffer
274 * @size: Length of buffer
275 * @mbx_id: id of mailbox to write
277 * returns SUCCESS if it successfully copied message into the buffer and
278 * received an ack to that message within delay * timeout period
280 s32 e1000_write_posted_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id)
282 struct e1000_mbx_info *mbx = &hw->mbx;
283 s32 ret_val = -E1000_ERR_MBX;
285 DEBUGFUNC("e1000_write_posted_mbx");
287 /* exit if either we can't write or there isn't a defined timeout */
288 if (!mbx->ops.write || !mbx->timeout)
292 ret_val = mbx->ops.write(hw, msg, size, mbx_id);
294 /* if msg sent wait until we receive an ack */
296 ret_val = e1000_poll_for_ack(hw, mbx_id);
302 * e1000_init_mbx_ops_generic - Initialize mbx function pointers
303 * @hw: pointer to the HW structure
305 * Sets the function pointers to no-op functions
307 void e1000_init_mbx_ops_generic(struct e1000_hw *hw)
309 struct e1000_mbx_info *mbx = &hw->mbx;
310 mbx->ops.init_params = e1000_null_ops_generic;
311 mbx->ops.read = e1000_null_mbx_transact;
312 mbx->ops.write = e1000_null_mbx_transact;
313 mbx->ops.check_for_msg = e1000_null_mbx_check_for_flag;
314 mbx->ops.check_for_ack = e1000_null_mbx_check_for_flag;
315 mbx->ops.check_for_rst = e1000_null_mbx_check_for_flag;
316 mbx->ops.read_posted = e1000_read_posted_mbx;
317 mbx->ops.write_posted = e1000_write_posted_mbx;
321 * e1000_read_v2p_mailbox - read v2p mailbox
322 * @hw: pointer to the HW structure
324 * This function is used to read the v2p mailbox without losing the read to
327 static u32 e1000_read_v2p_mailbox(struct e1000_hw *hw)
329 u32 v2p_mailbox = E1000_READ_REG(hw, E1000_V2PMAILBOX(0));
331 v2p_mailbox |= hw->dev_spec.vf.v2p_mailbox;
332 hw->dev_spec.vf.v2p_mailbox |= v2p_mailbox & E1000_V2PMAILBOX_R2C_BITS;
338 * e1000_check_for_bit_vf - Determine if a status bit was set
339 * @hw: pointer to the HW structure
340 * @mask: bitmask for bits to be tested and cleared
342 * This function is used to check for the read to clear bits within
345 static s32 e1000_check_for_bit_vf(struct e1000_hw *hw, u32 mask)
347 u32 v2p_mailbox = e1000_read_v2p_mailbox(hw);
348 s32 ret_val = -E1000_ERR_MBX;
350 if (v2p_mailbox & mask)
351 ret_val = E1000_SUCCESS;
353 hw->dev_spec.vf.v2p_mailbox &= ~mask;
359 * e1000_check_for_msg_vf - checks to see if the PF has sent mail
360 * @hw: pointer to the HW structure
361 * @mbx_id: id of mailbox to check
363 * returns SUCCESS if the PF has set the Status bit or else ERR_MBX
365 static s32 e1000_check_for_msg_vf(struct e1000_hw *hw,
366 u16 E1000_UNUSEDARG mbx_id)
368 s32 ret_val = -E1000_ERR_MBX;
370 DEBUGFUNC("e1000_check_for_msg_vf");
372 if (!e1000_check_for_bit_vf(hw, E1000_V2PMAILBOX_PFSTS)) {
373 ret_val = E1000_SUCCESS;
374 hw->mbx.stats.reqs++;
381 * e1000_check_for_ack_vf - checks to see if the PF has ACK'd
382 * @hw: pointer to the HW structure
383 * @mbx_id: id of mailbox to check
385 * returns SUCCESS if the PF has set the ACK bit or else ERR_MBX
387 static s32 e1000_check_for_ack_vf(struct e1000_hw *hw,
388 u16 E1000_UNUSEDARG mbx_id)
390 s32 ret_val = -E1000_ERR_MBX;
392 DEBUGFUNC("e1000_check_for_ack_vf");
394 if (!e1000_check_for_bit_vf(hw, E1000_V2PMAILBOX_PFACK)) {
395 ret_val = E1000_SUCCESS;
396 hw->mbx.stats.acks++;
403 * e1000_check_for_rst_vf - checks to see if the PF has reset
404 * @hw: pointer to the HW structure
405 * @mbx_id: id of mailbox to check
407 * returns true if the PF has set the reset done bit or else false
409 static s32 e1000_check_for_rst_vf(struct e1000_hw *hw,
410 u16 E1000_UNUSEDARG mbx_id)
412 s32 ret_val = -E1000_ERR_MBX;
414 DEBUGFUNC("e1000_check_for_rst_vf");
416 if (!e1000_check_for_bit_vf(hw, (E1000_V2PMAILBOX_RSTD |
417 E1000_V2PMAILBOX_RSTI))) {
418 ret_val = E1000_SUCCESS;
419 hw->mbx.stats.rsts++;
426 * e1000_obtain_mbx_lock_vf - obtain mailbox lock
427 * @hw: pointer to the HW structure
429 * return SUCCESS if we obtained the mailbox lock
431 static s32 e1000_obtain_mbx_lock_vf(struct e1000_hw *hw)
433 s32 ret_val = -E1000_ERR_MBX;
436 DEBUGFUNC("e1000_obtain_mbx_lock_vf");
439 /* Take ownership of the buffer */
440 E1000_WRITE_REG(hw, E1000_V2PMAILBOX(0), E1000_V2PMAILBOX_VFU);
442 /* reserve mailbox for vf use */
443 if (e1000_read_v2p_mailbox(hw) & E1000_V2PMAILBOX_VFU) {
444 ret_val = E1000_SUCCESS;
448 } while (count-- > 0);
454 * e1000_write_mbx_vf - Write a message to the mailbox
455 * @hw: pointer to the HW structure
456 * @msg: The message buffer
457 * @size: Length of buffer
458 * @mbx_id: id of mailbox to write
460 * returns SUCCESS if it successfully copied message into the buffer
462 static s32 e1000_write_mbx_vf(struct e1000_hw *hw, u32 *msg, u16 size,
463 u16 E1000_UNUSEDARG mbx_id)
469 DEBUGFUNC("e1000_write_mbx_vf");
471 /* lock the mailbox to prevent pf/vf race condition */
472 ret_val = e1000_obtain_mbx_lock_vf(hw);
476 /* flush msg and acks as we are overwriting the message buffer */
477 e1000_check_for_msg_vf(hw, 0);
478 e1000_check_for_ack_vf(hw, 0);
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]);
485 hw->mbx.stats.msgs_tx++;
487 /* Drop VFU and interrupt the PF to tell it a message has been sent */
488 E1000_WRITE_REG(hw, E1000_V2PMAILBOX(0), E1000_V2PMAILBOX_REQ);
495 * e1000_read_mbx_vf - Reads a message from the inbox intended for vf
496 * @hw: pointer to the HW structure
497 * @msg: The message buffer
498 * @size: Length of buffer
499 * @mbx_id: id of mailbox to read
501 * returns SUCCESS if it successfully read message from buffer
503 static s32 e1000_read_mbx_vf(struct e1000_hw *hw, u32 *msg, u16 size,
504 u16 E1000_UNUSEDARG mbx_id)
506 s32 ret_val = E1000_SUCCESS;
509 DEBUGFUNC("e1000_read_mbx_vf");
511 /* lock the mailbox to prevent pf/vf race condition */
512 ret_val = e1000_obtain_mbx_lock_vf(hw);
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);
520 /* Acknowledge receipt and release mailbox, then we're done */
521 E1000_WRITE_REG(hw, E1000_V2PMAILBOX(0), E1000_V2PMAILBOX_ACK);
524 hw->mbx.stats.msgs_rx++;
531 * e1000_init_mbx_params_vf - set initial values for vf mailbox
532 * @hw: pointer to the HW structure
534 * Initializes the hw->mbx struct to correct values for vf mailbox
536 s32 e1000_init_mbx_params_vf(struct e1000_hw *hw)
538 struct e1000_mbx_info *mbx = &hw->mbx;
540 /* start mailbox as timed out and let the reset_hw call set the timeout
541 * value to begin communications */
543 mbx->usec_delay = E1000_VF_MBX_INIT_DELAY;
545 mbx->size = E1000_VFMAILBOX_SIZE;
547 mbx->ops.read = e1000_read_mbx_vf;
548 mbx->ops.write = e1000_write_mbx_vf;
549 mbx->ops.read_posted = e1000_read_posted_mbx;
550 mbx->ops.write_posted = e1000_write_posted_mbx;
551 mbx->ops.check_for_msg = e1000_check_for_msg_vf;
552 mbx->ops.check_for_ack = e1000_check_for_ack_vf;
553 mbx->ops.check_for_rst = e1000_check_for_rst_vf;
555 mbx->stats.msgs_tx = 0;
556 mbx->stats.msgs_rx = 0;
561 return E1000_SUCCESS;
564 static s32 e1000_check_for_bit_pf(struct e1000_hw *hw, u32 mask)
566 u32 mbvficr = E1000_READ_REG(hw, E1000_MBVFICR);
567 s32 ret_val = -E1000_ERR_MBX;
569 if (mbvficr & mask) {
570 ret_val = E1000_SUCCESS;
571 E1000_WRITE_REG(hw, E1000_MBVFICR, mask);
578 * e1000_check_for_msg_pf - checks to see if the VF has sent mail
579 * @hw: pointer to the HW structure
580 * @vf_number: the VF index
582 * returns SUCCESS if the VF has set the Status bit or else ERR_MBX
584 static s32 e1000_check_for_msg_pf(struct e1000_hw *hw, u16 vf_number)
586 s32 ret_val = -E1000_ERR_MBX;
588 DEBUGFUNC("e1000_check_for_msg_pf");
590 if (!e1000_check_for_bit_pf(hw, E1000_MBVFICR_VFREQ_VF1 << vf_number)) {
591 ret_val = E1000_SUCCESS;
592 hw->mbx.stats.reqs++;
599 * e1000_check_for_ack_pf - checks to see if the VF has ACKed
600 * @hw: pointer to the HW structure
601 * @vf_number: the VF index
603 * returns SUCCESS if the VF has set the Status bit or else ERR_MBX
605 static s32 e1000_check_for_ack_pf(struct e1000_hw *hw, u16 vf_number)
607 s32 ret_val = -E1000_ERR_MBX;
609 DEBUGFUNC("e1000_check_for_ack_pf");
611 if (!e1000_check_for_bit_pf(hw, E1000_MBVFICR_VFACK_VF1 << vf_number)) {
612 ret_val = E1000_SUCCESS;
613 hw->mbx.stats.acks++;
620 * e1000_check_for_rst_pf - checks to see if the VF has reset
621 * @hw: pointer to the HW structure
622 * @vf_number: the VF index
624 * returns SUCCESS if the VF has set the Status bit or else ERR_MBX
626 static s32 e1000_check_for_rst_pf(struct e1000_hw *hw, u16 vf_number)
628 u32 vflre = E1000_READ_REG(hw, E1000_VFLRE);
629 s32 ret_val = -E1000_ERR_MBX;
631 DEBUGFUNC("e1000_check_for_rst_pf");
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++;
643 * e1000_obtain_mbx_lock_pf - obtain mailbox lock
644 * @hw: pointer to the HW structure
645 * @vf_number: the VF index
647 * return SUCCESS if we obtained the mailbox lock
649 static s32 e1000_obtain_mbx_lock_pf(struct e1000_hw *hw, u16 vf_number)
651 s32 ret_val = -E1000_ERR_MBX;
655 DEBUGFUNC("e1000_obtain_mbx_lock_pf");
658 /* Take ownership of the buffer */
659 E1000_WRITE_REG(hw, E1000_P2VMAILBOX(vf_number),
660 E1000_P2VMAILBOX_PFU);
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;
669 } while (count-- > 0);
676 * e1000_write_mbx_pf - Places a message in the mailbox
677 * @hw: pointer to the HW structure
678 * @msg: The message buffer
679 * @size: Length of buffer
680 * @vf_number: the VF index
682 * returns SUCCESS if it successfully copied message into the buffer
684 static s32 e1000_write_mbx_pf(struct e1000_hw *hw, u32 *msg, u16 size,
690 DEBUGFUNC("e1000_write_mbx_pf");
692 /* lock the mailbox to prevent pf/vf race condition */
693 ret_val = e1000_obtain_mbx_lock_pf(hw, vf_number);
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);
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]);
705 /* Interrupt VF to tell it a message has been sent and release buffer*/
706 E1000_WRITE_REG(hw, E1000_P2VMAILBOX(vf_number), E1000_P2VMAILBOX_STS);
709 hw->mbx.stats.msgs_tx++;
717 * e1000_read_mbx_pf - Read a message from the mailbox
718 * @hw: pointer to the HW structure
719 * @msg: The message buffer
720 * @size: Length of buffer
721 * @vf_number: the VF index
723 * This function copies a message from the mailbox buffer to the caller's
724 * memory buffer. The presumption is that the caller knows that there was
725 * a message due to a VF request so no polling for message is needed.
727 static s32 e1000_read_mbx_pf(struct e1000_hw *hw, u32 *msg, u16 size,
733 DEBUGFUNC("e1000_read_mbx_pf");
735 /* lock the mailbox to prevent pf/vf race condition */
736 ret_val = e1000_obtain_mbx_lock_pf(hw, vf_number);
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);
744 /* Acknowledge the message and release buffer */
745 E1000_WRITE_REG(hw, E1000_P2VMAILBOX(vf_number), E1000_P2VMAILBOX_ACK);
748 hw->mbx.stats.msgs_rx++;
755 * e1000_init_mbx_params_pf - set initial values for pf mailbox
756 * @hw: pointer to the HW structure
758 * Initializes the hw->mbx struct to correct values for pf mailbox
760 s32 e1000_init_mbx_params_pf(struct e1000_hw *hw)
762 struct e1000_mbx_info *mbx = &hw->mbx;
764 switch (hw->mac.type) {
771 mbx->size = E1000_VFMAILBOX_SIZE;
773 mbx->ops.read = e1000_read_mbx_pf;
774 mbx->ops.write = e1000_write_mbx_pf;
775 mbx->ops.read_posted = e1000_read_posted_mbx;
776 mbx->ops.write_posted = e1000_write_posted_mbx;
777 mbx->ops.check_for_msg = e1000_check_for_msg_pf;
778 mbx->ops.check_for_ack = e1000_check_for_ack_pf;
779 mbx->ops.check_for_rst = e1000_check_for_rst_pf;
781 mbx->stats.msgs_tx = 0;
782 mbx->stats.msgs_rx = 0;
788 return E1000_SUCCESS;