2014-04-24 21:29:11 +02:00
|
|
|
/** @file
|
|
|
|
*
|
|
|
|
* Copyright (c) 2012-2014, ARM Limited. All rights reserved.
|
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
**/
|
|
|
|
|
|
|
|
#ifndef __LAN9118_DXE_H__
|
|
|
|
#define __LAN9118_DXE_H__
|
|
|
|
|
|
|
|
#include <Uefi.h>
|
|
|
|
#include <Uefi/UefiSpec.h>
|
|
|
|
#include <Base.h>
|
|
|
|
|
|
|
|
// Protocols used by this driver
|
|
|
|
#include <Protocol/SimpleNetwork.h>
|
|
|
|
#include <Protocol/ComponentName2.h>
|
|
|
|
#include <Protocol/PxeBaseCode.h>
|
|
|
|
#include <Protocol/DevicePath.h>
|
|
|
|
|
|
|
|
// Libraries used by this driver
|
|
|
|
#include <Library/UefiLib.h>
|
|
|
|
#include <Library/DebugLib.h>
|
|
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
|
|
#include <Library/MemoryAllocationLib.h>
|
|
|
|
#include <Library/IoLib.h>
|
|
|
|
#include <Library/PcdLib.h>
|
|
|
|
#include <Library/NetLib.h>
|
|
|
|
#include <Library/DevicePathLib.h>
|
|
|
|
|
|
|
|
#include "Lan9118DxeUtil.h"
|
|
|
|
#include "Lan9118DxeHw.h"
|
|
|
|
|
|
|
|
#define LAN9118_STALL 2
|
|
|
|
|
|
|
|
#define LAN9118_DEFAULT_MAC_ADDRL 0x00F70200
|
|
|
|
#define LAN9118_DEFAULT_MAC_ADDRH 0x00009040
|
|
|
|
|
|
|
|
#define LAN9118_TX_DATA_SIZE 4608
|
|
|
|
#define LAN9118_TX_STATUS_SIZE 512
|
|
|
|
#define LAN9118_RX_DATA_SIZE 10560
|
|
|
|
#define LAN9118_RX_STATUS_SIZE 704
|
|
|
|
|
|
|
|
#define LAN9118_TX_RING_NUM_ENTRIES 32
|
|
|
|
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
LAN9118 Information Structure
|
|
|
|
------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
// Driver signature
|
|
|
|
UINT32 Signature;
|
|
|
|
EFI_HANDLE ControllerHandle;
|
|
|
|
|
|
|
|
// EFI SNP protocol instances
|
|
|
|
EFI_SIMPLE_NETWORK_PROTOCOL Snp;
|
|
|
|
EFI_SIMPLE_NETWORK_MODE SnpMode;
|
|
|
|
|
|
|
|
// EFI Snp statistics instance
|
|
|
|
EFI_NETWORK_STATISTICS Stats;
|
|
|
|
|
|
|
|
// Saved transmitted buffers so we can notify consumers when packets have been sent.
|
|
|
|
UINT16 NextPacketTag;
|
|
|
|
VOID *TxRing[LAN9118_TX_RING_NUM_ENTRIES];
|
|
|
|
} LAN9118_DRIVER;
|
|
|
|
|
|
|
|
#define LAN9118_SIGNATURE SIGNATURE_32('l', 'a', 'n', '9')
|
|
|
|
#define INSTANCE_FROM_SNP_THIS(a) CR(a, LAN9118_DRIVER, Snp, LAN9118_SIGNATURE)
|
|
|
|
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
UEFI-Compliant functions for EFI_SIMPLE_NETWORK_PROTOCOL
|
|
|
|
|
|
|
|
Refer to the Simple Network Protocol section (21.1) in the UEFI 2.3.1 Specification for related definitions
|
|
|
|
|
|
|
|
---------------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI Start() function
|
|
|
|
*
|
|
|
|
* Parameters:
|
|
|
|
*
|
ARM Packages: Replace tabs by spaces for indentation
Replace tabs by spaces for indentation to comply to EDK2 coding standards.
Done in files with extension ".S", ".c", ".h", ".asm", ".dsc", ".inc", "*.inf",
"*.dec" or ".fdf" and located in ArmPkg, ArmPlatformPkg, EmbeddedPkg,
BeagleBoardPkg or Omap35xxPkg.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15901 6f19259b-4bc3-4df7-8a09-765794883524
2014-08-26 12:14:17 +02:00
|
|
|
* @param pobj: A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL instance.
|
2014-04-24 21:29:11 +02:00
|
|
|
*
|
|
|
|
* Description:
|
|
|
|
*
|
ARM Packages: Replace tabs by spaces for indentation
Replace tabs by spaces for indentation to comply to EDK2 coding standards.
Done in files with extension ".S", ".c", ".h", ".asm", ".dsc", ".inc", "*.inf",
"*.dec" or ".fdf" and located in ArmPkg, ArmPlatformPkg, EmbeddedPkg,
BeagleBoardPkg or Omap35xxPkg.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15901 6f19259b-4bc3-4df7-8a09-765794883524
2014-08-26 12:14:17 +02:00
|
|
|
* This function starts a network interface. If the network interface successfully starts, then
|
|
|
|
* EFI_SUCCESS will be returned.
|
2014-04-24 21:29:11 +02:00
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpStart (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI Stop() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpStop (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI Initialize() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpInitialize (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
IN UINTN rx_buff_size,
|
|
|
|
IN UINTN tx_buff_size
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI Reset() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpReset (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
IN BOOLEAN ext_ver
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI Shutdown() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpShutdown (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI ReceiveFilters() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpReceiveFilters (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
IN UINT32 enable,
|
|
|
|
IN UINT32 disable,
|
|
|
|
IN BOOLEAN reset_mfilter,
|
|
|
|
IN UINTN num_mfilter,
|
|
|
|
IN EFI_MAC_ADDRESS *mfilter
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI StationAddress() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpStationAddress (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
IN BOOLEAN reset,
|
|
|
|
IN EFI_MAC_ADDRESS *new_maddr
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI Statistics() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpStatistics (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
IN BOOLEAN reset,
|
|
|
|
IN OUT UINTN *stat_size,
|
|
|
|
OUT EFI_NETWORK_STATISTICS *stat_table
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI MCastIPtoMAC() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpMcastIptoMac (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
IN BOOLEAN use_ipv6,
|
|
|
|
IN EFI_IP_ADDRESS *ip_addr,
|
|
|
|
OUT EFI_MAC_ADDRESS *mac_addr
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI NvData() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpNvData (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
IN BOOLEAN read_write,
|
|
|
|
IN UINTN offset,
|
|
|
|
IN UINTN buff_size,
|
|
|
|
IN OUT VOID *data
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI GetStatus() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpGetStatus (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
OUT UINT32 *irq_stat OPTIONAL,
|
|
|
|
OUT VOID **tx_buff OPTIONAL
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI Transmit() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpTransmit (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
IN UINTN hdr_size,
|
|
|
|
IN UINTN buff_size,
|
|
|
|
IN VOID *data,
|
|
|
|
IN EFI_MAC_ADDRESS *src_addr OPTIONAL,
|
|
|
|
IN EFI_MAC_ADDRESS *dest_addr OPTIONAL,
|
|
|
|
IN UINT16 *protocol OPTIONAL
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI Receive() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpReceive (
|
|
|
|
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
|
|
OUT UINTN *hdr_size OPTIONAL,
|
|
|
|
IN OUT UINTN *buff_size,
|
|
|
|
OUT VOID *data,
|
|
|
|
OUT EFI_MAC_ADDRESS *src_addr OPTIONAL,
|
|
|
|
OUT EFI_MAC_ADDRESS *dest_addr OPTIONAL,
|
|
|
|
OUT UINT16 *protocol OPTIONAL
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
UEFI-Compliant functions for EFI_COMPONENT_NAME2_PROTOCOL
|
|
|
|
|
|
|
|
Refer to the Component Name Protocol section (10.5) in the UEFI 2.3.1 Specification for related definitions
|
|
|
|
|
|
|
|
---------------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI GetDriverName() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpGetDriverName (
|
|
|
|
IN EFI_COMPONENT_NAME2_PROTOCOL *Snp,
|
|
|
|
IN CHAR8 *Lang,
|
|
|
|
OUT CHAR16 **DriverName
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* UEFI GetControllerName() function
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SnpGetControllerName (
|
|
|
|
IN EFI_COMPONENT_NAME2_PROTOCOL *Cnp,
|
|
|
|
IN EFI_HANDLE ControllerHandle,
|
|
|
|
IN EFI_HANDLE ChildHandle OPTIONAL,
|
|
|
|
IN CHAR8 *Lang,
|
|
|
|
OUT CHAR16 **ControllerName
|
|
|
|
);
|
|
|
|
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
Utility functions
|
|
|
|
------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
EFI_MAC_ADDRESS
|
|
|
|
GetCurrentMacAddress (
|
|
|
|
VOID
|
|
|
|
);
|
|
|
|
|
|
|
|
#endif // __LAN9118_DXE_H__
|