|
|
/*++
Copyright (c) 2002 Microsoft Corporation
Module Name:
ntddsd.h
Abstract:
This is the include file that defines all constants and types for interfacing to the SD bus driver. Author:
Neil Sandlin (neilsa) 01/01/2002
--*/
#ifndef _NTDDSDH_ #define _NTDDSDH_
#if _MSC_VER > 1000 #pragma once #endif
#ifdef __cplusplus extern "C" { #endif
// // Use this version in the interface_data structure //
#define SDBUS_INTERFACE_VERSION 0x101
// // Prototype of the callback routine which is called for SDIO // devices to reflect device interrupts. //
typedef BOOLEAN (*PSDBUS_CALLBACK_ROUTINE) ( IN PVOID Context, IN ULONG InterruptType ); #define SDBUS_INTTYPE_DEVICE 0
// // Interface Data structure used in the SdBusOpenInterface call //
typedef struct _SDBUS_INTERFACE_DATA { USHORT Size; USHORT Version; // // This value should be the next lower device object in the // device stack. // PDEVICE_OBJECT TargetObject;
// // This flag indicates whether the caller expects any device // interrupts from the device. // BOOLEAN DeviceGeneratesInterrupts; // // The caller can specify here the IRQL at which the callback // function is entered. If this value is TRUE, the callback will // be entered at DPC level. If this value is FALSE, the callback // will be entered at passive level. // // Specifying TRUE will generally lower latency time of the interrupt // delivery, at the cost of complicating the device driver, which // must then deal with running at different IRQLs. // BOOLEAN CallbackAtDpcLevel; // // When an IO device interrupts, the SD bus driver will generate a // callback to this routine. // PSDBUS_CALLBACK_ROUTINE CallbackRoutine; // // The caller can specify here a context value which will be passed // to the device interrupt callback routine. // PVOID CallbackRoutineContext; } SDBUS_INTERFACE_DATA, *PSDBUS_INTERFACE_DATA;
// // SdBusOpenInterface() // // This routine establishes a connection to the SD bus driver. // It should be called in the AddDevice routine with the FDO for // the device stack is created. // // The Context pointer returned by this function must be used in // all other SD bus driver calls. // // Callers must be running at IRQL < DISPATCH_LEVEL. //
NTSTATUS SdBusOpenInterface( IN PSDBUS_INTERFACE_DATA InterfaceData, IN PVOID *pContext );
// // SdBusCloseInterface() // // This routine cleans up the SD bus driver interface. It should be // called when the caller's device object is deleted. // // Callers must be running at IRQL < DISPATCH_LEVEL. //
NTSTATUS SdBusCloseInterface( IN PVOID Context );
// // Data structures for request packets // typedef struct _SDBUS_REQUEST_PACKET;
typedef VOID (*PSDBUS_REQUEST_COMPLETION_ROUTINE) ( IN struct _SDBUS_REQUEST_PACKET *SdRp );
typedef enum { SDRP_READ_BLOCK, SDRP_WRITE_BLOCK, SDRP_READ_IO, SDRP_READ_IO_EXTENDED, SDRP_WRITE_IO, SDRP_WRITE_IO_EXTENDED, SDRP_ACKNOWLEDGE_INTERRUPT } SDRP_FUNCTION;
typedef struct _SDBUS_REQUEST_PACKET {
// // Function specifies which operation to perform // SDRP_FUNCTION Function; // // The completion routine is called when the request completes. // PSDBUS_REQUEST_COMPLETION_ROUTINE CompletionRoutine; // // This member of the structure is available for the caller to // use as needed. It is not referenced or used by SdBusSubmitRequest(). // PVOID UserContext; // // Status from operation set at completion // NTSTATUS Status; // // information from operation // ULONG_PTR Information; // // Parameters to the individual functions // union {
struct { PUCHAR Buffer; ULONG Length; ULONGLONG ByteOffset; } ReadBlock;
struct { PUCHAR Buffer; ULONG Length; ULONGLONG ByteOffset; } WriteBlock;
struct { PUCHAR Buffer; ULONG Offset; } ReadIo;
struct { UCHAR Data; ULONG Offset; } WriteIo;
struct { PUCHAR Buffer; ULONG Length; ULONG Offset; } ReadIoExtended;
struct { PUCHAR Buffer; ULONG Length; ULONG Offset; } WriteIoExtended;
} Parameters;
} SDBUS_REQUEST_PACKET, *PSDBUS_REQUEST_PACKET;
// // SdBusSubmitRequest() // // This is the "core" routine for submitting requests. // // Callers of SdBusSubmitRequest must be running at IRQL <= DISPATCH_LEVEL. //
NTSTATUS SdBusSubmitRequest( IN PVOID InterfaceContext, IN PSDBUS_REQUEST_PACKET SdRp );
// // Device Parameters structure // NOTE: currently only memory attributes now, IO attributes will be // added as needed //
typedef struct _SDBUS_DEVICE_PARAMETERS { USHORT Size; USHORT Version; ULONGLONG Capacity; BOOLEAN WriteProtected; } SDBUS_DEVICE_PARAMETERS, *PSDBUS_DEVICE_PARAMETERS;
// // SdBusReadMemory() // SdBusWriteMemory() // // These routines read and write blocks on an SD storage device. // // Callers must be running at IRQL < DISPATCH_LEVEL. //
NTSTATUS SdBusReadMemory( IN PVOID Context, IN ULONGLONG Offset, IN PVOID Buffer, IN ULONG Length, IN ULONG *LengthRead );
NTSTATUS SdBusWriteMemory( IN PVOID Context, IN ULONGLONG Offset, IN PVOID Buffer, IN ULONG Length, IN ULONG *LengthWritten );
// // SdBusReadIo() // SdBusWriteIo() // // These routines read and write data to an SD IO device. // // NOTE: CmdType should contain either 52 or 53, depending on which // SD IO operation is required. // // Callers must be running at IRQL < DISPATCH_LEVEL. // NTSTATUS SdBusReadIo( IN PVOID Context, IN UCHAR CmdType, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length, IN ULONG *LengthRead );
NTSTATUS SdBusWriteIo( IN PVOID Context, IN UCHAR CmdType, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length, IN ULONG *LengthRead );
// // SdBusGetDeviceParameters // // This routine is used to get information about the SD device. // // NOTE: Currently only implemented for SD storage devices. // // Callers must be running at IRQL < DISPATCH_LEVEL. //
NTSTATUS SdBusGetDeviceParameters( IN PVOID Context, IN PSDBUS_DEVICE_PARAMETERS pDeviceParameters, IN ULONG Length );
// // SdBusAcknowledgeCardInterrupt // // This routine is used to signal the end of processing for the // callback routine defined in SDBUS_INTERFACE_DATA. When an IO function // of an SD device asserts an interrupt, the bus driver will disable // that interrupt to allow I/O operations to be sent to the device at // a reasonable IRQL (that is, <=DISPATCH_LEVEL). // // When the function driver's callback routine, which is equivalent to // an ISR, is done clearing the function's interrupt, this routine should // be called to re-enable the IRQ for card interrupts. // // Callers must be running at IRQL <= DISPATCH_LEVEL. //
NTSTATUS SdBusAcknowledgeCardInterrupt( IN PVOID Context );
#ifdef __cplusplus } #endif #endif
|