blob: cc883e80797ee89ce4d4fc97fbeec4024177a8fd [file] [log] [blame]
/** @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:
*
* @param pobj: A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL instance.
*
* Description:
*
* This function starts a network interface. If the network interface successfully starts, then
* EFI_SUCCESS will be returned.
*/
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__