2 Implementation of stopping a network interface.
4 Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
13 Call UNDI to stop the interface and changes the snp state.
15 @param Snp Pointer to snp driver structure
17 @retval EFI_SUCCESS The network interface was stopped.
18 @retval EFI_DEVICE_ERROR SNP is not initialized.
26 Snp
->Cdb
.OpCode
= PXE_OPCODE_STOP
;
27 Snp
->Cdb
.OpFlags
= PXE_OPFLAGS_NOT_USED
;
28 Snp
->Cdb
.CPBsize
= PXE_CPBSIZE_NOT_USED
;
29 Snp
->Cdb
.DBsize
= PXE_DBSIZE_NOT_USED
;
30 Snp
->Cdb
.CPBaddr
= PXE_CPBADDR_NOT_USED
;
31 Snp
->Cdb
.DBaddr
= PXE_DBADDR_NOT_USED
;
32 Snp
->Cdb
.StatCode
= PXE_STATCODE_INITIALIZE
;
33 Snp
->Cdb
.StatFlags
= PXE_STATFLAGS_INITIALIZE
;
34 Snp
->Cdb
.IFnum
= Snp
->IfNum
;
35 Snp
->Cdb
.Control
= PXE_CONTROL_LAST_CDB_IN_LIST
;
40 DEBUG ((EFI_D_NET
, "\nsnp->undi.stop() "));
42 (*Snp
->IssueUndi32Command
) ((UINT64
)(UINTN
) &Snp
->Cdb
);
44 if (Snp
->Cdb
.StatCode
!= PXE_STATCODE_SUCCESS
) {
47 "\nsnp->undi.stop() %xh:%xh\n",
52 return EFI_DEVICE_ERROR
;
55 // Set simple network state to Started and return success.
57 Snp
->Mode
.State
= EfiSimpleNetworkStopped
;
63 Changes the state of a network interface from "started" to "stopped."
65 This function stops a network interface. This call is only valid if the network
66 interface is in the started state. If the network interface was successfully
67 stopped, then EFI_SUCCESS will be returned.
69 @param This A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL
73 @retval EFI_SUCCESS The network interface was stopped.
74 @retval EFI_NOT_STARTED The network interface has not been started.
75 @retval EFI_INVALID_PARAMETER This parameter was NULL or did not point to a
76 valid EFI_SIMPLE_NETWORK_PROTOCOL structure.
77 @retval EFI_DEVICE_ERROR The command could not be sent to the network
79 @retval EFI_UNSUPPORTED This function is not supported by the network
86 IN EFI_SIMPLE_NETWORK_PROTOCOL
*This
94 return EFI_INVALID_PARAMETER
;
97 Snp
= EFI_SIMPLE_NETWORK_DEV_FROM_THIS (This
);
99 OldTpl
= gBS
->RaiseTPL (TPL_CALLBACK
);
101 switch (Snp
->Mode
.State
) {
102 case EfiSimpleNetworkStarted
:
105 case EfiSimpleNetworkStopped
:
106 Status
= EFI_NOT_STARTED
;
110 Status
= EFI_DEVICE_ERROR
;
114 Status
= PxeStop (Snp
);
117 gBS
->RestoreTPL (OldTpl
);