ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

cdrom.h
Go to the documentation of this file.
00001 /*++
00002 
00003 Copyright (C) Microsoft Corporation, 1991 - 1999
00004 
00005 Module Name:
00006 
00007     cdromp.h
00008 
00009 Abstract:
00010 
00011     Private header file for cdrom.sys.  This contains private
00012     structure and function declarations as well as constant
00013     values which do not need to be exported.
00014 
00015 Author:
00016 
00017 Environment:
00018 
00019     kernel mode only
00020 
00021 Notes:
00022 
00023 
00024 Revision History:
00025 
00026 --*/
00027 
00028 #ifndef __CDROMP_H__
00029 #define __CDROMP_H__
00030 
00031 #include "ntddmmc.h"
00032 #include "trace.h"
00033 
00034 extern CLASSPNP_SCAN_FOR_SPECIAL_INFO CdromHackItems[];
00035 
00036 typedef enum {
00037     CdromDebugError     = 0,  // always printed
00038     CdromDebugWarning   = 1,  // set bit 0x00000001 in nt!kd_cdrom_mask
00039     CdromDebugTrace     = 2,  // set bit 0x00000002 in nt!kd_cdrom_mask
00040     CdromDebugInfo      = 3,  // set bit 0x00000004 in nt!kd_cdrom_mask
00041 #if 0
00042     CdromDebug          = z,  // set bit 0x00000000 in nt!kd_cdrom_mask
00043     CdromDebug          = z,  // set bit 0x00000000 in nt!kd_cdrom_mask
00044     CdromDebug          = z,  // set bit 0x00000000 in nt!kd_cdrom_mask
00045     CdromDebug          = z,  // set bit 0x00000000 in nt!kd_cdrom_mask
00046 #endif
00047     CdromDebugFeatures  = 32  // set bit 0x80000000 in nt!kd_cdrom_mask
00048 }CdromError;
00049 
00050 #define CDROM_GET_CONFIGURATION_TIMEOUT    (0x4)
00051 
00052 #define CDROM_HACK_DEC_RRD                 (0x00000001)
00053 #define CDROM_HACK_FUJITSU_FMCD_10x        (0x00000002)
00054 #define CDROM_HACK_HITACHI_1750            (0x00000004)
00055 #define CDROM_HACK_HITACHI_GD_2000         (0x00000008)
00056 #define CDROM_HACK_TOSHIBA_SD_W1101        (0x00000010)
00057 #define CDROM_HACK_TOSHIBA_XM_3xx          (0x00000020)
00058 #define CDROM_HACK_NEC_CDDA                (0x00000040)
00059 #define CDROM_HACK_PLEXTOR_CDDA            (0x00000080)
00060 #define CDROM_HACK_BAD_GET_CONFIG_SUPPORT  (0x00000100)
00061 #define CDROM_HACK_FORCE_READ_CD_DETECTION (0x00000200)
00062 #define CDROM_HACK_READ_CD_SUPPORTED       (0x00000400)
00063 #define CDROM_HACK_LOCKED_PAGES            (0x80000000) // not a valid flag to save
00064                                      
00065 #define CDROM_HACK_VALID_FLAGS             (0x000007ff)
00066 #define CDROM_HACK_INVALID_FLAGS           (~CDROM_HACK_VALID_FLAGS)
00067 
00068 
00069 typedef struct _XA_CONTEXT {
00070 
00071     //
00072     // Pointer to the device object.
00073     //
00074 
00075     PDEVICE_OBJECT DeviceObject;
00076 
00077     //
00078     // Pointer to the original request when
00079     // a mode select must be sent.
00080     //
00081 
00082     PIRP OriginalRequest;
00083 
00084     //
00085     // Pointer to the mode select srb.
00086     //
00087 
00088     PSCSI_REQUEST_BLOCK Srb;
00089 } XA_CONTEXT, *PXA_CONTEXT;
00090 
00091 typedef struct _ERROR_RECOVERY_DATA {
00092     MODE_PARAMETER_HEADER   Header;
00093     MODE_PARAMETER_BLOCK BlockDescriptor;
00094     MODE_READ_RECOVERY_PAGE ReadRecoveryPage;
00095 } ERROR_RECOVERY_DATA, *PERROR_RECOVERY_DATA;
00096 
00097 typedef struct _ERROR_RECOVERY_DATA10 {
00098     MODE_PARAMETER_HEADER10 Header10;
00099     MODE_PARAMETER_BLOCK BlockDescriptor10;
00100     MODE_READ_RECOVERY_PAGE ReadRecoveryPage10;
00101 } ERROR_RECOVERY_DATA10, *PERROR_RECOVERY_DATA10;
00102 
00103 //
00104 // CdRom specific addition to device extension.
00105 //
00106 
00107 typedef struct _CDROM_DRIVER_EXTENSION {
00108     ULONG InterlockedCdRomCounter;
00109     PVOID Reserved[3];
00110 } CDROM_DRIVER_EXTENSION, *PCDROM_DRIVER_EXTENSION;
00111 
00112 #define CdromMmcUpdateComplete 0
00113 #define CdromMmcUpdateRequired 1
00114 #define CdromMmcUpdateStarted  2
00115 
00116 typedef struct _CDROM_MMC_EXTENSION {
00117 
00118     ULONG        IsMmc;        // allow quick checks
00119     ULONG        WriteAllowed;
00120            
00121     LONG         UpdateState;
00122     
00123     SLIST_HEADER DelayedIrps;  // irps delayed due to 
00124     KSPIN_LOCK   DelayedLock;  // lock for delayed irps
00125     
00126     PIO_WORKITEM              CapabilitiesWorkItem;
00127     PIRP                      CapabilitiesIrp;
00128     PMDL                      CapabilitiesMdl;
00129     PGET_CONFIGURATION_HEADER CapabilitiesBuffer;
00130     ULONG                     CapabilitiesBufferSize;
00131     KEVENT                    CapabilitiesEvent;
00132     SCSI_REQUEST_BLOCK        CapabilitiesSrb;
00133 
00134 } CDROM_MMC_EXTENSION, *PCDROM_MMC_EXTENSION;
00135 
00136 
00137 #define CDROM_DRIVER_EXTENSION_ID CdRomAddDevice
00138 
00139 typedef struct _CDROM_DATA {
00140 
00141     //
00142     // Pointer to the cdrom driver extension
00143     //
00144 
00145     PCDROM_DRIVER_EXTENSION DriverExtension;
00146 
00147 
00148     //
00149     // These bits allow detection of when to requery the
00150     // drive's capabilities.
00151     //
00152 
00153     CDROM_MMC_EXTENSION Mmc;
00154 
00155     //
00156     // hack flags for ScanForSpecial routines
00157     //
00158 
00159     ULONG_PTR HackFlags;
00160 
00161     //
00162     // the error handling routines need to be per-device,
00163     // not per-driver....
00164     //
00165 
00166     PCLASS_ERROR ErrorHandler;
00167 
00168     //
00169     // Indicates whether an audio play operation
00170     // is currently being performed.
00171     // Only thing this does is prevent reads and
00172     // toc requests while playing audio.
00173     //
00174 
00175     BOOLEAN PlayActive;
00176 
00177     //
00178     // Indicates whether the blocksize used for user data
00179     // is 2048 or 2352.
00180     //
00181 
00182     BOOLEAN RawAccess;
00183 
00184     //
00185     // Indicates that this is a DEC RRD cdrom.
00186     // This drive requires software to fix responses
00187     // from the faulty firmware
00188     //
00189 
00190     BOOLEAN IsDecRrd;
00191 
00192     //
00193     // This points to an irp which needs to be delayed for a bit before a
00194     // retry can be attempted.  The interval counter is set by the deferring
00195     // routine and will be decremented to zero in the tick handler.  Once
00196     // the counter goes to zero the irp will be issued again.
00197     // DelayedRetryResend controls whether the irp is resent to the lower
00198     // driver (TRUE) or reissued into the startio routine (FALSE)
00199     //
00200 
00201     BOOLEAN DelayedRetryResend;
00202 
00203     PIRP DelayedRetryIrp;
00204 
00205     ULONG DelayedRetryInterval;
00206 
00207     KSPIN_LOCK DelayedRetrySpinLock;
00208 
00209     //
00210     // indicate we need to pick a default dvd region
00211     // for the user if we can
00212     //
00213 
00214     ULONG PickDvdRegion;
00215 
00216     //
00217     // The interface strings registered for this device.
00218     //
00219 
00220     UNICODE_STRING CdromInterfaceString;
00221     UNICODE_STRING VolumeInterfaceString;
00222 
00223     //
00224     // The well known name link for this device.
00225     //
00226 
00227     UNICODE_STRING WellKnownName;
00228 
00229     //
00230     // Indicates whether 6 or 10 bytes mode sense/select
00231     // should be used
00232     //
00233 
00234     ULONG XAFlags;
00235 
00236     //
00237     // keep track of what type of DVD device we are
00238     //
00239 
00240     BOOLEAN DvdRpc0Device;
00241     BOOLEAN DvdRpc0LicenseFailure;
00242     UCHAR   Rpc0SystemRegion;           // bitmask, one means prevent play
00243     UCHAR   Rpc0SystemRegionResetCount;
00244 
00245     ULONG   Rpc0RetryRegistryCallback;   // one until initial region choosen
00246 
00247     KMUTEX  Rpc0RegionMutex;
00248 
00249     //
00250     // Storage for the error recovery page. This is used
00251     // as an easy method to switch block sizes.
00252     //
00253     // NOTE - doubly unnamed structs just aren't very clean looking code - this
00254     // should get cleaned up at some point in the future.
00255     //
00256 
00257     union {
00258         ERROR_RECOVERY_DATA;
00259         ERROR_RECOVERY_DATA10;
00260     };
00261 
00262 } CDROM_DATA, *PCDROM_DATA;
00263 
00264 #define DEVICE_EXTENSION_SIZE sizeof(FUNCTIONAL_DEVICE_EXTENSION) + sizeof(CDROM_DATA)
00265 #define SCSI_CDROM_TIMEOUT          10
00266 #define SCSI_CHANGER_BONUS_TIMEOUT  10
00267 #define HITACHI_MODE_DATA_SIZE      12
00268 #define MODE_DATA_SIZE              64
00269 #define RAW_SECTOR_SIZE           2352
00270 #define COOKED_SECTOR_SIZE        2048
00271 #define CDROM_SRB_LIST_SIZE          4
00272 
00273 #define PLAY_ACTIVE(x) (((PCDROM_DATA)(x->CommonExtension.DriverData))->PlayActive)
00274 
00275 #define MSF_TO_LBA(Minutes,Seconds,Frames) \
00276                 (ULONG)((60 * 75 * (Minutes)) + (75 * (Seconds)) + ((Frames) - 150))
00277 
00278 #define LBA_TO_MSF(Lba,Minutes,Seconds,Frames)               \
00279 {                                                            \
00280     (Minutes) = (UCHAR)(Lba  / (60 * 75));                   \
00281     (Seconds) = (UCHAR)((Lba % (60 * 75)) / 75);             \
00282     (Frames)  = (UCHAR)((Lba % (60 * 75)) % 75);             \
00283 }
00284 
00285 #define DEC_TO_BCD(x) (((x / 10) << 4) + (x % 10))
00286 
00287 //
00288 // Define flags for XA, CDDA, and Mode Select/Sense
00289 //
00290 
00291 #define XA_USE_6_BYTE             0x01
00292 #define XA_USE_10_BYTE            0x02
00293 
00294 #define XA_NOT_SUPPORTED          0x10
00295 #define XA_USE_READ_CD            0x20
00296 #define XA_PLEXTOR_CDDA           0x40
00297 #define XA_NEC_CDDA               0x80
00298 
00299 //
00300 // Sector types for READ_CD
00301 //
00302 
00303 #define ANY_SECTOR                0
00304 #define CD_DA_SECTOR              1
00305 #define YELLOW_MODE1_SECTOR       2
00306 #define YELLOW_MODE2_SECTOR       3
00307 #define FORM2_MODE1_SECTOR        4
00308 #define FORM2_MODE2_SECTOR        5
00309 
00310 #define MAX_COPY_PROTECT_AGID     4
00311 
00312 #ifdef ExAllocatePool
00313 #undef ExAllocatePool
00314 #define ExAllocatePool #assert(FALSE)
00315 #endif
00316 
00317 #define CDROM_TAG_GET_CONFIG    'cCcS'  // "ScCc" - ioctl GET_CONFIGURATION
00318 #define CDROM_TAG_DC_EVENT      'ECcS'  // "ScCE" - device control synch event
00319 #define CDROM_TAG_FEATURE       'FCcS'  // "ScCF" - allocated by CdRomGetConfiguration(), free'd by caller
00320 #define CDROM_TAG_DISK_GEOM     'GCcS'  // "ScCG" - disk geometry buffer
00321 #define CDROM_TAG_HITACHI_ERROR 'HCcS'  // "ScCH" - hitachi error buffer
00322 #define CDROM_TAG_SENSE_INFO    'ICcS'  // "ScCI" - sense info buffers
00323 #define CDROM_TAG_POWER_IRP     'iCcS'  // "ScCi" - irp for power request
00324 #define CDROM_TAG_SRB           'SCcS'  // "ScCS" - srb allocation
00325 #define CDROM_TAG_STRINGS       'sCcS'  // "ScCs" - assorted string data
00326 #define CDROM_TAG_MODE_DATA     'MCcS'  // "ScCM" - mode data buffer
00327 #define CDROM_TAG_READ_CAP      'PCcS'  // "ScCP" - read capacity buffer
00328 #define CDROM_TAG_PLAY_ACTIVE   'pCcS'  // "ScCp" - play active checks
00329 #define CDROM_TAG_SUB_Q         'QCcS'  // "ScCQ" - read sub q buffer
00330 #define CDROM_TAG_RAW           'RCcS'  // "ScCR" - raw mode read buffer
00331 #define CDROM_TAG_TOC           'TCcS'  // "ScCT" - read toc buffer
00332 #define CDROM_TAG_TOSHIBA_ERROR 'tCcS'  // "ScCt" - toshiba error buffer
00333 #define CDROM_TAG_DEC_ERROR     'dCcS'  // "ScCt" - DEC error buffer
00334 #define CDROM_TAG_UPDATE_CAP    'UCcS'  // "ScCU" - update capacity path
00335 #define CDROM_TAG_VOLUME        'VCcS'  // "ScCV" - volume control buffer
00336 #define CDROM_TAG_VOLUME_INT    'vCcS'  // "ScCv" - volume control buffer
00337 
00338 #define DVD_TAG_READ_STRUCTURE  'SVcS'  // "ScVS" - used for dvd structure reads
00339 #define DVD_TAG_READ_KEY        'kVcS'  // "ScVk" - read buffer for dvd key
00340 #define DVD_TAG_SEND_KEY        'KVcS'  // "ScVK" - write buffer for dvd key
00341 #define DVD_TAG_RPC2_CHECK      'sVcS'  // "ScVs" - read buffer for dvd/rpc2 check
00342 #define DVD_TAG_DVD_REGION      'tVcS'  // "ScVt" - read buffer for rpc2 check
00343 #define DVD_TAG_SECURITY        'XVcS' // "ScVX" - security descriptor
00344 
00345 
00346 #define CDROM_SUBKEY_NAME        (L"CdRom")  // store new settings here
00347 #define CDROM_READ_CD_NAME       (L"ReadCD") // READ_CD support previously detected
00348 #define CDROM_NON_MMC_DRIVE_NAME (L"NonMmc") // MMC commands hang
00349 //
00350 // DVD Registry Value Names for RPC0 Device
00351 //
00352 #define DVD_DEFAULT_REGION       (L"DefaultDvdRegion")    // this is init. by the dvd class installer
00353 #define DVD_CURRENT_REGION       (L"DvdR")
00354 #define DVD_REGION_RESET_COUNT   (L"DvdRCnt")
00355 #define DVD_MAX_REGION_RESET_COUNT  2
00356 #define DVD_MAX_REGION              8
00357 
00358 
00359 
00360 #define BAIL_OUT(Irp) \
00361     DebugPrint((2, "Cdrom: [%p] Bailing with status " \
00362                 " %lx at line %x file %s\n",          \
00363                 (Irp), (Irp)->IoStatus.Status,        \
00364                 __LINE__, __FILE__))
00365 
00366 
00367 /*++
00368 
00369 Routine Description:
00370 
00371     This routine grabs an extra remove lock using a local variable
00372     for a unique tag.  It then completes the irp in question, and
00373     the just-acquired removelock guarantees that it is still safe
00374     to call IoStartNextPacket().  When that finishes, we release
00375     the newly acquired RemoveLock and return.
00376 
00377 Arguments:
00378 
00379     DeviceObject - the device object for the StartIo queue
00380     Irp - the request we are completing
00381 
00382 Return Value:
00383 
00384     None
00385 
00386 Notes:
00387 
00388     This is implemented as an inline function to allow the compiler
00389     to optimize this as either a function call or as actual inline code.
00390     
00391     This routine will not work with IoXxxRemoveLock() calls, as the
00392     behavior is different.  ClassXxxRemoveLock() calls succeed until
00393     the remove has completed, while IoXxxRemoveLock() calls fail as
00394     soon as the call to IoReleaseRemoveLockAndWait() has been called.
00395     The Class version allows this routine to work in a safe manner.
00396     
00397     replaces the following two lines:
00398         IoStartNextPacket(DeviceObject, FALSE);
00399         ClassReleaseRemoveLock(DeviceObject, Irp);
00400     and raises irql as needed to call IoStartNextPacket()
00401 
00402 --*/
00403 static inline
00404 VOID
00405 CdRomCompleteIrpAndStartNextPacketSafely(
00406     IN PDEVICE_OBJECT DeviceObject,
00407     IN PIRP Irp
00408     )
00409 {
00410     UCHAR uniqueAddress;
00411     KIRQL oldIrql = KeGetCurrentIrql();
00412     
00413     ClassAcquireRemoveLock(DeviceObject, (PIRP)&uniqueAddress);
00414     ClassReleaseRemoveLock(DeviceObject, Irp);
00415     ClassCompleteRequest(DeviceObject, Irp, IO_CD_ROM_INCREMENT);
00416     
00417     if (oldIrql > DISPATCH_LEVEL) {
00418         ASSERT(!"Cannot call IoStartNextPacket at raised IRQL!");
00419     } else if (oldIrql < DISPATCH_LEVEL) {
00420         KeRaiseIrqlToDpcLevel();
00421     } else { //  (oldIrql == DISPATCH_LEVEL)
00422         NOTHING;
00423     }
00424 
00425     IoStartNextPacket(DeviceObject, FALSE);
00426     
00427     if (oldIrql > DISPATCH_LEVEL) {
00428         ASSERT(!"Cannot call IoStartNextPacket at raised IRQL!");
00429     } else if (oldIrql < DISPATCH_LEVEL) {
00430         KeLowerIrql(oldIrql);
00431     } else { //  (oldIrql == DISPATCH_LEVEL)
00432         NOTHING;
00433     }
00434 
00435     ClassReleaseRemoveLock(DeviceObject, (PIRP)&uniqueAddress);
00436 
00437 
00438     return;
00439 }
00440 
00441 VOID
00442 CdRomDeviceControlDvdReadStructure(
00443     IN PDEVICE_OBJECT DeviceObject,
00444     IN PIRP OriginalIrp,
00445     IN PIRP NewIrp,
00446     IN PSCSI_REQUEST_BLOCK Srb
00447     );
00448 
00449 VOID
00450 CdRomDeviceControlDvdEndSession(
00451     IN PDEVICE_OBJECT DeviceObject,
00452     IN PIRP OriginalIrp,
00453     IN PIRP NewIrp,
00454     IN PSCSI_REQUEST_BLOCK Srb
00455     );
00456 
00457 VOID
00458 CdRomDeviceControlDvdStartSessionReadKey(
00459     IN PDEVICE_OBJECT DeviceObject,
00460     IN PIRP OriginalIrp,
00461     IN PIRP NewIrp,
00462     IN PSCSI_REQUEST_BLOCK Srb
00463     );
00464 
00465 VOID
00466 CdRomDeviceControlDvdSendKey(
00467     IN PDEVICE_OBJECT DeviceObject,
00468     IN PIRP OriginalIrp,
00469     IN PIRP NewIrp,
00470     IN PSCSI_REQUEST_BLOCK Srb
00471     );
00472 
00473 
00474 
00475 NTSTATUS
00476 DriverEntry(
00477     IN PDRIVER_OBJECT DriverObject,
00478     IN PUNICODE_STRING RegistryPath
00479     );
00480 
00481 VOID
00482 CdRomUnload(
00483     IN PDRIVER_OBJECT DriverObject
00484     );
00485 
00486 NTSTATUS
00487 CdRomAddDevice(
00488     IN PDRIVER_OBJECT DriverObject,
00489     IN PDEVICE_OBJECT Pdo
00490     );
00491 
00492 NTSTATUS
00493 CdRomOpenClose(
00494     IN PDEVICE_OBJECT DeviceObject,
00495     IN PIRP Irp
00496     );
00497 
00498 NTSTATUS
00499 CdRomReadWriteVerification(
00500     IN PDEVICE_OBJECT DeviceObject,
00501     IN PIRP Irp
00502     );
00503 
00504 NTSTATUS
00505 CdRomSwitchMode(
00506     IN PDEVICE_OBJECT DeviceObject,
00507     IN ULONG SectorSize,
00508     IN PIRP  OriginalRequest
00509     );
00510 
00511 NTSTATUS
00512 CdRomDeviceControlDispatch(
00513     IN PDEVICE_OBJECT DeviceObject,
00514     IN PIRP Irp
00515     );
00516 
00517 NTSTATUS
00518 CdRomDeviceControlCompletion(
00519     IN PDEVICE_OBJECT DeviceObject,
00520     IN PIRP Irp,
00521     IN PVOID Context
00522     );
00523 
00524 NTSTATUS
00525 CdRomSetVolumeIntermediateCompletion(
00526     IN PDEVICE_OBJECT DeviceObject,
00527     IN PIRP Irp,
00528     IN PVOID Context
00529     );
00530 
00531 NTSTATUS
00532 CdRomSwitchModeCompletion(
00533     IN PDEVICE_OBJECT DeviceObject,
00534     IN PIRP Irp,
00535     IN PVOID Context
00536     );
00537 
00538 NTSTATUS
00539 CdRomXACompletion(
00540     IN PDEVICE_OBJECT DeviceObject,
00541     IN PIRP Irp,
00542     IN PVOID Context
00543     );
00544 
00545 NTSTATUS
00546 CdRomClassIoctlCompletion(
00547     IN PDEVICE_OBJECT DeviceObject,
00548     IN PIRP Irp,
00549     IN PVOID Context
00550     );
00551 
00552 VOID
00553 CdRomStartIo(
00554     IN PDEVICE_OBJECT DeviceObject,
00555     IN PIRP Irp
00556     );
00557 
00558 VOID
00559 CdRomTickHandler(
00560     IN PDEVICE_OBJECT DeviceObject
00561     );
00562 
00563 NTSTATUS
00564 CdRomUpdateCapacity(
00565     IN PFUNCTIONAL_DEVICE_EXTENSION DeviceExtension,
00566     IN PIRP IrpToComplete,
00567     IN OPTIONAL PKEVENT IoctlEvent
00568     );
00569 
00570 NTSTATUS
00571 CdRomCreateDeviceObject(
00572     IN PDRIVER_OBJECT DriverObject,
00573     IN PDEVICE_OBJECT Pdo
00574     );
00575 
00576 VOID
00577 ScanForSpecialHandler(
00578     PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
00579     ULONG_PTR HackFlags
00580     );
00581 
00582 VOID
00583 ScanForSpecial(
00584     PDEVICE_OBJECT DeviceObject
00585     );
00586 
00587 BOOLEAN
00588 CdRomIsPlayActive(
00589     IN PDEVICE_OBJECT DeviceObject
00590     );
00591 
00592 VOID
00593 CdRomErrorHandler(
00594     PDEVICE_OBJECT DeviceObject,
00595     PSCSI_REQUEST_BLOCK Srb,
00596     NTSTATUS *Status,
00597     BOOLEAN *Retry
00598     );
00599 
00600 VOID
00601 HitachiProcessErrorGD2000(
00602     PDEVICE_OBJECT DeviceObject,
00603     PSCSI_REQUEST_BLOCK Srb,
00604     NTSTATUS *Status,
00605     BOOLEAN *Retry
00606     );
00607 
00608 VOID
00609 HitachiProcessError(
00610     PDEVICE_OBJECT DeviceObject,
00611     PSCSI_REQUEST_BLOCK Srb,
00612     NTSTATUS *Status,
00613     BOOLEAN *Retry
00614     );
00615 
00616 VOID
00617 ToshibaProcessError(
00618     PDEVICE_OBJECT DeviceObject,
00619     PSCSI_REQUEST_BLOCK Srb,
00620     NTSTATUS *Status,
00621     BOOLEAN *Retry
00622     );
00623 
00624 NTSTATUS
00625 ToshibaProcessErrorCompletion(
00626     PDEVICE_OBJECT DeviceObject,
00627     PIRP Irp,
00628     PVOID Context
00629     );
00630 
00631 VOID
00632 CdRomCreateNamedEvent(
00633     IN PFUNCTIONAL_DEVICE_EXTENSION DeviceExtension,
00634     IN ULONG DeviceNumber
00635     );
00636 
00637 NTSTATUS
00638 CdRomInitDevice(
00639     IN PDEVICE_OBJECT Fdo
00640     );
00641 
00642 NTSTATUS
00643 CdRomStartDevice(
00644     IN PDEVICE_OBJECT Fdo
00645     );
00646 
00647 NTSTATUS
00648 CdRomStopDevice(
00649     IN PDEVICE_OBJECT DeviceObject,
00650     IN UCHAR Type
00651     );
00652 
00653 NTSTATUS
00654 CdRomRemoveDevice(
00655     IN PDEVICE_OBJECT DeviceObject,
00656     IN UCHAR Type
00657     );
00658 
00659 NTSTATUS
00660 CdRomDvdEndAllSessionsCompletion(
00661     IN PDEVICE_OBJECT DeviceObject,
00662     IN PIRP Irp,
00663     IN PVOID Context
00664     );
00665 
00666 NTSTATUS
00667 CdRomDvdReadDiskKeyCompletion(
00668     IN PDEVICE_OBJECT DeviceObject,
00669     IN PIRP Irp,
00670     IN PVOID Context
00671     );
00672 
00673 DEVICE_TYPE
00674 CdRomGetDeviceType(
00675     IN PDEVICE_OBJECT DeviceObject
00676     );
00677 
00678 NTSTATUS
00679 CdRomCreateWellKnownName(
00680     IN PDEVICE_OBJECT DeviceObject
00681     );
00682 
00683 VOID
00684 CdRomDeleteWellKnownName(
00685     IN PDEVICE_OBJECT DeviceObject
00686     );
00687 
00688 NTSTATUS
00689 CdRomGetDeviceParameter (
00690     IN     PDEVICE_OBJECT      DeviceObject,
00691     IN     PWSTR               ParameterName,
00692     IN OUT PULONG              ParameterValue
00693     );
00694 
00695 NTSTATUS
00696 CdRomSetDeviceParameter (
00697     IN PDEVICE_OBJECT DeviceObject,
00698     IN PWSTR          ParameterName,
00699     IN ULONG          ParameterValue
00700     );
00701 
00702 VOID
00703 CdRomPickDvdRegion (
00704     IN PDEVICE_OBJECT Fdo
00705 );
00706 
00707 NTSTATUS
00708 CdRomRetryRequest(
00709     IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
00710     IN PIRP Irp,
00711     IN ULONG Delay,
00712     IN BOOLEAN ResendIrp
00713     );
00714 
00715 NTSTATUS
00716 CdRomRerunRequest(
00717     IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
00718     IN OPTIONAL PIRP Irp,
00719     IN BOOLEAN ResendIrp
00720     );
00721 
00722 NTSTATUS
00723 CdRomGetRpc0Settings(
00724     IN PDEVICE_OBJECT Fdo
00725     );
00726 
00727 NTSTATUS
00728 CdRomSetRpc0Settings(
00729     IN PDEVICE_OBJECT Fdo,
00730     IN UCHAR NewRegion
00731     );
00732 
00733 NTSTATUS
00734 CdRomShutdownFlush(
00735     IN PDEVICE_OBJECT DeviceObject,
00736     IN PIRP Irp
00737     );
00738 
00740 
00741 VOID
00742 CdRomIsDeviceMmcDevice(
00743     IN PDEVICE_OBJECT Fdo,
00744     OUT PBOOLEAN IsMmc
00745     );
00746 
00747 VOID
00748 NTAPI
00749 CdRomMmcErrorHandler(
00750     IN PDEVICE_OBJECT Fdo,
00751     IN PSCSI_REQUEST_BLOCK Srb,
00752     OUT PNTSTATUS Status,
00753     OUT PBOOLEAN Retry
00754     );
00755 
00756 PVOID
00757 CdRomFindFeaturePage(
00758     IN PGET_CONFIGURATION_HEADER FeatureBuffer,
00759     IN ULONG Length,
00760     IN FEATURE_NUMBER Feature
00761     );
00762 
00763 NTSTATUS
00764 CdRomGetConfiguration(
00765     IN PDEVICE_OBJECT Fdo,
00766     OUT PGET_CONFIGURATION_HEADER *Buffer,
00767     OUT PULONG BytesReturned,
00768     IN FEATURE_NUMBER StartingFeature,
00769     IN ULONG RequestedType
00770     );
00771 
00772 VOID
00773 CdRomUpdateMmcDriveCapabilities(
00774     IN PDEVICE_OBJECT Fdo,
00775     IN PVOID Context // RESERVED == NULL
00776     );
00777 
00778 VOID
00779 CdRomFindProfileInProfiles(
00780     IN PFEATURE_DATA_PROFILE_LIST ProfileHeader,
00781     IN FEATURE_PROFILE_TYPE ProfileToFind,
00782     OUT PBOOLEAN Exists
00783     );
00784 
00785 NTSTATUS
00786 CdRomAllocateMmcResources(
00787     IN PDEVICE_OBJECT Fdo
00788     );
00789 
00790 VOID
00791 CdRomDeAllocateMmcResources(
00792     IN PDEVICE_OBJECT Fdo
00793     );
00794 
00795 VOID
00796 CdromFakePartitionInfo(
00797     IN PCOMMON_DEVICE_EXTENSION CommonExtension,
00798     IN PIRP Irp
00799     );
00800 
00801 VOID
00802 CdRomInterpretReadCapacity(
00803     IN PDEVICE_OBJECT Fdo,
00804     IN PREAD_CAPACITY_DATA ReadCapacityBuffer
00805     );
00806 
00807 NTSTATUS
00808 CdRomShutdownFlushCompletion(
00809     IN PDEVICE_OBJECT DeviceObject,
00810     IN PIRP Irp,
00811     IN PIRP Context
00812     );
00813 
00814 VOID
00815 CdRompFlushDelayedList(
00816     IN PDEVICE_OBJECT Fdo,
00817     IN PCDROM_MMC_EXTENSION MmcData,
00818     IN NTSTATUS Status,
00819     IN BOOLEAN CalledFromWorkItem
00820     );
00821 
00822 #endif // __CDROMP_H__
00823 
00824 

Generated on Sun May 27 2012 04:28:15 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.