Leaked source code of windows server 2003
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.
|
|
/*++
Copyright (c) 2002 Microsoft Corporation
Module Name:
workeng.h
Abstract:
External definitions for intermodule functions.
Revision History:
--*/ #ifndef _SDBUS_WORKENG_H_
#define _SDBUS_WORKENG_H_
typedef VOID (*PSDBUS_WORKPACKET_COMPLETION_ROUTINE) ( IN struct _SD_WORK_PACKET *WorkPacket, IN NTSTATUS status );
typedef NTSTATUS (*PSDBUS_WORKER_MINIPROC) ( IN struct _SD_WORK_PACKET *WorkPacket );
//
// IO worker structures
//
typedef struct _SD_WORK_PACKET {
//
// Routine to call on completion of work packet
//
PSDBUS_WORKPACKET_COMPLETION_ROUTINE CompletionRoutine; PVOID CompletionContext;
//
// List entry chain for work packets
//
LIST_ENTRY WorkPacketQueue; //
// Next workpacket in chain for an atomic workpacket sequence
//
struct _SD_WORK_PACKET *NextWorkPacketInChain; NTSTATUS ChainedStatus; //
// Function this work packet will perform
//
UCHAR Function; PSDBUS_WORKER_MINIPROC WorkerMiniProc; //
// Current phase of function
//
UCHAR FunctionPhase; //
// Engine will switch to this phase if non-zero when an
// error is detected.
//
UCHAR FunctionPhaseOnError; //
// Delay in usec till next operation in function
//
ULONG DelayTime; //
// Indicates the type of event that just occurred
//
ULONG EventStatus; //
// Indicates the type of event that indicates success for the
// current operation.
//
ULONG RequiredEvent; //
// Set to TRUE if no card events are expected for this packet
//
BOOLEAN DisableCardEvents; //
// Indicates whether initialization has been run for this packet
//
BOOLEAN PacketStarted; //
// Used for timeouts during packet processing
//
UCHAR Retries; //
// scratch value used during reset
//
ULONG TempCtl; ULONG ResetCount; //
// block operation variables
//
ULONG BlockCount; ULONG LastBlockLength; ULONG CurrentBlockLength; //
// result of operation
//
ULONG_PTR Information; //
// FdoExtension target of operation
//
struct _FDO_EXTENSION *FdoExtension; //
// PdoExtension target of operation
//
struct _PDO_EXTENSION *PdoExtension; //
// parameters
//
union {
struct { PUCHAR Buffer; ULONG Length; ULONGLONG ByteOffset; } ReadBlock;
struct { PUCHAR Buffer; ULONG Length; ULONGLONG ByteOffset; } WriteBlock;
struct { PUCHAR Buffer; ULONG Length; ULONG Offset; } ReadIo;
struct { PUCHAR Buffer; ULONG Length; ULONG Offset; UCHAR Data; } WriteIo;
} Parameters;
//
// Current SD Command
//
BOOLEAN ExecutingSDCommand; UCHAR Cmd; UCHAR CmdPhase; UCHAR ResponseType; ULONG Argument; ULONG Flags; //
// response from card
//
ULONG ResponseBuffer[4]; #define SDBUS_RESPONSE_BUFFER_LENGTH 16
} SD_WORK_PACKET, *PSD_WORK_PACKET;
//
// Work packet type defines in which queue the workpacket will be placed
//
#define WP_TYPE_SYSTEM 1
#define WP_TYPE_SYSTEM_PRIORITY 2
#define WP_TYPE_IO 3
//
// Set Cmd Parameters for ASYNC calls
//
#define SET_CMD_PARAMETERS(xWorkPacket, xCmd, xResponseType, xArgument, xFlags) { \
xWorkPacket->ExecutingSDCommand = TRUE; \ xWorkPacket->Cmd = xCmd; \ xWorkPacket->ResponseType = xResponseType; \ xWorkPacket->Argument = xArgument; \ xWorkPacket->Flags = xFlags; \ xWorkPacket->CmdPhase = 0; }
//
// Work Engine routines
//
VOID SdbusQueueWorkPacket( IN PFDO_EXTENSION FdoExtension, IN PSD_WORK_PACKET WorkPacket, IN UCHAR WorkPacketType );
VOID SdbusPushWorkerEvent( IN PFDO_EXTENSION FdoExtension, IN ULONG EventStatus );
VOID SdbusWorkerTimeoutDpc( IN PKDPC Dpc, IN PFDO_EXTENSION FdoExtension, IN PVOID SystemContext1, IN PVOID SystemContext2 );
VOID SdbusWorkerDpc( IN PKDPC Dpc, IN PFDO_EXTENSION FdoExtension, IN PVOID SystemContext1, IN PVOID SystemContext2 );
NTSTATUS SdbusSendCmdSynchronous( IN PFDO_EXTENSION FdoExtension, UCHAR Cmd, UCHAR ResponseType, ULONG Argument, ULONG Flags, PVOID Response, ULONG ResponseLength ); #endif // _SDBUS_WORKENG_H_
|