mirror of
https://github.com/reactos/reactos.git
synced 2025-01-05 22:12:46 +00:00
8a978a179f
Takern from Microsoft GitHub repo:
d9c6040fe9
Licensed under MIT
168 lines
3.6 KiB
C++
168 lines
3.6 KiB
C++
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
FxDmaTransactionCallbacks.h
|
|
|
|
Abstract:
|
|
|
|
This module implements the FxDmaTransaction object callbacks
|
|
|
|
Environment:
|
|
|
|
kernel mode only
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _FXDMATRANSACTIONCALLBACKS_H
|
|
#define _FXDMATRANSACTIONCALLBACKS_H
|
|
|
|
//
|
|
// FxDmaTransactionProgramDma or FxDmaTransactionReserveDma callback delegate
|
|
// These are mutually exclusive callbacks and are packed together in
|
|
// the callback structure (C++ won't allow two classes with constructors
|
|
// to be together in a union, so the containing class can't do the
|
|
// packing)
|
|
//
|
|
class FxDmaTransactionProgramOrReserveDma : public FxCallback {
|
|
|
|
public:
|
|
union {
|
|
PFN_WDF_PROGRAM_DMA ProgramDma;
|
|
PFN_WDF_RESERVE_DMA ReserveDma;
|
|
} Method;
|
|
|
|
FxDmaTransactionProgramOrReserveDma(
|
|
VOID
|
|
) :
|
|
FxCallback()
|
|
{
|
|
Method.ProgramDma = NULL;
|
|
}
|
|
|
|
BOOLEAN
|
|
InvokeProgramDma(
|
|
__in WDFDMATRANSACTION Transaction,
|
|
__in WDFDEVICE Device,
|
|
__in PVOID Context,
|
|
__in WDF_DMA_DIRECTION Direction,
|
|
__in PSCATTER_GATHER_LIST SgList
|
|
)
|
|
{
|
|
if (Method.ProgramDma) {
|
|
BOOLEAN cc;
|
|
|
|
CallbackStart();
|
|
cc = Method.ProgramDma( Transaction,
|
|
Device,
|
|
Context,
|
|
Direction,
|
|
SgList );
|
|
CallbackEnd();
|
|
|
|
return cc;
|
|
}
|
|
else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
VOID
|
|
InvokeReserveDma(
|
|
__in WDFDMATRANSACTION Transaction,
|
|
__in PVOID Context
|
|
)
|
|
{
|
|
if (Method.ReserveDma) {
|
|
CallbackStart();
|
|
Method.ReserveDma( Transaction, Context );
|
|
CallbackEnd();
|
|
}
|
|
}
|
|
|
|
VOID
|
|
Clear(
|
|
VOID
|
|
)
|
|
{
|
|
Method.ProgramDma = NULL;
|
|
}
|
|
};
|
|
|
|
//
|
|
// FxDmaTransactionConfigureChannel callback delegate
|
|
//
|
|
|
|
class FxDmaTransactionConfigureChannel : public FxCallback {
|
|
|
|
public:
|
|
PFN_WDF_DMA_TRANSACTION_CONFIGURE_DMA_CHANNEL Method;
|
|
|
|
FxDmaTransactionConfigureChannel(
|
|
VOID
|
|
) :
|
|
FxCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
_Must_inspect_result_
|
|
BOOLEAN
|
|
Invoke(
|
|
__in WDFDMATRANSACTION DmaTransaction,
|
|
__in WDFDEVICE Device,
|
|
__in PVOID Context,
|
|
__in_opt PMDL Mdl,
|
|
__in size_t Offset,
|
|
__in size_t Length
|
|
)
|
|
{
|
|
BOOLEAN b = TRUE;
|
|
if (Method) {
|
|
CallbackStart();
|
|
b = Method( DmaTransaction, Device, Context, Mdl, Offset, Length );
|
|
CallbackEnd();
|
|
}
|
|
return b;
|
|
}
|
|
};
|
|
|
|
//
|
|
// FxDmaTransactionTransferComplete callback delegate
|
|
//
|
|
|
|
class FxDmaTransactionTransferComplete : public FxCallback {
|
|
|
|
public:
|
|
PFN_WDF_DMA_TRANSACTION_DMA_TRANSFER_COMPLETE Method;
|
|
|
|
FxDmaTransactionTransferComplete(
|
|
VOID
|
|
) :
|
|
FxCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
VOID
|
|
Invoke(
|
|
__in WDFDMATRANSACTION Transaction,
|
|
__in WDFDEVICE Device,
|
|
__in WDFCONTEXT Context,
|
|
__in WDF_DMA_DIRECTION Direction,
|
|
__in DMA_COMPLETION_STATUS Status
|
|
)
|
|
{
|
|
if (Method) {
|
|
CallbackStart();
|
|
Method( Transaction, Device, Context, Direction, Status );
|
|
CallbackEnd();
|
|
}
|
|
}
|
|
};
|
|
|
|
#endif // _FXDMATRANSACTIONCALLBACKS_H
|