]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Nt32Pkg/SnpNt32Dxe/SnpNt32.h
1. Import SnpNt32Dxe. That is a thunk driver could produce SNP protocol on NT32 platf...
[mirror_edk2.git] / Nt32Pkg / SnpNt32Dxe / SnpNt32.h
diff --git a/Nt32Pkg/SnpNt32Dxe/SnpNt32.h b/Nt32Pkg/SnpNt32Dxe/SnpNt32.h
new file mode 100644 (file)
index 0000000..d1b999f
--- /dev/null
@@ -0,0 +1,246 @@
+/** @file
+
+Copyright (c) 2006 - 2007, Intel Corporation
+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.
+
+Module Name:
+
+  SnpNt32.h
+
+Abstract:
+
+-**/
+
+#ifndef _SNP_NT32_H_
+#define _SNP_NT32_H_
+\r
+#include <PiDxe.h>\r
+\r
+#include <Protocol/SimpleNetwork.h>\r
+#include <Protocol/DevicePath.h>
+#include <Protocol/WinNtThunk.h>\r
+
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/DevicePathLib.h>
+#include <Library/NetLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+typedef struct _SNPNT32_GLOBAL_DATA  SNPNT32_GLOBAL_DATA;
+typedef struct _SNPNT32_INSTANCE_DATA SNPNT32_INSTANCE_DATA;
+
+#define NETWORK_LIBRARY_NAME_U          L"SnpNt32Io.dll"
+
+#define NETWORK_LIBRARY_INITIALIZE      "SnpInitialize"
+#define NETWORK_LIBRARY_FINALIZE        "SnpFinalize"
+#define NETWORK_LIBRARY_SET_RCV_FILTER  "SnpSetReceiveFilter"
+#define NETWORK_LIBRARY_RECEIVE         "SnpReceive"
+#define NETWORK_LIBRARY_TRANSMIT        "SnpTransmit"
+
+#pragma pack(1)
+typedef struct _NT_NET_INTERFACE_INFO {
+  UINT32          InterfaceIndex;
+  EFI_MAC_ADDRESS MacAddr;
+} NT_NET_INTERFACE_INFO;
+#pragma pack()
+
+#define NET_ETHER_HEADER_SIZE     14
+
+#define MAX_INTERFACE_INFO_NUMBER 16
+#define MAX_FILE_NAME_LENGTH      280
+
+//
+//  Functions in Net Library
+//
+typedef
+INT32
+(*NT_NET_INITIALIZE) (
+  IN OUT  UINT32                *InterfaceCount,
+  IN OUT  NT_NET_INTERFACE_INFO * InterfaceInfoBuffer
+  );
+
+typedef
+INT32
+(*NT_NET_FINALIZE) (
+  VOID
+  );
+
+typedef
+INT32
+(*NT_NET_SET_RECEIVE_FILTER) (
+  IN  UINT32                        Index,
+  IN  UINT32                        EnableFilter,
+  IN  UINT32                        MCastFilterCnt,
+  IN  EFI_MAC_ADDRESS               * MCastFilter
+  );
+
+typedef
+INT32
+(*NT_NET_RECEIVE) (
+  IN      UINT32                        Index,
+  IN OUT  UINT32                        *BufferSize,
+  OUT     VOID                          *Buffer
+  );
+
+typedef
+INT32
+(*NT_NET_TRANSMIT) (
+  IN  UINT32                        Index,
+  IN  UINT32                        HeaderSize,
+  IN  UINT32                        BufferSize,
+  IN  VOID                          *Buffer,
+  IN  EFI_MAC_ADDRESS               * SrcAddr,
+  IN  EFI_MAC_ADDRESS               * DestAddr,
+  IN  UINT16                        *Protocol
+  );
+
+typedef struct _NT_NET_UTILITY_TABLE {
+  NT_NET_INITIALIZE         Initialize;
+  NT_NET_FINALIZE           Finalize;
+  NT_NET_SET_RECEIVE_FILTER SetReceiveFilter;
+  NT_NET_RECEIVE            Receive;
+  NT_NET_TRANSMIT           Transmit;
+} NT_NET_UTILITY_TABLE;
+
+//
+//  Private functions
+//
+typedef
+EFI_STATUS
+(*SNPNT32_INITIALIZE_GLOBAL_DATA) (
+  IN SNPNT32_GLOBAL_DATA * This
+  );
+
+typedef
+EFI_STATUS
+(*SNPNT32_INITIALIZE_INSTANCE_DATA) (
+  IN SNPNT32_GLOBAL_DATA    * This,
+  IN SNPNT32_INSTANCE_DATA  * Instance
+  );
+
+typedef
+EFI_STATUS
+(*SNPNT32_CLOSE_INSTANCE) (
+  IN SNPNT32_GLOBAL_DATA    * This,
+  IN SNPNT32_INSTANCE_DATA  * Instance
+  );
+
+//
+//  Global data for this driver
+//
+#define SNP_NT32_DRIVER_SIGNATURE EFI_SIGNATURE_32 ('W', 'S', 'N', 'P')
+
+typedef struct _SNPNT32_GLOBAL_DATA {
+  UINT32                            Signature;
+
+  //
+  //  List for all the fake SNP instance
+  //
+  NET_LIST_ENTRY                    InstanceList;
+
+  EFI_WIN_NT_THUNK_PROTOCOL         *WinNtThunk;
+  HMODULE                           NetworkLibraryHandle;
+
+  NT_NET_UTILITY_TABLE              NtNetUtilityTable;
+
+  NET_LOCK                          Lock;
+
+  //
+  //  Private functions
+  //
+  SNPNT32_INITIALIZE_GLOBAL_DATA    InitializeGlobalData;
+  SNPNT32_INITIALIZE_INSTANCE_DATA  InitializeInstanceData;
+  SNPNT32_CLOSE_INSTANCE            CloseInstance;
+} SNPNT32_GLOBAL_DATA;
+
+//
+//  Instance data for each fake SNP instance
+//
+#define SNP_NT32_INSTANCE_SIGNATURE EFI_SIGNATURE_32 ('w', 'S', 'N', 'P')
+
+typedef struct _SNPNT32_INSTANCE_DATA {
+  UINT32                      Signature;
+
+  //
+  //  List entry use for linking with other instance
+  //
+  NET_LIST_ENTRY              Entry;
+
+  SNPNT32_GLOBAL_DATA         *GlobalData;
+
+  EFI_HANDLE                  DeviceHandle;
+  EFI_DEVICE_PATH_PROTOCOL    *DevicePath;
+
+  EFI_SIMPLE_NETWORK_PROTOCOL Snp;
+  EFI_SIMPLE_NETWORK_MODE     Mode;
+
+  NT_NET_INTERFACE_INFO       InterfaceInfo;
+
+  //
+  //  Private functions
+  //
+} SNPNT32_INSTANCE_DATA;
+
+#define SNP_NT32_INSTANCE_DATA_FROM_SNP_THIS(a) \
+  CR ( \
+  a, \
+  SNPNT32_INSTANCE_DATA, \
+  Snp, \
+  SNP_NT32_INSTANCE_SIGNATURE \
+  )
+
+extern EFI_DRIVER_BINDING_PROTOCOL  gSnpNt32DriverBinding;
+extern EFI_COMPONENT_NAME_PROTOCOL   gSnpNt32DriverComponentName;
+
+EFI_STATUS
+EFIAPI
+SnpNt32DriverBindingSupported (
+  IN EFI_DRIVER_BINDING_PROTOCOL  * This,
+  IN EFI_HANDLE                   ControllerHandle,
+  IN EFI_DEVICE_PATH_PROTOCOL     * RemainingDevicePath OPTIONAL
+  );
+
+EFI_STATUS
+EFIAPI
+SnpNt32DriverBindingStart (
+  IN EFI_DRIVER_BINDING_PROTOCOL  * This,
+  IN EFI_HANDLE                   ControllerHandle,
+  IN EFI_DEVICE_PATH_PROTOCOL     * RemainingDevicePath OPTIONAL
+  );
+
+EFI_STATUS
+EFIAPI
+SnpNt32DriverBindingStop (
+  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
+  IN  EFI_HANDLE                   ControllerHandle,
+  IN  UINTN                        NumberOfChildren,
+  IN  EFI_HANDLE                   *ChildHandleBuffer
+  );
+
+EFI_STATUS
+SnpNt32InitializeGlobalData (
+  IN SNPNT32_GLOBAL_DATA *This
+  );
+
+EFI_STATUS
+SnpNt32InitializeInstanceData (
+  IN SNPNT32_GLOBAL_DATA    *This,
+  IN SNPNT32_INSTANCE_DATA  *Instance
+  );
+
+EFI_STATUS
+SnpNt32CloseInstance (
+  IN SNPNT32_GLOBAL_DATA    *This,
+  IN SNPNT32_INSTANCE_DATA  *Instance
+  );
+
+#endif