+++ /dev/null
-/*++\r
-Copyright (c) 2006, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-Module name:\r
- snp.h\r
-\r
-Abstract:\r
-\r
-Revision history:\r
- 2000-Feb-03 M(f)J Genesis.\r
---*/\r
-#ifndef _SNP_H\r
-#define _SNP_H\r
-\r
-\r
-#include "IndustryStandard/pci22.h"\r
-\r
-#define FOUR_GIGABYTES (UINT64) 0x100000000ULL\r
-\r
-#define SNP_DRIVER_SIGNATURE EFI_SIGNATURE_32 ('s', 'n', 'd', 's')\r
-#define MAX_MAP_LENGTH 100\r
-\r
-#define PCI_BAR_IO_MASK 0x00000003\r
-#define PCI_BAR_IO_MODE 0x00000001\r
-\r
-#define PCI_BAR_MEM_MASK 0x0000000F\r
-#define PCI_BAR_MEM_MODE 0x00000000\r
-#define PCI_BAR_MEM_64BIT 0x00000004\r
-\r
-typedef struct {\r
- UINT32 Signature;\r
- EFI_LOCK lock;\r
-\r
- EFI_SIMPLE_NETWORK_PROTOCOL snp;\r
- EFI_SIMPLE_NETWORK_MODE mode;\r
-\r
- EFI_HANDLE device_handle;\r
- EFI_DEVICE_PATH_PROTOCOL *device_path;\r
-\r
- //\r
- // Local instance data needed by SNP driver\r
- //\r
- // Pointer to S/W UNDI API entry point\r
- // This will be NULL for H/W UNDI\r
- //\r
- EFI_STATUS (*issue_undi32_command) (UINT64 cdb);\r
-\r
- BOOLEAN is_swundi;\r
-\r
- //\r
- // undi interface number, if one undi manages more nics\r
- //\r
- PXE_IFNUM if_num;\r
-\r
- //\r
- // Allocated tx/rx buffer that was passed to UNDI Initialize.\r
- //\r
- UINT32 tx_rx_bufsize;\r
- VOID *tx_rx_buffer;\r
- //\r
- // mappable buffers for receive and fill header for undi3.0\r
- // these will be used if the user buffers are above 4GB limit (instead of\r
- // mapping the user buffers)\r
- //\r
- UINT8 *receive_buf;\r
- VOID *ReceiveBufUnmap;\r
- UINT8 *fill_hdr_buf;\r
- VOID *FillHdrBufUnmap;\r
-\r
- EFI_PCI_IO_PROTOCOL *IoFncs;\r
- UINT8 IoBarIndex;\r
- UINT8 MemoryBarIndex;\r
- BOOLEAN IsOldUndi; // true for EFI1.0 UNDI (3.0) drivers\r
- //\r
- // Buffers for command descriptor block, command parameter block\r
- // and data block.\r
- //\r
- PXE_CDB cdb;\r
- VOID *cpb;\r
- VOID *CpbUnmap;\r
- VOID *db;\r
-\r
- //\r
- // UNDI structure, we need to remember the init info for a long time!\r
- //\r
- PXE_DB_GET_INIT_INFO init_info;\r
-\r
- VOID *SnpDriverUnmap;\r
- //\r
- // when ever we map an address, we must remember it's address and the un-map\r
- // cookie so that we can unmap later\r
- //\r
- struct s_map_list {\r
- EFI_PHYSICAL_ADDRESS virt;\r
- VOID *map_cookie;\r
- } map_list[MAX_MAP_LENGTH];\r
-}\r
-SNP_DRIVER;\r
-\r
-#define EFI_SIMPLE_NETWORK_DEV_FROM_THIS(a) CR (a, SNP_DRIVER, snp, SNP_DRIVER_SIGNATURE)\r
-\r
-//\r
-// Global Variables\r
-//\r
-extern EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkComponentName;\r
-extern EFI_DRIVER_BINDING_PROTOCOL gSimpleNetworkDriverBinding;\r
-\r
-extern EFI_PCI_IO_PROTOCOL *mPciIoFncs;\r
-\r
-//\r
-// EFI Component Name Functions\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-SimpleNetworkComponentNameGetDriverName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **DriverName\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-SimpleNetworkComponentNameGetControllerName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
- );\r
-\r
-//\r
-// Virtual to physical mapping for all UNDI 3.0s.\r
-//\r
-extern struct s_v2p {\r
- struct s_v2p *next;\r
- VOID *vaddr;\r
- UINTN bsize;\r
- EFI_PHYSICAL_ADDRESS paddr;\r
- VOID *unmap;\r
-}\r
-*_v2p;\r
-\r
-EFI_STATUS\r
-add_v2p (\r
- struct s_v2p **v2p,\r
- EFI_PCI_IO_PROTOCOL_OPERATION type,\r
- VOID *vaddr,\r
- UINTN bsize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-find_v2p (\r
- struct s_v2p **v2p,\r
- VOID *vaddr\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-del_v2p (\r
- VOID *vaddr\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_block_30 (\r
- IN UINT32 Enable\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_delay_30 (\r
- IN UINT64 MicroSeconds\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_memio_30 (\r
- IN UINT8 ReadOrWrite,\r
- IN UINT8 NumBytes,\r
- IN UINT64 MemOrPortAddress,\r
- IN OUT UINT64 BufferPtr\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_v2p_30 (\r
- IN UINT64 CpuAddr,\r
- IN OUT UINT64 DeviceAddrPtr\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_block (\r
- IN UINT64 UniqueId,\r
- IN UINT32 Enable\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_delay (\r
- IN UINT64 UniqueId,\r
- IN UINT64 MicroSeconds\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_memio (\r
- IN UINT64 UniqueId,\r
- IN UINT8 ReadOrWrite,\r
- IN UINT8 NumBytes,\r
- IN UINT64 MemOrPortAddr,\r
- IN OUT UINT64 BufferPtr\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_map (\r
- IN UINT64 UniqueId,\r
- IN UINT64 CpuAddr,\r
- IN UINT32 NumBytes,\r
- IN UINT32 Direction,\r
- IN OUT UINT64 DeviceAddrPtr\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_unmap (\r
- IN UINT64 UniqueId,\r
- IN UINT64 CpuAddr,\r
- IN UINT32 NumBytes,\r
- IN UINT32 Direction,\r
- IN UINT64 DeviceAddr // not a pointer to device address\r
- )\r
-;\r
-\r
-extern\r
-VOID\r
-snp_undi32_callback_sync (\r
- IN UINT64 UniqueId,\r
- IN UINT64 CpuAddr,\r
- IN UINT32 NumBytes,\r
- IN UINT32 Direction,\r
- IN UINT64 DeviceAddr // not a pointer to device address\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_start (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_stop (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_initialize (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
- IN UINTN extra_rx_buffer_size OPTIONAL,\r
- IN UINTN extra_tx_buffer_size OPTIONAL\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_reset (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
- IN BOOLEAN ExtendedVerification\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_shutdown (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_receive_filters (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
- IN UINT32 enable,\r
- IN UINT32 disable,\r
- IN BOOLEAN reset_mcast_filter,\r
- IN UINTN mcast_filter_count OPTIONAL,\r
- IN EFI_MAC_ADDRESS * mcast_filter OPTIONAL\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_station_address (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
- IN BOOLEAN reset,\r
- IN EFI_MAC_ADDRESS *new OPTIONAL\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_statistics (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
- IN BOOLEAN reset,\r
- IN OUT UINTN *statistics_size OPTIONAL,\r
- IN OUT EFI_NETWORK_STATISTICS * statistics_table OPTIONAL\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_mcast_ip_to_mac (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
- IN BOOLEAN IPv6,\r
- IN EFI_IP_ADDRESS *IP,\r
- OUT EFI_MAC_ADDRESS *MAC\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_nvdata (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
- IN BOOLEAN read_write,\r
- IN UINTN offset,\r
- IN UINTN buffer_size,\r
- IN OUT VOID *buffer\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_get_status (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
- OUT UINT32 *interrupt_status OPTIONAL,\r
- OUT VOID **tx_buffer OPTIONAL\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_transmit (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
- IN UINTN header_size,\r
- IN UINTN buffer_size,\r
- IN VOID *buffer,\r
- IN EFI_MAC_ADDRESS * src_addr OPTIONAL,\r
- IN EFI_MAC_ADDRESS * dest_addr OPTIONAL,\r
- IN UINT16 *protocol OPTIONAL\r
- )\r
-;\r
-\r
-extern\r
-EFI_STATUS\r
-EFIAPI\r
-snp_undi32_receive (\r
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
- OUT UINTN *header_size OPTIONAL,\r
- IN OUT UINTN *buffer_size,\r
- OUT VOID *buffer,\r
- OUT EFI_MAC_ADDRESS * src_addr OPTIONAL,\r
- OUT EFI_MAC_ADDRESS * dest_addr OPTIONAL,\r
- OUT UINT16 *protocol OPTIONAL\r
- )\r
-;\r
-\r
-VOID\r
-EFIAPI\r
-SnpWaitForPacketNotify (\r
- IN EFI_EVENT Event,\r
- IN VOID *SnpPtr\r
- );\r
-\r
-EFI_STATUS\r
-pxe_start (\r
- SNP_DRIVER *snp\r
- );\r
-\r
-EFI_STATUS\r
-pxe_stop (\r
- SNP_DRIVER *snp\r
- );\r
-\r
-EFI_STATUS\r
-pxe_init (\r
- SNP_DRIVER *snp,\r
- UINT16 OpFlags\r
- );\r
-\r
-EFI_STATUS\r
-pxe_shutdown (\r
- SNP_DRIVER *snp\r
- );\r
-\r
-EFI_STATUS\r
-pxe_get_stn_addr (\r
- SNP_DRIVER *snp\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(*issue_undi32_command) (\r
- UINT64 cdb\r
- );\r
-\r
-typedef\r
-VOID\r
-(*ptr) (\r
- VOID\r
- );\r
-\r
-#define SNP_MEM_PAGES(x) (((x) - 1) / 4096 + 1)\r
-\r
-#endif /* _SNP_H */\r