348 lines
8.7 KiB
C
348 lines
8.7 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1998-99 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
1394enum.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Definitions for 1394 Ndis enumerator
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Alireza Dabagh (alid) Nov 98
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
Kernel mode only
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
#ifndef _NDISENUM1394_
|
|||
|
#define _NDISENUM1394_
|
|||
|
|
|||
|
typedef struct _NDISENUM1394_LOCAL_HOST NDISENUM1394_LOCAL_HOST,*PNDISENUM1394_LOCAL_HOST;
|
|||
|
typedef struct _NDISENUM1394_REMOTE_NODE NDISENUM1394_REMOTE_NODE,*PNDISENUM1394_REMOTE_NODE;
|
|||
|
|
|||
|
//
|
|||
|
// flags for LocalHost->Flags
|
|||
|
//
|
|||
|
#define NDISENUM1394_LOCALHOST_REGISTERED 0x00000001
|
|||
|
|
|||
|
//
|
|||
|
// flags for RemoteNode->Flags
|
|||
|
//
|
|||
|
#define NDISENUM1394_NODE_INDICATED 0x00000001
|
|||
|
#define NDISENUM1394_NODE_ADDED 0x00000002
|
|||
|
#define NDISENUM1394_NODE_PNP_STARTED 0x00000004
|
|||
|
#define NDISENUM1394_NODE_PNP_REMOVED 0x00000008
|
|||
|
|
|||
|
|
|||
|
#define NDISENUM1394_TAG_LOCAL_HOST 'hl4N'
|
|||
|
#define NDISENUM1394_TAG_WORK_ITEM 'iw4N'
|
|||
|
#define NDISENUM1394_TAG_IRB 'br4N'
|
|||
|
#define NDISENUM1394_TAG_DEVICE_NAME 'nd4N'
|
|||
|
#define NDISENUM1394_TAG_1394API_REQ 'qr4N'
|
|||
|
#define NDISENUM1394_TAG_DEFAULT ' 4N'
|
|||
|
|
|||
|
#define ENUM_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
|
|||
|
#define ENUM_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
|
|||
|
#define ENUM_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
|
|||
|
#define ENUM_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
|
|||
|
|
|||
|
|
|||
|
typedef enum _NDIS_PNP_DEVICE_STATE
|
|||
|
{
|
|||
|
PnPDeviceAdded,
|
|||
|
PnPDeviceStarted,
|
|||
|
PnPDeviceQueryStopped,
|
|||
|
PnPDeviceStopped,
|
|||
|
PnPDeviceQueryRemoved,
|
|||
|
PnPDeviceRemoved,
|
|||
|
PnPDeviceSurpriseRemoved
|
|||
|
} NDIS_PNP_DEVICE_STATE;
|
|||
|
|
|||
|
typedef enum _NDISENUM1394_PNP_OP
|
|||
|
{
|
|||
|
NdisEnum1394_StopDevice,
|
|||
|
NdisEnum1394_RemoveDevice,
|
|||
|
NdisEnum1394_SurpriseRemoveDevice,
|
|||
|
|
|||
|
|
|||
|
} NDISENUM1394_PNP_OP, *PNDISENUM1394_PNP_OP;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// block used for references...
|
|||
|
//
|
|||
|
typedef struct _REFERENCE
|
|||
|
{
|
|||
|
KSPIN_LOCK SpinLock;
|
|||
|
USHORT ReferenceCount;
|
|||
|
BOOLEAN Closing;
|
|||
|
} REFERENCE, * PREFERENCE;
|
|||
|
|
|||
|
//
|
|||
|
// one per 1394 local host. all remote 1394 controllers connected to a local host
|
|||
|
// will be queued on this structure
|
|||
|
//
|
|||
|
struct _NDISENUM1394_LOCAL_HOST
|
|||
|
{
|
|||
|
PNDISENUM1394_LOCAL_HOST Next; // next local host node
|
|||
|
PVOID Nic1394AdapterContext; // Nic1394 context for the local host
|
|||
|
LARGE_INTEGER UniqueId; // unique ID for local host
|
|||
|
PDEVICE_OBJECT PhysicalDeviceObject; // PDO created by 1394 bus
|
|||
|
PNDISENUM1394_REMOTE_NODE RemoteNodeList; // remote Nodes on local host
|
|||
|
KSPIN_LOCK Lock;
|
|||
|
ULONG Flags;
|
|||
|
REFERENCE Reference;
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// one per remote node
|
|||
|
//
|
|||
|
struct _NDISENUM1394_REMOTE_NODE
|
|||
|
{
|
|||
|
PNDISENUM1394_REMOTE_NODE Next;
|
|||
|
PVOID Nic1394NodeContext; // Nic1394 context for the remote node
|
|||
|
PDEVICE_OBJECT DeviceObject;
|
|||
|
PDEVICE_OBJECT NextDeviceObject;
|
|||
|
PDEVICE_OBJECT PhysicalDeviceObject;
|
|||
|
KSPIN_LOCK Lock;
|
|||
|
PNDISENUM1394_LOCAL_HOST LocalHost;
|
|||
|
ULONG Flags;
|
|||
|
ULONG UniqueId[2];
|
|||
|
NDIS_PNP_DEVICE_STATE PnPDeviceState;
|
|||
|
REFERENCE Reference;
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
#define INITIALIZE_EVENT(_pEvent_) KeInitializeEvent(_pEvent_, NotificationEvent, FALSE)
|
|||
|
#define SET_EVENT(_pEvent_) KeSetEvent(_pEvent_, 0, FALSE)
|
|||
|
#define RESET_EVENT(_pEvent_) KeResetEvent(_pEvent_)
|
|||
|
|
|||
|
#define WAIT_FOR_OBJECT(_O_, _TO_) KeWaitForSingleObject(_O_, \
|
|||
|
Executive, \
|
|||
|
KernelMode, \
|
|||
|
FALSE, \
|
|||
|
_TO_) \
|
|||
|
|
|||
|
#define ALLOC_FROM_POOL(_Size_, _Tag_) ExAllocatePoolWithTag(NonPagedPool, \
|
|||
|
_Size_, \
|
|||
|
_Tag_)
|
|||
|
|
|||
|
#define FREE_POOL(_P_) ExFreePool(_P_)
|
|||
|
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
DriverEntry(
|
|||
|
IN PDRIVER_OBJECT DriverObject,
|
|||
|
IN PUNICODE_STRING RegistryPath
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
ndisEnum1394InitializeRef(
|
|||
|
IN PREFERENCE RefP
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
ndisEnum1394ReferenceRef(
|
|||
|
IN PREFERENCE RefP
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
ndisEnum1394DereferenceRef(
|
|||
|
IN PREFERENCE RefP
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
ndisEnum1394CloseRef(
|
|||
|
IN PREFERENCE RefP
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
ndisEnum1394ReferenceLocalHost(
|
|||
|
IN PNDISENUM1394_LOCAL_HOST LocalHost
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
ndisEnum1394DereferenceLocalHost(
|
|||
|
IN PNDISENUM1394_LOCAL_HOST LocalHost
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394AddDevice(
|
|||
|
PDRIVER_OBJECT DriverObject,
|
|||
|
PDEVICE_OBJECT PhysicalDeviceObject
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394PnpDispatch(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394PowerDispatch(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394WMIDispatch(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394StartDevice(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394RemoveDevice(
|
|||
|
PDEVICE_OBJECT DeviceObject,
|
|||
|
PIRP Irp,
|
|||
|
NDISENUM1394_PNP_OP PnpOp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394CreateIrpHandler(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394CloseIrpHandler(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394DeviceIoControl(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
ndisEnum1394Unload(
|
|||
|
IN PDRIVER_OBJECT DriverObject
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394GetLocalHostForRemoteNode(
|
|||
|
IN PNDISENUM1394_REMOTE_NODE RemoteNode,
|
|||
|
OUT PNDISENUM1394_LOCAL_HOST * pLocalHost
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
ndisEnum1394GetLocalHostForUniqueId(
|
|||
|
LARGE_INTEGER UniqueId,
|
|||
|
OUT PNDISENUM1394_LOCAL_HOST * pLocalHost
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394BusRequest(
|
|||
|
PDEVICE_OBJECT DeviceObject,
|
|||
|
PIRB Irb
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394IrpCompletion(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp,
|
|||
|
IN PVOID Context
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394PassIrpDownTheStack(
|
|||
|
IN PIRP pIrp,
|
|||
|
IN PDEVICE_OBJECT pNextDeviceObject
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
ndisEnum1394FreeLocalHost(
|
|||
|
IN PNDISENUM1394_LOCAL_HOST LocalHost
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
ndisEnum1394IndicateNodes(
|
|||
|
PNDISENUM1394_LOCAL_HOST LocalHost
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
ndisEnum1394DummyIrpHandler(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
NdisEnum1394RegisterDriver(
|
|||
|
IN PNIC1394_CHARACTERISTICS Characteristics
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
NdisEnum1394DeregisterDriver(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
NdisEnum1394RegisterAdapter(
|
|||
|
IN PVOID Nic1394AdapterContext,
|
|||
|
IN PDEVICE_OBJECT PhysicalDeviceObject,
|
|||
|
OUT PVOID* pEnum1394AdapterHandle,
|
|||
|
OUT PLARGE_INTEGER pLocalHostUniqueId
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
NdisEnum1394DeregisterAdapter(
|
|||
|
IN PVOID Enum1394AdapterHandle
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
Enum1394Callback(
|
|||
|
PVOID CallBackContext,
|
|||
|
PVOID Source,
|
|||
|
PVOID Characteristics
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// different debug level defines
|
|||
|
//
|
|||
|
|
|||
|
#define ENUM1394_DBGLEVEL_NONE 0
|
|||
|
#define ENUM1394_DBGLEVEL_ERROR 1
|
|||
|
#define ENUM1394_DBGLEVEL_WARN 2
|
|||
|
#define ENUM1394_DBGLEVEL_INFO 3
|
|||
|
|
|||
|
#if DBG
|
|||
|
#define DBGBREAK DbgBreakPoint
|
|||
|
#define DbgIsNull(_Ptr) ( ((PVOID)(_Ptr)) == NULL )
|
|||
|
|
|||
|
#define DBGPRINT(Level, Fmt) \
|
|||
|
{ \
|
|||
|
if (Enum1394DebugLevel >= Level) \
|
|||
|
{ \
|
|||
|
DbgPrint Fmt; \
|
|||
|
} \
|
|||
|
}
|
|||
|
|
|||
|
#else
|
|||
|
#define DBGPRINT
|
|||
|
#define DBGBREAK()
|
|||
|
#define DbgIsNull(_Ptr) FALSE
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
#endif //_NDIS_1394_ENUM_
|
|||
|
|
|||
|
|