Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

347 lines
8.7 KiB

/*++
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_