InOsEmuPkg: Rename package to EmulatorPkg & Sec to Host
* Rename InOsEmuPkg to EmulatorPkg * Rename Unix/Sec to Unix/Host Signed-off-by: jljusten Reviewed-by: andrewfish Reviewed-by: geekboy15a git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11918 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
318
EmulatorPkg/EmuSnpDxe/ComponentName.c
Normal file
318
EmulatorPkg/EmuSnpDxe/ComponentName.c
Normal file
@@ -0,0 +1,318 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2010, Apple, Inc. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
Module Name:
|
||||
|
||||
ComponentName.c
|
||||
|
||||
Abstract:
|
||||
|
||||
-**/
|
||||
|
||||
#include "EmuSnpDxe.h"
|
||||
|
||||
//
|
||||
// EFI Component Name Functions
|
||||
//
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
This function retrieves the user readable name of a driver in the form of a
|
||||
Unicode string. If the driver specified by This has a user readable name in
|
||||
the language specified by Language, then a pointer to the driver name is
|
||||
returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
|
||||
by This does not support the language specified by Language,
|
||||
then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified
|
||||
in RFC 4646 or ISO 639-2 language code format.
|
||||
|
||||
@param DriverName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
driver specified by This in the language
|
||||
specified by Language.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the Driver specified by
|
||||
This and the language specified by Language was
|
||||
returned in DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER DriverName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverComponentNameGetDriverName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the controller
|
||||
that is being managed by a driver.
|
||||
|
||||
This function retrieves the user readable name of the controller specified by
|
||||
ControllerHandle and ChildHandle in the form of a Unicode string. If the
|
||||
driver specified by This has a user readable name in the language specified by
|
||||
Language, then a pointer to the controller name is returned in ControllerName,
|
||||
and EFI_SUCCESS is returned. If the driver specified by This is not currently
|
||||
managing the controller specified by ControllerHandle and ChildHandle,
|
||||
then EFI_UNSUPPORTED is returned. If the driver specified by This does not
|
||||
support the language specified by Language, then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param ControllerHandle[in] The handle of a controller that the driver
|
||||
specified by This is managing. This handle
|
||||
specifies the controller whose name is to be
|
||||
returned.
|
||||
|
||||
@param ChildHandle[in] The handle of the child controller to retrieve
|
||||
the name of. This is an optional parameter that
|
||||
may be NULL. It will be NULL for device
|
||||
drivers. It will also be NULL for a bus drivers
|
||||
that wish to retrieve the name of the bus
|
||||
controller. It will not be NULL for a bus
|
||||
driver that wishes to retrieve the name of a
|
||||
child controller.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified in
|
||||
RFC 4646 or ISO 639-2 language code format.
|
||||
|
||||
@param ControllerName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
controller specified by ControllerHandle and
|
||||
ChildHandle in the language specified by
|
||||
Language from the point of view of the driver
|
||||
specified by This.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the user readable name in
|
||||
the language specified by Language for the
|
||||
driver specified by This was returned in
|
||||
DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
|
||||
EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This is not currently
|
||||
managing the controller specified by
|
||||
ControllerHandle and ChildHandle.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// EFI Component Name Protocol
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gEmuSnpDriverComponentName = {
|
||||
EmuSnpDriverComponentNameGetDriverName,
|
||||
EmuSnpDriverComponentNameGetControllerName,
|
||||
"eng"
|
||||
};
|
||||
|
||||
//
|
||||
// EFI Component Name 2 Protocol
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuSnpDriverComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) EmuSnpDriverComponentNameGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) EmuSnpDriverComponentNameGetControllerName,
|
||||
"en"
|
||||
};
|
||||
|
||||
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mEmuSnpDriverNameTable[] = {
|
||||
{
|
||||
"eng;en",
|
||||
L"Emu SNP Driver"
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
This function retrieves the user readable name of a driver in the form of a
|
||||
Unicode string. If the driver specified by This has a user readable name in
|
||||
the language specified by Language, then a pointer to the driver name is
|
||||
returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
|
||||
by This does not support the language specified by Language,
|
||||
then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified
|
||||
in RFC 4646 or ISO 639-2 language code format.
|
||||
|
||||
@param DriverName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
driver specified by This in the language
|
||||
specified by Language.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the Driver specified by
|
||||
This and the language specified by Language was
|
||||
returned in DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER DriverName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverComponentNameGetDriverName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
)
|
||||
{
|
||||
return LookupUnicodeString2 (
|
||||
Language,
|
||||
This->SupportedLanguages,
|
||||
mEmuSnpDriverNameTable,
|
||||
DriverName,
|
||||
(BOOLEAN)(This == &gEmuSnpDriverComponentName)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the controller
|
||||
that is being managed by a driver.
|
||||
|
||||
This function retrieves the user readable name of the controller specified by
|
||||
ControllerHandle and ChildHandle in the form of a Unicode string. If the
|
||||
driver specified by This has a user readable name in the language specified by
|
||||
Language, then a pointer to the controller name is returned in ControllerName,
|
||||
and EFI_SUCCESS is returned. If the driver specified by This is not currently
|
||||
managing the controller specified by ControllerHandle and ChildHandle,
|
||||
then EFI_UNSUPPORTED is returned. If the driver specified by This does not
|
||||
support the language specified by Language, then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param ControllerHandle[in] The handle of a controller that the driver
|
||||
specified by This is managing. This handle
|
||||
specifies the controller whose name is to be
|
||||
returned.
|
||||
|
||||
@param ChildHandle[in] The handle of the child controller to retrieve
|
||||
the name of. This is an optional parameter that
|
||||
may be NULL. It will be NULL for device
|
||||
drivers. It will also be NULL for a bus drivers
|
||||
that wish to retrieve the name of the bus
|
||||
controller. It will not be NULL for a bus
|
||||
driver that wishes to retrieve the name of a
|
||||
child controller.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified in
|
||||
RFC 4646 or ISO 639-2 language code format.
|
||||
|
||||
@param ControllerName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
controller specified by ControllerHandle and
|
||||
ChildHandle in the language specified by
|
||||
Language from the point of view of the driver
|
||||
specified by This.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the user readable name in
|
||||
the language specified by Language for the
|
||||
driver specified by This was returned in
|
||||
DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
|
||||
EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This is not currently
|
||||
managing the controller specified by
|
||||
ControllerHandle and ChildHandle.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
958
EmulatorPkg/EmuSnpDxe/EmuSnpDxe.c
Normal file
958
EmulatorPkg/EmuSnpDxe/EmuSnpDxe.c
Normal file
@@ -0,0 +1,958 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2010, Apple, Inc. All rights reserved.<BR>
|
||||
Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
Module Name:
|
||||
|
||||
EmuSnp.c
|
||||
|
||||
Abstract:
|
||||
|
||||
-**/
|
||||
|
||||
#include "EmuSnpDxe.h"
|
||||
|
||||
|
||||
|
||||
EFI_SIMPLE_NETWORK_PROTOCOL gEmuSnpTemplate = {
|
||||
EFI_SIMPLE_NETWORK_PROTOCOL_REVISION,
|
||||
EmuSnpStart,
|
||||
EmuSnpStop,
|
||||
EmuSnpInitialize,
|
||||
EmuSnpReset,
|
||||
EmuSnpShutdown,
|
||||
EmuSnpReceiveFilters,
|
||||
EmuSnpStationAddress,
|
||||
EmuSnpStatistics,
|
||||
EmuSnpMcastIptoMac,
|
||||
EmuSnpNvdata,
|
||||
EmuSnpGetStatus,
|
||||
EmuSnpTransmit,
|
||||
EmuSnpReceive,
|
||||
NULL, // WaitForPacket
|
||||
NULL // Mode
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Changes the state of a network interface from "stopped" to "started".
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpStart(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->Start (Private->Io);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Changes the state of a network interface from "started" to "stopped".
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpStop (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->Stop (Private->Io);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Resets a network adapter and allocates the transmit and receive buffers
|
||||
required by the network interface; optionally, also requests allocation
|
||||
of additional transmit and receive buffers.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ExtraRxBufferSize The size, in bytes, of the extra receive buffer space
|
||||
that the driver should allocate for the network interface.
|
||||
Some network interfaces will not be able to use the extra
|
||||
buffer, and the caller will not know if it is actually
|
||||
being used.
|
||||
@param ExtraTxBufferSize The size, in bytes, of the extra transmit buffer space
|
||||
that the driver should allocate for the network interface.
|
||||
Some network interfaces will not be able to use the extra
|
||||
buffer, and the caller will not know if it is actually
|
||||
being used.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpInitialize (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
IN UINTN ExtraRxBufferSize OPTIONAL,
|
||||
IN UINTN ExtraTxBufferSize OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->Initialize (Private->Io, ExtraRxBufferSize, ExtraTxBufferSize);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Resets a network adapter and re-initializes it with the parameters that were
|
||||
provided in the previous call to Initialize().
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ExtendedVerification Indicates that the driver may perform a more
|
||||
exhaustive verification operation of the device
|
||||
during reset.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpReset (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->Reset (Private->Io, ExtendedVerification);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Resets a network adapter and leaves it in a state that is safe for
|
||||
another driver to initialize.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpShutdown (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->Shutdown (Private->Io);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Manages the multicast receive filters of a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param EnableBits A bit mask of receive filters to enable on the network interface.
|
||||
@param DisableBits A bit mask of receive filters to disable on the network interface.
|
||||
@param ResetMcastFilter Set to TRUE to reset the contents of the multicast receive
|
||||
filters on the network interface to their default values.
|
||||
@param McastFilterCount Number of multicast HW MAC addresses in the new
|
||||
MCastFilter list. This value must be less than or equal to
|
||||
the MCastFilterCnt field of EFI_SIMPLE_NETWORK_MODE. This
|
||||
field is optional if ResetMCastFilter is TRUE.
|
||||
@param McastFilter A pointer to a list of new multicast receive filter HW MAC
|
||||
addresses. This list will replace any existing multicast
|
||||
HW MAC address list. This field is optional if
|
||||
ResetMCastFilter is TRUE.
|
||||
|
||||
@retval EFI_SUCCESS The multicast receive filter list was updated.
|
||||
@retval EFI_DEVICE_ERROR The command could not be sent to the network interface.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpReceiveFilters (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
IN UINT32 EnableBits,
|
||||
IN UINT32 DisableBits,
|
||||
IN BOOLEAN ResetMcastFilter,
|
||||
IN UINTN McastFilterCount OPTIONAL,
|
||||
IN EFI_MAC_ADDRESS *McastFilter OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->ReceiveFilters (
|
||||
Private->Io,
|
||||
EnableBits,
|
||||
DisableBits,
|
||||
ResetMcastFilter,
|
||||
McastFilterCount,
|
||||
McastFilter
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Modifies or resets the current station address, if supported.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param Reset Flag used to reset the station address to the network interfaces
|
||||
permanent address.
|
||||
@param NewMacAddr New station address to be used for the network interface.
|
||||
|
||||
@retval EFI_UNSUPPORTED Not supported yet.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpStationAddress (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
IN BOOLEAN Reset,
|
||||
IN EFI_MAC_ADDRESS *NewMacAddr OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->StationAddress (Private->Io, Reset, NewMacAddr);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Resets or collects the statistics on a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param Reset Set to TRUE to reset the statistics for the network interface.
|
||||
@param StatisticsSize On input the size, in bytes, of StatisticsTable. On
|
||||
output the size, in bytes, of the resulting table of
|
||||
statistics.
|
||||
@param StatisticsTable A pointer to the EFI_NETWORK_STATISTICS structure that
|
||||
contains the statistics.
|
||||
|
||||
@retval EFI_SUCCESS The statistics were collected from the network interface.
|
||||
@retval EFI_NOT_STARTED The network interface has not been started.
|
||||
@retval EFI_BUFFER_TOO_SMALL The Statistics buffer was too small. The current buffer
|
||||
size needed to hold the statistics is returned in
|
||||
StatisticsSize.
|
||||
@retval EFI_UNSUPPORTED Not supported yet.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpStatistics (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
IN BOOLEAN Reset,
|
||||
IN OUT UINTN *StatisticsSize OPTIONAL,
|
||||
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->Statistics (Private->Io, Reset, StatisticsSize, StatisticsTable);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Converts a multicast IP address to a multicast HW MAC address.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param Ipv6 Set to TRUE if the multicast IP address is IPv6 [RFC 2460]. Set
|
||||
to FALSE if the multicast IP address is IPv4 [RFC 791].
|
||||
@param Ip The multicast IP address that is to be converted to a multicast
|
||||
HW MAC address.
|
||||
@param Mac The multicast HW MAC address that is to be generated from IP.
|
||||
|
||||
@retval EFI_SUCCESS The multicast IP address was mapped to the multicast
|
||||
HW MAC address.
|
||||
@retval EFI_NOT_STARTED The network interface has not been started.
|
||||
@retval EFI_BUFFER_TOO_SMALL The Statistics buffer was too small. The current buffer
|
||||
size needed to hold the statistics is returned in
|
||||
StatisticsSize.
|
||||
@retval EFI_UNSUPPORTED Not supported yet.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpMcastIptoMac (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
IN BOOLEAN Ipv6,
|
||||
IN EFI_IP_ADDRESS *Ip,
|
||||
OUT EFI_MAC_ADDRESS *Mac
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->MCastIpToMac (Private->Io, Ipv6, Ip, Mac);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Performs read and write operations on the NVRAM device attached to a
|
||||
network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ReadOrWrite TRUE for read operations, FALSE for write operations.
|
||||
@param Offset Byte offset in the NVRAM device at which to start the read or
|
||||
write operation. This must be a multiple of NvRamAccessSize and
|
||||
less than NvRamSize.
|
||||
@param BufferSize The number of bytes to read or write from the NVRAM device.
|
||||
This must also be a multiple of NvramAccessSize.
|
||||
@param Buffer A pointer to the data buffer.
|
||||
|
||||
@retval EFI_UNSUPPORTED Not supported yet.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpNvdata (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
IN BOOLEAN ReadOrWrite,
|
||||
IN UINTN Offset,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->NvData (Private->Io, ReadOrWrite, Offset, BufferSize, Buffer);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Reads the current interrupt status and recycled transmit buffer status from
|
||||
a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param InterruptStatus A pointer to the bit mask of the currently active interrupts
|
||||
If this is NULL, the interrupt status will not be read from
|
||||
the device. If this is not NULL, the interrupt status will
|
||||
be read from the device. When the interrupt status is read,
|
||||
it will also be cleared. Clearing the transmit interrupt
|
||||
does not empty the recycled transmit buffer array.
|
||||
@param TxBuffer Recycled transmit buffer address. The network interface will
|
||||
not transmit if its internal recycled transmit buffer array
|
||||
is full. Reading the transmit buffer does not clear the
|
||||
transmit interrupt. If this is NULL, then the transmit buffer
|
||||
status will not be read. If there are no transmit buffers to
|
||||
recycle and TxBuf is not NULL, * TxBuf will be set to NULL.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpGetStatus (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
OUT UINT32 *InterruptStatus,
|
||||
OUT VOID **TxBuffer
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->GetStatus (Private->Io, InterruptStatus, TxBuffer);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Places a packet in the transmit queue of a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param HeaderSize The size, in bytes, of the media header to be filled in by
|
||||
the Transmit() function. If HeaderSize is non-zero, then it
|
||||
must be equal to This->Mode->MediaHeaderSize and the DestAddr
|
||||
and Protocol parameters must not be NULL.
|
||||
@param BufferSize The size, in bytes, of the entire packet (media header and
|
||||
data) to be transmitted through the network interface.
|
||||
@param Buffer A pointer to the packet (media header followed by data) to be
|
||||
transmitted. This parameter cannot be NULL. If HeaderSize is zero,
|
||||
then the media header in Buffer must already be filled in by the
|
||||
caller. If HeaderSize is non-zero, then the media header will be
|
||||
filled in by the Transmit() function.
|
||||
@param SrcAddr The source HW MAC address. If HeaderSize is zero, then this parameter
|
||||
is ignored. If HeaderSize is non-zero and SrcAddr is NULL, then
|
||||
This->Mode->CurrentAddress is used for the source HW MAC address.
|
||||
@param DestAddr The destination HW MAC address. If HeaderSize is zero, then this
|
||||
parameter is ignored.
|
||||
@param Protocol The type of header to build. If HeaderSize is zero, then this
|
||||
parameter is ignored. See RFC 1700, section "Ether Types", for
|
||||
examples.
|
||||
|
||||
@retval EFI_SUCCESS The packet was placed on the transmit queue.
|
||||
@retval EFI_DEVICE_ERROR The command could not be sent to the network interface.
|
||||
@retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
|
||||
@retval EFI_NOT_STARTED The network interface has not been started.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpTransmit (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
IN UINTN HeaderSize,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID* Buffer,
|
||||
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
|
||||
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
|
||||
IN UINT16 *Protocol OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->Transmit (
|
||||
Private->Io,
|
||||
HeaderSize,
|
||||
BufferSize,
|
||||
Buffer,
|
||||
SrcAddr,
|
||||
DestAddr,
|
||||
Protocol
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Receives a packet from a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param HeaderSize The size, in bytes, of the media header received on the network
|
||||
interface. If this parameter is NULL, then the media header size
|
||||
will not be returned.
|
||||
@param BuffSize On entry, the size, in bytes, of Buffer. On exit, the size, in
|
||||
bytes, of the packet that was received on the network interface.
|
||||
@param Buffer A pointer to the data buffer to receive both the media header and
|
||||
the data.
|
||||
@param SourceAddr The source HW MAC address. If this parameter is NULL, the
|
||||
HW MAC source address will not be extracted from the media
|
||||
header.
|
||||
@param DestinationAddr The destination HW MAC address. If this parameter is NULL,
|
||||
the HW MAC destination address will not be extracted from the
|
||||
media header.
|
||||
@param Protocol The media header type. If this parameter is NULL, then the
|
||||
protocol will not be extracted from the media header. See
|
||||
RFC 1700 section "Ether Types" for examples.
|
||||
|
||||
@retval EFI_SUCCESS The received data was stored in Buffer, and BufferSize has
|
||||
been updated to the number of bytes received.
|
||||
@retval EFI_NOT_READY The network interface is too busy to accept this transmit
|
||||
request.
|
||||
@retval EFI_NOT_STARTED The network interface has not been started.
|
||||
@retval EFI_BUFFER_TOO_SMALL The BufferSize parameter is too small.
|
||||
@retval EFI_DEVICE_ERROR The command could not be sent to the network interface.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpReceive (
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
|
||||
OUT UINTN *HeaderSize OPTIONAL,
|
||||
IN OUT UINTN *BuffSize,
|
||||
OUT VOID *Buffer,
|
||||
OUT EFI_MAC_ADDRESS *SourceAddr OPTIONAL,
|
||||
OUT EFI_MAC_ADDRESS *DestinationAddr OPTIONAL,
|
||||
OUT UINT16 *Protocol OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
|
||||
|
||||
Status = Private->Io->Receive (
|
||||
Private->Io,
|
||||
HeaderSize,
|
||||
BuffSize,
|
||||
Buffer,
|
||||
SourceAddr,
|
||||
DestinationAddr,
|
||||
Protocol
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Test to see if this driver supports ControllerHandle. This service
|
||||
is called by the EFI boot service ConnectController(). In
|
||||
order to make drivers as small as possible, there are a few calling
|
||||
restrictions for this service. ConnectController() must
|
||||
follow these calling restrictions. If any other agent wishes to call
|
||||
Supported() it must also follow these calling restrictions.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ControllerHandle Handle of device to test
|
||||
@param RemainingDevicePath Optional parameter use to pick a specific child
|
||||
device to start.
|
||||
|
||||
@retval EFI_SUCCESS This driver supports this device
|
||||
@retval EFI_UNSUPPORTED This driver does not support this device
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverBindingSupported (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
|
||||
MAC_ADDR_DEVICE_PATH *Node;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
|
||||
if (RemainingDevicePath != NULL) {
|
||||
if (!IsDevicePathEnd (RemainingDevicePath)) {
|
||||
Node = (MAC_ADDR_DEVICE_PATH *)RemainingDevicePath;
|
||||
if (Node->Header.Type != MESSAGING_DEVICE_PATH ||
|
||||
Node->Header.SubType != MSG_MAC_ADDR_DP) {
|
||||
// If the remaining device path does not match we don't support the request
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Open the IO Abstraction(s) needed to perform the supported test
|
||||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
ControllerHandle,
|
||||
&gEmuIoThunkProtocolGuid,
|
||||
(VOID **)&EmuIoThunk,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Make sure GUID is for a File System handle.
|
||||
//
|
||||
Status = EFI_UNSUPPORTED;
|
||||
if (CompareGuid (EmuIoThunk->Protocol, &gEmuSnpProtocolGuid)) {
|
||||
Status = EFI_SUCCESS;
|
||||
}
|
||||
|
||||
//
|
||||
// Close the I/O Abstraction(s) used to perform the supported test
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
ControllerHandle,
|
||||
&gEmuIoThunkProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// Open the EFI Device Path protocol needed to perform the supported test
|
||||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
ControllerHandle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &ParentDevicePath,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
);
|
||||
if (Status == EFI_ALREADY_STARTED) {
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Close protocol, don't use device path protocol in the Support() function
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
ControllerHandle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle
|
||||
);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Start this driver on ControllerHandle. This service is called by the
|
||||
EFI boot service ConnectController(). In order to make
|
||||
drivers as small as possible, there are a few calling restrictions for
|
||||
this service. ConnectController() must follow these
|
||||
calling restrictions. If any other agent wishes to call Start() it
|
||||
must also follow these calling restrictions.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ControllerHandle Handle of device to bind driver to
|
||||
@param RemainingDevicePath Optional parameter use to pick a specific child
|
||||
device to start.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverBindingStart (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
|
||||
EMU_SNP_PRIVATE_DATA *Private;
|
||||
MAC_ADDR_DEVICE_PATH Node;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
|
||||
Private = NULL;
|
||||
|
||||
//
|
||||
// Grab the protocols we need
|
||||
//
|
||||
Status = gBS->OpenProtocol(
|
||||
ControllerHandle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
( VOID ** ) &ParentDevicePath,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
);
|
||||
if (EFI_ERROR (Status) && Status) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Status = gBS->OpenProtocol (
|
||||
ControllerHandle,
|
||||
&gEmuIoThunkProtocolGuid,
|
||||
(VOID **)&EmuIoThunk,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
if (!CompareGuid (EmuIoThunk->Protocol, &gEmuSnpProtocolGuid)) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
Status = EmuIoThunk->Open (EmuIoThunk);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
// Allocate the private data.
|
||||
//
|
||||
Private = AllocateZeroPool (sizeof (EMU_SNP_PRIVATE_DATA));
|
||||
if (Private == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
CopyMem (&Private->Snp, &gEmuSnpTemplate, sizeof (EFI_SIMPLE_NETWORK_PROTOCOL));
|
||||
|
||||
Private->Signature = EMU_SNP_PRIVATE_DATA_SIGNATURE;
|
||||
Private->IoThunk = EmuIoThunk;
|
||||
Private->Io = EmuIoThunk->Interface;
|
||||
Private->EfiHandle = ControllerHandle;
|
||||
Private->DeviceHandle = NULL;
|
||||
Private->Snp.Mode = &Private->Mode;
|
||||
Private->ControllerNameTable = NULL;
|
||||
|
||||
|
||||
Status = Private->Io->CreateMapping (Private->Io, &Private->Mode);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
// Build the device path by appending the MAC node to the ParentDevicePath
|
||||
// from the EmuIo handle.
|
||||
//
|
||||
ZeroMem (&Node, sizeof (MAC_ADDR_DEVICE_PATH));
|
||||
|
||||
Node.Header.Type = MESSAGING_DEVICE_PATH;
|
||||
Node.Header.SubType = MSG_MAC_ADDR_DP;
|
||||
Node.IfType = Private->Mode.IfType;
|
||||
|
||||
SetDevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL * )&Node, sizeof (MAC_ADDR_DEVICE_PATH));
|
||||
|
||||
CopyMem (&Node.MacAddress, &Private->Mode.CurrentAddress, sizeof (EFI_MAC_ADDRESS));
|
||||
|
||||
//
|
||||
// Build the device path by appending the MAC node to the ParentDevicePath from the EmuIo handle.
|
||||
//
|
||||
Private->DevicePath = AppendDevicePathNode (ParentDevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&Node);
|
||||
if ( Private->DevicePath == NULL ) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
AddUnicodeString2 (
|
||||
"eng",
|
||||
gEmuSnpDriverComponentName.SupportedLanguages,
|
||||
&Private->ControllerNameTable,
|
||||
EmuIoThunk->ConfigString,
|
||||
TRUE
|
||||
);
|
||||
|
||||
AddUnicodeString2 (
|
||||
"en",
|
||||
gEmuSnpDriverComponentName2.SupportedLanguages,
|
||||
&Private->ControllerNameTable,
|
||||
EmuIoThunk->ConfigString,
|
||||
FALSE
|
||||
);
|
||||
|
||||
//
|
||||
// Create Child Handle
|
||||
//
|
||||
Status = gBS->InstallMultipleProtocolInterfaces(
|
||||
&Private->DeviceHandle,
|
||||
&gEfiSimpleNetworkProtocolGuid, &Private->Snp,
|
||||
&gEfiDevicePathProtocolGuid, Private->DevicePath,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
// Open For Child Device
|
||||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
ControllerHandle,
|
||||
&gEmuIoThunkProtocolGuid,
|
||||
(VOID **)&EmuIoThunk,
|
||||
This->DriverBindingHandle,
|
||||
Private->DeviceHandle,
|
||||
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
|
||||
);
|
||||
|
||||
Done:
|
||||
if (EFI_ERROR (Status)) {
|
||||
if (Private != NULL) {
|
||||
FreePool (Private);
|
||||
}
|
||||
if (ParentDevicePath != NULL) {
|
||||
gBS->CloseProtocol(
|
||||
ControllerHandle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Stop this driver on ControllerHandle. This service is called by the
|
||||
EFI boot service DisconnectController(). In order to
|
||||
make drivers as small as possible, there are a few calling
|
||||
restrictions for this service. DisconnectController()
|
||||
must follow these calling restrictions. If any other agent wishes
|
||||
to call Stop() it must also follow these calling restrictions.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ControllerHandle Handle of device to stop driver on
|
||||
@param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of
|
||||
children is zero stop the entire bus driver.
|
||||
@param ChildHandleBuffer List of Child Handles to Stop.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverBindingStop (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMU_SNP_PRIVATE_DATA *Private = NULL;
|
||||
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
|
||||
|
||||
//
|
||||
// Complete all outstanding transactions to Controller.
|
||||
// Don't allow any new transaction to Controller to be started.
|
||||
//
|
||||
if (NumberOfChildren == 0) {
|
||||
//
|
||||
// Close the bus driver
|
||||
//
|
||||
Status = gBS->CloseProtocol (
|
||||
ControllerHandle,
|
||||
&gEmuIoThunkProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle
|
||||
);
|
||||
|
||||
Status = gBS->CloseProtocol (
|
||||
ControllerHandle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
|
||||
ASSERT (NumberOfChildren == 1);
|
||||
|
||||
|
||||
//
|
||||
// Get our context back.
|
||||
//
|
||||
Status = gBS->OpenProtocol(
|
||||
ChildHandleBuffer[0],
|
||||
&gEfiSimpleNetworkProtocolGuid,
|
||||
( VOID ** ) &Snp,
|
||||
This->DriverBindingHandle,
|
||||
ControllerHandle,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (Snp);
|
||||
Status = Private->IoThunk->Close (Private->IoThunk);
|
||||
|
||||
Status = gBS->CloseProtocol(
|
||||
ChildHandleBuffer[0],
|
||||
&gEmuIoThunkProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Private->DeviceHandle
|
||||
);
|
||||
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces(
|
||||
ChildHandleBuffer[0],
|
||||
&gEfiSimpleNetworkProtocolGuid, &Private->Snp,
|
||||
&gEfiDevicePathProtocolGuid, Private->DevicePath,
|
||||
NULL
|
||||
);
|
||||
|
||||
FreePool (Private->DevicePath);
|
||||
FreeUnicodeStringTable (Private->ControllerNameTable);
|
||||
FreePool (Private);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
EFI_DRIVER_BINDING_PROTOCOL gEmuSnpDriverBinding = {
|
||||
EmuSnpDriverBindingSupported,
|
||||
EmuSnpDriverBindingStart,
|
||||
EmuSnpDriverBindingStop,
|
||||
0xA,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
This is the declaration of an EFI image entry point. This entry point is
|
||||
the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers including
|
||||
both device drivers and bus drivers.
|
||||
|
||||
@param ImageHandle The firmware allocated handle for the UEFI image.
|
||||
@param SystemTable A pointer to the EFI System Table.
|
||||
|
||||
@retval EFI_SUCCESS The operation completed successfully.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InitializeEmuSnpDriver (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Install the Driver Protocols
|
||||
//
|
||||
|
||||
Status = EfiLibInstallDriverBindingComponentName2(
|
||||
ImageHandle,
|
||||
SystemTable,
|
||||
&gEmuSnpDriverBinding,
|
||||
ImageHandle,
|
||||
&gEmuSnpDriverComponentName,
|
||||
&gEmuSnpDriverComponentName2
|
||||
);
|
||||
|
||||
return Status;
|
||||
}
|
488
EmulatorPkg/EmuSnpDxe/EmuSnpDxe.h
Normal file
488
EmulatorPkg/EmuSnpDxe/EmuSnpDxe.h
Normal file
@@ -0,0 +1,488 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2010, Apple, Inc. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
Module Name:
|
||||
|
||||
EmuSnp.h
|
||||
|
||||
Abstract:
|
||||
|
||||
-**/
|
||||
|
||||
#ifndef _EMU_SNP_H_
|
||||
#define _EMU_SNP_H_
|
||||
|
||||
#include <Uefi.h>
|
||||
|
||||
#include <Protocol/SimpleNetwork.h>
|
||||
#include <Protocol/DevicePath.h>
|
||||
#include <Protocol/EmuIoThunk.h>
|
||||
#include <Protocol/EmuSnp.h>
|
||||
|
||||
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/UefiLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/NetLib.h>
|
||||
|
||||
#define NET_ETHER_HEADER_SIZE 14
|
||||
|
||||
//
|
||||
// Private data for driver.
|
||||
//
|
||||
#define EMU_SNP_PRIVATE_DATA_SIGNATURE SIGNATURE_32( 'U', 'S', 'N', 'P' )
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
EMU_IO_THUNK_PROTOCOL *IoThunk;
|
||||
EMU_SNP_PROTOCOL *Io;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
|
||||
EFI_HANDLE EfiHandle;
|
||||
EFI_HANDLE DeviceHandle;
|
||||
|
||||
EFI_SIMPLE_NETWORK_PROTOCOL Snp;
|
||||
EFI_SIMPLE_NETWORK_MODE Mode;
|
||||
|
||||
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
|
||||
|
||||
} EMU_SNP_PRIVATE_DATA;
|
||||
|
||||
#define EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS(a) \
|
||||
CR( a, EMU_SNP_PRIVATE_DATA, Snp, EMU_SNP_PRIVATE_DATA_SIGNATURE )
|
||||
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gEmuSnpDriverBinding;
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gEmuSnpDriverComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuSnpDriverComponentName2;
|
||||
|
||||
/**
|
||||
Test to see if this driver supports ControllerHandle. This service
|
||||
is called by the EFI boot service ConnectController(). In
|
||||
order to make drivers as small as possible, there are a few calling
|
||||
restrictions for this service. ConnectController() must
|
||||
follow these calling restrictions. If any other agent wishes to call
|
||||
Supported() it must also follow these calling restrictions.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ControllerHandle Handle of device to test
|
||||
@param RemainingDevicePath Optional parameter use to pick a specific child
|
||||
device to start.
|
||||
|
||||
@retval EFI_SUCCESS This driver supports this device
|
||||
@retval EFI_UNSUPPORTED This driver does not support this device
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverBindingSupported (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL * This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Start this driver on ControllerHandle. This service is called by the
|
||||
EFI boot service ConnectController(). In order to make
|
||||
drivers as small as possible, there are a few calling restrictions for
|
||||
this service. ConnectController() must follow these
|
||||
calling restrictions. If any other agent wishes to call Start() it
|
||||
must also follow these calling restrictions.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ControllerHandle Handle of device to bind driver to
|
||||
@param RemainingDevicePath Optional parameter use to pick a specific child
|
||||
device to start.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverBindingStart (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL * This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Stop this driver on ControllerHandle. This service is called by the
|
||||
EFI boot service DisconnectController(). In order to
|
||||
make drivers as small as possible, there are a few calling
|
||||
restrictions for this service. DisconnectController()
|
||||
must follow these calling restrictions. If any other agent wishes
|
||||
to call Stop() it must also follow these calling restrictions.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ControllerHandle Handle of device to stop driver on
|
||||
@param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of
|
||||
children is zero stop the entire bus driver.
|
||||
@param ChildHandleBuffer List of Child Handles to Stop.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpDriverBindingStop (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
);
|
||||
|
||||
/**
|
||||
Changes the state of a network interface from "stopped" to "started".
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpStart(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This
|
||||
);
|
||||
|
||||
/**
|
||||
Changes the state of a network interface from "started" to "stopped".
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpStop(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This
|
||||
);
|
||||
|
||||
/**
|
||||
Resets a network adapter and allocates the transmit and receive buffers
|
||||
required by the network interface; optionally, also requests allocation
|
||||
of additional transmit and receive buffers.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ExtraRxBufferSize The size, in bytes, of the extra receive buffer space
|
||||
that the driver should allocate for the network interface.
|
||||
Some network interfaces will not be able to use the extra
|
||||
buffer, and the caller will not know if it is actually
|
||||
being used.
|
||||
@param ExtraTxBufferSize The size, in bytes, of the extra transmit buffer space
|
||||
that the driver should allocate for the network interface.
|
||||
Some network interfaces will not be able to use the extra
|
||||
buffer, and the caller will not know if it is actually
|
||||
being used.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpInitialize(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
IN UINTN ExtraRxBufferSize OPTIONAL,
|
||||
IN UINTN ExtraTxBufferSize OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Resets a network adapter and re-initializes it with the parameters that were
|
||||
provided in the previous call to Initialize().
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ExtendedVerification Indicates that the driver may perform a more
|
||||
exhaustive verification operation of the device
|
||||
during reset.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpReset(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
);
|
||||
|
||||
/**
|
||||
Resets a network adapter and leaves it in a state that is safe for
|
||||
another driver to initialize.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpShutdown(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This
|
||||
);
|
||||
|
||||
/**
|
||||
Manages the multicast receive filters of a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param EnableBits A bit mask of receive filters to enable on the network interface.
|
||||
@param DisableBits A bit mask of receive filters to disable on the network interface.
|
||||
@param ResetMcastFilter Set to TRUE to reset the contents of the multicast receive
|
||||
filters on the network interface to their default values.
|
||||
@param McastFilterCount Number of multicast HW MAC addresses in the new
|
||||
MCastFilter list. This value must be less than or equal to
|
||||
the MCastFilterCnt field of EFI_SIMPLE_NETWORK_MODE. This
|
||||
field is optional if ResetMCastFilter is TRUE.
|
||||
@param McastFilter A pointer to a list of new multicast receive filter HW MAC
|
||||
addresses. This list will replace any existing multicast
|
||||
HW MAC address list. This field is optional if
|
||||
ResetMCastFilter is TRUE.
|
||||
|
||||
@retval EFI_SUCCESS The multicast receive filter list was updated.
|
||||
@retval EFI_DEVICE_ERROR The command could not be sent to the network interface.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpReceiveFilters(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
IN UINT32 EnableBits,
|
||||
IN UINT32 DisableBits,
|
||||
IN BOOLEAN ResetMcastFilter,
|
||||
IN UINTN McastFilterCount OPTIONAL,
|
||||
IN EFI_MAC_ADDRESS* McastFilter OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Modifies or resets the current station address, if supported.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param Reset Flag used to reset the station address to the network interfaces
|
||||
permanent address.
|
||||
@param NewMacAddr New station address to be used for the network interface.
|
||||
|
||||
@retval EFI_UNSUPPORTED Not supported yet.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpStationAddress(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
IN BOOLEAN Reset,
|
||||
IN EFI_MAC_ADDRESS* NewMacAddr OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Resets or collects the statistics on a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param Reset Set to TRUE to reset the statistics for the network interface.
|
||||
@param StatisticsSize On input the size, in bytes, of StatisticsTable. On
|
||||
output the size, in bytes, of the resulting table of
|
||||
statistics.
|
||||
@param StatisticsTable A pointer to the EFI_NETWORK_STATISTICS structure that
|
||||
contains the statistics.
|
||||
|
||||
@retval EFI_SUCCESS The statistics were collected from the network interface.
|
||||
@retval EFI_NOT_STARTED The network interface has not been started.
|
||||
@retval EFI_BUFFER_TOO_SMALL The Statistics buffer was too small. The current buffer
|
||||
size needed to hold the statistics is returned in
|
||||
StatisticsSize.
|
||||
@retval EFI_UNSUPPORTED Not supported yet.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpStatistics(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
IN BOOLEAN Reset,
|
||||
IN OUT UINTN* StatisticsSize OPTIONAL,
|
||||
OUT EFI_NETWORK_STATISTICS* StatisticsTable OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Converts a multicast IP address to a multicast HW MAC address.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param Ipv6 Set to TRUE if the multicast IP address is IPv6 [RFC 2460]. Set
|
||||
to FALSE if the multicast IP address is IPv4 [RFC 791].
|
||||
@param Ip The multicast IP address that is to be converted to a multicast
|
||||
HW MAC address.
|
||||
@param Mac The multicast HW MAC address that is to be generated from IP.
|
||||
|
||||
@retval EFI_SUCCESS The multicast IP address was mapped to the multicast
|
||||
HW MAC address.
|
||||
@retval EFI_NOT_STARTED The network interface has not been started.
|
||||
@retval EFI_BUFFER_TOO_SMALL The Statistics buffer was too small. The current buffer
|
||||
size needed to hold the statistics is returned in
|
||||
StatisticsSize.
|
||||
@retval EFI_UNSUPPORTED Not supported yet.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpMcastIptoMac(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
IN BOOLEAN Ipv6,
|
||||
IN EFI_IP_ADDRESS* Ip,
|
||||
OUT EFI_MAC_ADDRESS* Mac
|
||||
);
|
||||
|
||||
/**
|
||||
Performs read and write operations on the NVRAM device attached to a
|
||||
network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ReadOrWrite TRUE for read operations, FALSE for write operations.
|
||||
@param Offset Byte offset in the NVRAM device at which to start the read or
|
||||
write operation. This must be a multiple of NvRamAccessSize and
|
||||
less than NvRamSize.
|
||||
@param BufferSize The number of bytes to read or write from the NVRAM device.
|
||||
This must also be a multiple of NvramAccessSize.
|
||||
@param Buffer A pointer to the data buffer.
|
||||
|
||||
@retval EFI_UNSUPPORTED Not supported yet.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpNvdata(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
IN BOOLEAN ReadOrWrite,
|
||||
IN UINTN Offset,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT VOID* Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Reads the current interrupt status and recycled transmit buffer status from
|
||||
a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param InterruptStatus A pointer to the bit mask of the currently active interrupts
|
||||
If this is NULL, the interrupt status will not be read from
|
||||
the device. If this is not NULL, the interrupt status will
|
||||
be read from the device. When the interrupt status is read,
|
||||
it will also be cleared. Clearing the transmit interrupt
|
||||
does not empty the recycled transmit buffer array.
|
||||
@param TxBuffer Recycled transmit buffer address. The network interface will
|
||||
not transmit if its internal recycled transmit buffer array
|
||||
is full. Reading the transmit buffer does not clear the
|
||||
transmit interrupt. If this is NULL, then the transmit buffer
|
||||
status will not be read. If there are no transmit buffers to
|
||||
recycle and TxBuf is not NULL, * TxBuf will be set to NULL.
|
||||
|
||||
@retval EFI_SUCCESS Always succeeds.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpGetStatus(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
OUT UINT32* InterruptStatus,
|
||||
OUT VOID** TxBuffer
|
||||
);
|
||||
|
||||
/**
|
||||
Places a packet in the transmit queue of a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param HeaderSize The size, in bytes, of the media header to be filled in by
|
||||
the Transmit() function. If HeaderSize is non-zero, then it
|
||||
must be equal to This->Mode->MediaHeaderSize and the DestAddr
|
||||
and Protocol parameters must not be NULL.
|
||||
@param BufferSize The size, in bytes, of the entire packet (media header and
|
||||
data) to be transmitted through the network interface.
|
||||
@param Buffer A pointer to the packet (media header followed by data) to be
|
||||
transmitted. This parameter cannot be NULL. If HeaderSize is zero,
|
||||
then the media header in Buffer must already be filled in by the
|
||||
caller. If HeaderSize is non-zero, then the media header will be
|
||||
filled in by the Transmit() function.
|
||||
@param SrcAddr The source HW MAC address. If HeaderSize is zero, then this parameter
|
||||
is ignored. If HeaderSize is non-zero and SrcAddr is NULL, then
|
||||
This->Mode->CurrentAddress is used for the source HW MAC address.
|
||||
@param DestAddr The destination HW MAC address. If HeaderSize is zero, then this
|
||||
parameter is ignored.
|
||||
@param Protocol The type of header to build. If HeaderSize is zero, then this
|
||||
parameter is ignored. See RFC 1700, section "Ether Types", for
|
||||
examples.
|
||||
|
||||
@retval EFI_SUCCESS The packet was placed on the transmit queue.
|
||||
@retval EFI_DEVICE_ERROR The command could not be sent to the network interface.
|
||||
@retval EFI_ACCESS_DENIED Error acquire global lock for operation.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpTransmit(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
IN UINTN HeaderSize,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID* Buffer,
|
||||
IN EFI_MAC_ADDRESS* SrcAddr OPTIONAL,
|
||||
IN EFI_MAC_ADDRESS* DestAddr OPTIONAL,
|
||||
IN UINT16* Protocol OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Receives a packet from a network interface.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param HeaderSize The size, in bytes, of the media header received on the network
|
||||
interface. If this parameter is NULL, then the media header size
|
||||
will not be returned.
|
||||
@param BuffSize On entry, the size, in bytes, of Buffer. On exit, the size, in
|
||||
bytes, of the packet that was received on the network interface.
|
||||
@param Buffer A pointer to the data buffer to receive both the media header and
|
||||
the data.
|
||||
@param SourceAddr The source HW MAC address. If this parameter is NULL, the
|
||||
HW MAC source address will not be extracted from the media
|
||||
header.
|
||||
@param DestinationAddr The destination HW MAC address. If this parameter is NULL,
|
||||
the HW MAC destination address will not be extracted from the
|
||||
media header.
|
||||
@param Protocol The media header type. If this parameter is NULL, then the
|
||||
protocol will not be extracted from the media header. See
|
||||
RFC 1700 section "Ether Types" for examples.
|
||||
|
||||
@retval EFI_SUCCESS The received data was stored in Buffer, and BufferSize has
|
||||
been updated to the number of bytes received.
|
||||
@retval EFI_NOT_READY The network interface is too busy to accept this transmit
|
||||
request.
|
||||
@retval EFI_BUFFER_TOO_SMALL The BufferSize parameter is too small.
|
||||
@retval EFI_DEVICE_ERROR The command could not be sent to the network interface.
|
||||
@retval EFI_ACCESS_DENIED Error acquire global lock for operation.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EmuSnpReceive(
|
||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
|
||||
OUT UINTN* HeaderSize OPTIONAL,
|
||||
IN OUT UINTN* BuffSize,
|
||||
OUT VOID* Buffer,
|
||||
OUT EFI_MAC_ADDRESS* SourceAddr OPTIONAL,
|
||||
OUT EFI_MAC_ADDRESS* DestinationAddr OPTIONAL,
|
||||
OUT UINT16* Protocol OPTIONAL
|
||||
);
|
||||
|
||||
VOID
|
||||
EFIAPI
|
||||
EmuSnpWaitForPacketNotify(
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID* Private
|
||||
);
|
||||
|
||||
#endif // _EMU_SNP_H_
|
57
EmulatorPkg/EmuSnpDxe/EmuSnpDxe.inf
Normal file
57
EmulatorPkg/EmuSnpDxe/EmuSnpDxe.inf
Normal file
@@ -0,0 +1,57 @@
|
||||
#/** @file
|
||||
# Component name for module EmuSnpDxe
|
||||
#
|
||||
# Copyright (c) 2010, Apple, Inc. All rights reserved.<BR>
|
||||
#
|
||||
# This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
#**/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = EmuSnpDxe
|
||||
FILE_GUID = 22597239-6107-DF44-AD3F-5F053E92222E
|
||||
MODULE_TYPE = UEFI_DRIVER
|
||||
VERSION_STRING = 1.0
|
||||
EDK_RELEASE_VERSION = 0x00020000
|
||||
EFI_SPECIFICATION_VERSION = 0x00020000
|
||||
|
||||
ENTRY_POINT = InitializeEmuSnpDriver
|
||||
# UNLOAD_IMAGE = EmuSnpUnload
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources.common]
|
||||
ComponentName.c
|
||||
EmuSnpDxe.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
EmulatorPkg/EmulatorPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
DevicePathLib
|
||||
UefiLib
|
||||
UefiBootServicesTableLib
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
UefiDriverEntryPoint
|
||||
NetLib
|
||||
|
||||
[Protocols]
|
||||
gEfiSimpleNetworkProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiDevicePathProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEmuSnpProtocolGuid
|
||||
gEmuIoThunkProtocolGuid
|
||||
|
||||
|
Reference in New Issue
Block a user