mirror of
https://github.com/reactos/reactos.git
synced 2024-12-29 10:35:28 +00:00
203 lines
6.1 KiB
C
203 lines
6.1 KiB
C
/*
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
* PROJECT: ReactOS NDIS library
|
|
* FILE: ndis/miniport.h
|
|
* PURPOSE: Definitions for routines used by NDIS miniport drivers
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
struct _ADAPTER_BINDING;
|
|
|
|
typedef struct _HARDWARE_ADDRESS {
|
|
union {
|
|
UCHAR Medium802_3[ETH_LENGTH_OF_ADDRESS];
|
|
} Type;
|
|
} HARDWARE_ADDRESS, *PHARDWARE_ADDRESS;
|
|
|
|
/* Information about a miniport */
|
|
typedef struct _NDIS_M_DRIVER_BLOCK {
|
|
LIST_ENTRY ListEntry; /* Entry on global list */
|
|
KSPIN_LOCK Lock; /* Protecting spin lock */
|
|
NDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics; /* Miniport characteristics */
|
|
WORK_QUEUE_ITEM WorkItem; /* Work item */
|
|
PDRIVER_OBJECT DriverObject; /* Driver object of miniport */
|
|
LIST_ENTRY DeviceList; /* Adapters created by miniport */
|
|
PUNICODE_STRING RegistryPath; /* SCM Registry key */
|
|
#if !defined(_MSC_VER) && defined(_NDIS_)
|
|
} NDIS_M_DRIVER_BLOCK_COMPATIBILITY_HACK_DONT_USE;
|
|
#else
|
|
} NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
|
|
#endif
|
|
|
|
/* There must be some defined struct to do this... */
|
|
typedef struct _NDIS_M_DEVICE_BLOCK {
|
|
PDEVICE_OBJECT DeviceObject;
|
|
PNDIS_STRING SymbolicName;
|
|
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1];
|
|
} NDIS_M_DEVICE_BLOCK, *PNDIS_M_DEVICE_BLOCK;
|
|
|
|
/* resources allocated on behalf on the miniport */
|
|
#define MINIPORT_RESOURCE_TYPE_REGISTRY_DATA 0
|
|
#define MINIPORT_RESOURCE_TYPE_MEMORY 1
|
|
typedef struct _MINIPORT_RESOURCE {
|
|
LIST_ENTRY ListEntry;
|
|
ULONG ResourceType;
|
|
PVOID Resource;
|
|
} MINIPORT_RESOURCE, *PMINIPORT_RESOURCE;
|
|
|
|
/* Configuration context */
|
|
typedef struct _MINIPORT_CONFIGURATION_CONTEXT {
|
|
NDIS_HANDLE Handle;
|
|
LIST_ENTRY ResourceListHead;
|
|
KSPIN_LOCK ResourceLock;
|
|
} MINIPORT_CONFIGURATION_CONTEXT, *PMINIPORT_CONFIGURATION_CONTEXT;
|
|
|
|
/* Bugcheck callback context */
|
|
typedef struct _MINIPORT_BUGCHECK_CONTEXT {
|
|
PVOID DriverContext;
|
|
ADAPTER_SHUTDOWN_HANDLER ShutdownHandler;
|
|
PKBUGCHECK_CALLBACK_RECORD CallbackRecord;
|
|
} MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT;
|
|
|
|
/* a miniport's shared memory */
|
|
typedef struct _MINIPORT_SHARED_MEMORY {
|
|
PDMA_ADAPTER AdapterObject;
|
|
ULONG Length;
|
|
PHYSICAL_ADDRESS PhysicalAddress;
|
|
PVOID VirtualAddress;
|
|
BOOLEAN Cached;
|
|
PNDIS_MINIPORT_BLOCK Adapter;
|
|
PVOID Context;
|
|
PIO_WORKITEM WorkItem;
|
|
} MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY;
|
|
|
|
/* A structure of WrapperConfigurationContext (not compatible with the
|
|
Windows one). */
|
|
typedef struct _NDIS_WRAPPER_CONTEXT {
|
|
HANDLE RegistryHandle;
|
|
PDEVICE_OBJECT DeviceObject;
|
|
ULONG BusNumber;
|
|
ULONG SlotNumber;
|
|
} NDIS_WRAPPER_CONTEXT, *PNDIS_WRAPPER_CONTEXT;
|
|
|
|
#define GET_MINIPORT_DRIVER(Handle)((PNDIS_M_DRIVER_BLOCK)Handle)
|
|
|
|
/* Information about a logical adapter */
|
|
typedef struct _LOGICAL_ADAPTER
|
|
{
|
|
NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */
|
|
PNDIS_MINIPORT_WORK_ITEM WorkQueueHead; /* Head of work queue */
|
|
PNDIS_MINIPORT_WORK_ITEM WorkQueueTail; /* Tail of work queue */
|
|
LIST_ENTRY ListEntry; /* Entry on global list */
|
|
LIST_ENTRY MiniportListEntry; /* Entry on miniport driver list */
|
|
LIST_ENTRY ProtocolListHead; /* List of bound protocols */
|
|
ULONG MediumHeaderSize; /* Size of medium header */
|
|
HARDWARE_ADDRESS Address; /* Hardware address of adapter */
|
|
ULONG AddressLength; /* Length of hardware address */
|
|
PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */
|
|
} LOGICAL_ADAPTER, *PLOGICAL_ADAPTER;
|
|
|
|
#define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle)
|
|
|
|
extern LIST_ENTRY MiniportListHead;
|
|
extern KSPIN_LOCK MiniportListLock;
|
|
extern LIST_ENTRY AdapterListHead;
|
|
extern KSPIN_LOCK AdapterListLock;
|
|
|
|
|
|
#if DBG
|
|
VOID
|
|
MiniDisplayPacket(
|
|
PNDIS_PACKET Packet,
|
|
PCSTR Reason);
|
|
#endif /* DBG */
|
|
|
|
VOID
|
|
MiniIndicateData(
|
|
PLOGICAL_ADAPTER Adapter,
|
|
NDIS_HANDLE MacReceiveContext,
|
|
PVOID HeaderBuffer,
|
|
UINT HeaderBufferSize,
|
|
PVOID LookaheadBuffer,
|
|
UINT LookaheadBufferSize,
|
|
UINT PacketSize);
|
|
|
|
BOOLEAN
|
|
MiniAdapterHasAddress(
|
|
PLOGICAL_ADAPTER Adapter,
|
|
PNDIS_PACKET Packet);
|
|
|
|
PLOGICAL_ADAPTER
|
|
MiniLocateDevice(
|
|
PNDIS_STRING AdapterName);
|
|
|
|
NDIS_STATUS
|
|
MiniQueryInformation(
|
|
PLOGICAL_ADAPTER Adapter,
|
|
NDIS_OID Oid,
|
|
ULONG Size,
|
|
PVOID Buffer,
|
|
PULONG BytesWritten);
|
|
|
|
VOID
|
|
FASTCALL
|
|
MiniQueueWorkItem(
|
|
PLOGICAL_ADAPTER Adapter,
|
|
NDIS_WORK_ITEM_TYPE WorkItemType,
|
|
PVOID WorkItemContext,
|
|
BOOLEAN Top);
|
|
|
|
NDIS_STATUS
|
|
FASTCALL
|
|
MiniDequeueWorkItem(
|
|
PLOGICAL_ADAPTER Adapter,
|
|
NDIS_WORK_ITEM_TYPE *WorkItemType,
|
|
PVOID *WorkItemContext);
|
|
|
|
NDIS_STATUS
|
|
MiniDoRequest(
|
|
PLOGICAL_ADAPTER Adapter,
|
|
PNDIS_REQUEST NdisRequest);
|
|
|
|
BOOLEAN
|
|
NdisFindDevice(
|
|
UINT VendorID,
|
|
UINT DeviceID,
|
|
PUINT BusNumber,
|
|
PUINT SlotNumber);
|
|
|
|
VOID
|
|
NdisStartDevices(VOID);
|
|
|
|
VOID
|
|
NTAPI
|
|
MiniportWorker(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PVOID WorkItem);
|
|
|
|
VOID NTAPI
|
|
MiniSendComplete(
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN PNDIS_PACKET Packet,
|
|
IN NDIS_STATUS Status);
|
|
|
|
BOOLEAN
|
|
MiniIsBusy(
|
|
PLOGICAL_ADAPTER Adapter,
|
|
NDIS_WORK_ITEM_TYPE Type);
|
|
|
|
NDIS_STATUS
|
|
MiniReset(
|
|
PLOGICAL_ADAPTER Adapter);
|
|
|
|
VOID
|
|
MiniDoAddressingReset(
|
|
PLOGICAL_ADAPTER Adapter);
|
|
|
|
VOID
|
|
MiniWorkItemComplete(
|
|
PLOGICAL_ADAPTER Adapter,
|
|
NDIS_WORK_ITEM_TYPE WorkItemType);
|
|
|
|
/* EOF */
|