ReactOS 0.4.17-dev-116-ga4b6fe9
atapi.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS ATA Port Driver
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Common header file
5 * COPYRIGHT: Copyright 2026 Dmitry Borisov <di.sean@protonmail.com>
6 */
7
8#pragma once
9
10#include <ntddk.h>
11#include <ntstrsafe.h>
12#include <ntintsafe.h>
13
14#include <wmilib.h>
15#include <initguid.h>
16#include <wdmguid.h>
17#include <wmistr.h>
18#include <wmidata.h>
19
20#include <ata.h>
21#include <ide.h>
22#include <scsi.h>
23#include <ntddscsi.h>
24#include <ntdddisk.h>
25
26#include <sptilib.h>
27#include <section_attribs.h>
28#include <debug/driverdbg.h>
32
37
38typedef union _ATA_SCSI_ADDRESS
39{
40 /*
41 * The ordering between Lun, TargetId, and PathId fields is important
42 * with address comparison.
43 */
44 struct
45 {
51
61
66
68 };
71
72typedef VOID
76
77typedef struct _ATAPORT_IO_CONTEXT
78{
80
82#define DEVICE_PIO_ONLY 0x00000001
83#define DEVICE_LBA_MODE 0x00000002
84#define DEVICE_LBA48 0x00000004
85#define DEVICE_HAS_FUA 0x00000008
86#define DEVICE_NCQ 0x00000010
87#define DEVICE_HAS_MEDIA_STATUS 0x00000020
88#define DEVICE_SENSE_DATA_REPORTING 0x00000040
89#define DEVICE_IS_SUPER_FLOPPY 0x00000080
90#define DEVICE_IS_PDO_REMOVABLE 0x00000100
91#define DEVICE_UNINITIALIZED 0x00000200
92#define DEVICE_PNP_STARTED 0x00000400
93#define DEVICE_DESCRIPTOR_SENSE 0x00000800
94#define DEVICE_PIO_VIA_DMA 0x00001000
95#define DEVICE_PIO_FOR_LBA48_XFER 0x00002000
96#define DEVICE_CACHE_INQUIRY 0x00004000
97
103
105#define QUEUE_FLAG_FROZEN_PORT_BUSY 0x00000001
106#define QUEUE_FLAG_FROZEN_SLOT 0x00000002
107#define QUEUE_FLAG_FROZEN_PNP 0x00000004
108#define QUEUE_FLAG_SIGNAL_STOP 0x00000008
109#define QUEUE_FLAG_FROZEN_QUEUE_FREEZE 0x00000010
110#define QUEUE_FLAG_FROZEN_POWER 0x00000020
111#define QUEUE_FLAG_FROZEN_REMOVED 0x00000040
112#define QUEUE_FLAG_FROZEN_QUEUE_LOCK 0x00080000
113
114#define QUEUE_FLAGS_FROZEN \
115 (QUEUE_FLAG_FROZEN_PORT_BUSY | \
116 QUEUE_FLAG_FROZEN_SLOT | \
117 QUEUE_FLAG_FROZEN_PNP | \
118 QUEUE_FLAG_FROZEN_QUEUE_FREEZE | \
119 QUEUE_FLAG_FROZEN_POWER | \
120 QUEUE_FLAG_FROZEN_REMOVED | \
121 QUEUE_FLAG_FROZEN_QUEUE_LOCK)
122
123#define QUEUE_FLAGS_FROZEN_NOT_BYPASS \
124 (QUEUE_FLAGS_FROZEN & ~(QUEUE_FLAG_FROZEN_QUEUE_FREEZE | QUEUE_FLAG_FROZEN_QUEUE_LOCK))
125
136#if DBG
137 struct
138 {
139 ULONG RequestsStarted;
140 ULONG RequestsCompleted;
141 } Statistics;
142#endif
144
145#include "debug.h"
146#include "scsiex.h"
147
148#if defined(_MSC_VER)
149#pragma section("PAGECONS", read)
150#endif
151
153#define ATAPORT_PAGED_DATA DATA_SEG("PAGECONS")
154
155#define DECLARE_PAGED_UNICODE_STRING(Variable, Str) \
156 static const ATAPORT_PAGED_DATA WCHAR Variable##_buffer[] = Str; \
157 UNICODE_STRING Variable = { sizeof(Str) - sizeof(WCHAR), sizeof(Str), (PWCH)Variable##_buffer } \
158
159#define DECLARE_PAGED_STRING(v, n) \
160 static const ATAPORT_PAGED_DATA CHAR (v)[] = (n)
161
162#define DECLARE_PAGED_WSTRING(v, n) \
163 static const ATAPORT_PAGED_DATA WCHAR (v)[] = (n)
164
165#define ASSUME(cond) \
166 do { \
167 ASSERT(cond); \
168 __assume(cond); \
169 } while (0)
170
171#define ATAPORT_TAG 'PedI'
172
173#define IS_FDO(p) \
174 ((((PATAPORT_COMMON_EXTENSION)(p))->Flags & DO_IS_FDO) != 0)
175
176#define IS_ATAPI(Device) \
177 (((Device)->TransportFlags & DEVICE_IS_ATAPI) != 0)
178
179#define NUM_TO_BITMAP(num) (0xFFFFFFFF >> (RTL_BITS_OF(ULONG) - (num)))
180
195#define ATAPORT_FN_FIELD 40
196#define ATAPORT_SN_FIELD 40
197#define ATAPORT_RN_FIELD 8
200#define ATA_RESERVED_PAGES 4
201
202#define ATA_MAX_LUN_COUNT 8
203
204/* Maximum size (ATA Information VPD page) */
205#define ATA_LOCAL_BUFFER_SIZE 572
206
207#define MAX_SLOTS 32
208
209#define ATA_MAX_LBA_28 0x0FFFFFFFULL
210#define ATA_MAX_LBA_48 (1ULL << 48)
211
212#define IDE_DRIVE_SELECT_SLAVE 0x10
213#define IDE_HIGH_ORDER_BYTE 0x80
214#define IDE_DRIVE_SELECT 0xA0
215
216#define IDE_ERROR_WRITE_PROTECT 0x40
217
218#define IDE_FEATURE_PIO 0x00
219#define IDE_FEATURE_DMA 0x01
220#define IDE_FEATURE_DMADIR 0x04
221
222#define IDE_DEVICE_FUA_NCQ 0x80
223
224#define IDE_DC_ALWAYS 0x08
225
226#define IDE_COMMAND_REQUEST_SENSE_DATA_EXT 0x0B
227
228#define SRB_FLAG_RETRY_COUNT_MASK 0x000000FF
229#define SRB_FLAG_LOW_MEM_RETRY 0x00000100
230#define SRB_FLAG_PIO_RETRY 0x00000200
231
232#define SRB_SET_FLAGS(Srb, Flags) \
233 ((Srb)->SrbExtension = (PVOID)((ULONG_PTR)(Srb)->SrbExtension | (Flags)))
234
235#define SRB_CLEAR_FLAGS(Srb, Flags) \
236 ((Srb)->SrbExtension = (PVOID)((ULONG_PTR)(Srb)->SrbExtension & ~(Flags)))
237
238#define SRB_GET_FLAGS(Srb) ((ULONG_PTR)(Srb)->SrbExtension)
239
240/* Values are assigned by priority */
242{
243 ACTION_PORT_RESET = (1 << 0), // High priority
247 ACTION_PORT_TIMING = (1 << 4), // Set transfer timings after device enumeration only
248 ACTION_DEVICE_CONFIG = (1 << 5), // Also use the timing information for configuration
252
254{
260
262{
270
272{
279#define WORKER_FLAG_NEED_RESCAN 0x00000001
280#define WORKER_FLAG_COMPLETE_PORT_ENUM_EVENT 0x00000002
284#if DBG
285 ULONG StateLoopCount;
286#endif
297
299{
301 volatile LONG EnumStatus;
304#define DEV_WORKER_FLAG_HOLD_REFERENCE 0x00000001
305#define DEV_WORKER_FLAG_REMOVED 0x00000002
309
310#define QUEUE_ENTRY_FROM_IRP(Irp) \
311 ((PREQUEST_QUEUE_ENTRY)&(((PIRP)(Irp))->Tail.Overlay.DriverContext[0]))
312
313#define IRP_FROM_QUEUE_ENTRY(QueueEntry) \
314 (PIRP)CONTAINING_RECORD(QueueEntry, IRP, Tail.Overlay.DriverContext[0])
315
317{
322
323/* Check for Irp->Tail.Overlay.DriverContext */
324C_ASSERT(sizeof(REQUEST_QUEUE_ENTRY) <= 4 * sizeof(PVOID));
325
326#define ASSERT_REQUEST(Request) \
327 ASSERT((Request) && (Request)->Signature == ATA_DEVICE_REQUEST_SIGNATURE)
328
332
333typedef struct _ATAPORT_PORT_DATA
334{
336#define PORT_FLAG_IS_SIMPLEX 0x00000001
337#define PORT_FLAG_PIO_VIA_DMA 0x00000002
338#define PORT_FLAG_IS_EXTERNAL 0x00000004
339#define PORT_FLAG_NCQ 0x00000008
340#define PORT_FLAG_IS_AHCI 0x00000010
341#define PORT_FLAG_SYMLINK_CREATED 0x00000020
342#define PORT_FLAG_IO_TIMER_ACTIVE 0x00000040
343#define PORT_FLAG_CHANNEL_ATTACHED 0x00000080
344#define PORT_FLAG_PIO_ONLY 0x00000100
345#define PORT_FLAG_PIO_FOR_LBA48_XFER 0x00000200
346#define PORT_FLAG_EXIT_THREAD 0x80000000
347
360#define PORT_INT_FLAG_IS_IO_ACTIVE 0x00000001
361#define PORT_INT_FLAG_IGNORE_LINK_IRQ 0x00000002
362
369#define PORT_QUEUE_FLAG_EXCLUSIVE_MODE 0x00000001
370#define PORT_QUEUE_FLAG_SIGNAL_STOP 0x00000002
371
378
402
404{
405 _Write_guarded_by_(_Global_interlock_)
406 volatile LONG PageFiles;
407
408 _Write_guarded_by_(_Global_interlock_)
409 volatile LONG HibernateFiles;
410
411 _Write_guarded_by_(_Global_interlock_)
412 volatile LONG DumpFiles;
413
416
419
420 union
421 {
424
427 };
428
430#define DO_IS_FDO 0x80000000
431
433
436
438{
441
443
451
453{
456
459
464
467
470
472 union
473 {
476 };
477
480
496
504
510
519
528
534
550
553
557
560
562extern BOOLEAN AtapInPEMode;
563
564typedef enum
565{
570
574 _In_ PATAPORT_PORT_DATA PortData)
575{
576 ULONG SlotsBitmap;
577
578 SlotsBitmap = PortData->Worker.PausedSlotsBitmap | PortData->FreeSlotsBitmap;
579
580 return (SlotsBitmap == PortData->MaxSlotsBitmap);
581}
582
588 _In_ ULONG Lun)
589{
590 ATA_SCSI_ADDRESS AtaScsiAddress;
591
592 AtaScsiAddress.Lun = Lun;
593 AtaScsiAddress.TargetId = TargetId;
594 AtaScsiAddress.PathId = PathId;
595
596 /* This is used for address comparison. See AtaFdoFindNextDeviceByPath() */
597 AtaScsiAddress.IsValid = 0xAA;
598
599 return AtaScsiAddress;
600}
601
605 _In_ ULONG x)
606{
607 /* Also exclude zero numbers */
608 return (x != 0) && ((x & (x - 1)) == 0);
609}
610
615{
616 return (OpCode == SCSIOP_READ6 ||
618 OpCode == SCSIOP_READ ||
619 OpCode == SCSIOP_WRITE ||
626}
627
631 _In_ ULONG64 SectorNumber,
633{
634 /* Use the 48-bit command when reasonable */
635 return (((SectorNumber + SectorCount) >= ATA_MAX_LBA_28) || (SectorCount > 0x100));
636}
637
638/* atapi.c ********************************************************************/
639
642CODE_SEG("PAGE")
643DRIVER_DISPATCH_PAGED AtaDispatchCreateClose;
644
645CODE_SEG("PAGE")
646DRIVER_ADD_DEVICE AtaAddChannel;
647
648CODE_SEG("PAGE")
649DRIVER_UNLOAD AtaUnload;
650
651CODE_SEG("INIT")
652DRIVER_INITIALIZE DriverEntry;
653
656
657CODE_SEG("PAGE")
658PCSTR
662
663CODE_SEG("PAGE")
670
671CODE_SEG("PAGE")
672VOID
677 _Out_ PULONG KeyValue,
679
680CODE_SEG("PAGE")
681VOID
686 _In_ ULONG KeyValue);
687
688VOID
692 _In_ ULONG KeyValue);
693
694CODE_SEG("PAGE")
701 _In_ ULONG Size);
702
703CODE_SEG("PAGE")
707 _In_ PIRP Irp,
709
710CODE_SEG("PAGE")
714 _In_ PIRP Irp);
715
716CODE_SEG("PAGE")
720 _In_ PIRP Irp);
721
722CODE_SEG("PAGE")
723VOID
726 _In_ PDEVICE_OBJECT SelfDeviceObject,
728
729/* dev_config.c ***************************************************************/
730
733 _In_ PATAPORT_PORT_DATA PortData,
735
736/* dev_error.c ****************************************************************/
737
740 _In_ PATAPORT_PORT_DATA PortData,
742
743/* dev_identify.c *************************************************************/
744
747 _In_ PATAPORT_PORT_DATA PortData,
750
753 _In_ PATAPORT_PORT_DATA PortData,
755
756/* dev_power.c ****************************************************************/
757
760
761VOID
764
765UCHAR
768
771 _In_ PATAPORT_PORT_DATA PortData,
773
776 _In_ PATAPORT_PORT_DATA PortData,
778
779/* dev_timings.c **************************************************************/
780
781VOID
783 _In_ PATAPORT_PORT_DATA PortData,
784 _In_ BOOLEAN ForceCompatibleTimings);
785
786/* enum.c *********************************************************************/
787
788PUCHAR
793
794PCHAR
797 _In_reads_bytes_(MaxLength) PUCHAR Source,
798 _In_ ULONG MaxLength,
799 _In_ CHAR DefaultCharacter);
800
801VOID
804 _In_range_(>, 0) ULONG WordCount);
805
806VOID
809
810CODE_SEG("PAGE")
814 _In_ PIRP Irp);
815
816/* fdo.c **********************************************************************/
817
818CODE_SEG("PAGE")
823
824CODE_SEG("PAGE")
829
834 _In_ ATA_SCSI_ADDRESS AtaScsiAddress,
835 _In_ PVOID ReferenceTag);
836
841 _Inout_ PATA_SCSI_ADDRESS AtaScsiAddress,
842 _In_ BOOLEAN SearchRemoveDev,
843 _In_ PVOID ReferenceTag);
844
846VOID
850 _In_ BOOLEAN DoInsert);
851
852/* ioctl.c ********************************************************************/
853
856
857/* pdo.c **********************************************************************/
858
859IO_COMPLETION_ROUTINE AtaPdoCompletionRoutine;
860
862CODE_SEG("PAGE")
863DRIVER_DISPATCH_PAGED AtaDispatchPnp;
864
865CODE_SEG("PAGE")
866VOID
869
870CODE_SEG("PAGE")
874 _In_ ATA_SCSI_ADDRESS AtaScsiAddress);
875
876/* portstate.c ****************************************************************/
877
878KSTART_ROUTINE AtaPortWorkerThread;
879KDEFERRED_ROUTINE AtaPortWorkerSignalDpc;
881PORT_NOTIFICATION AtaPortNotification;
882
885 _In_ PATAPORT_PORT_DATA PortData,
887
888VOID
890 _In_ PATAPORT_PORT_DATA PortData,
891 _In_ ULONG Slot);
892
894VOID
896 _In_ PATAPORT_PORT_DATA PortData);
897
899VOID
901 _In_ PATAPORT_PORT_DATA PortData,
904
905/* satl.c *********************************************************************/
906
910
911CODE_SEG("PAGE")
912VOID
915
916UCHAR
921
922UCHAR
925
926VOID
929 _In_ UCHAR LogAddress,
930 _In_ UCHAR PageNumber,
931 _In_ USHORT LogPageCount);
932
933/* scsi.c *********************************************************************/
934
937
938IO_TIMER_ROUTINE AtaPortIoTimer;
939KDEFERRED_ROUTINE AtaReqCompletionDpc;
942
943VOID
946
947UCHAR
950 _In_ SCSI_SENSE_CODE SenseCode);
951
952VOID
955 _In_ ULONG64 Lba);
956
960
961VOID
964
965VOID
968
970VOID
973 _In_ ULONG ReasonFlags);
974
976VOID
979 _In_ ULONG ReasonFlags);
980
982VOID
986
988VOID
991
992/* smart.c ********************************************************************/
993
994UCHAR
999
1000CODE_SEG("PAGE")
1005
1006CODE_SEG("PAGE")
1011
1012/* wmi.c **********************************************************************/
1013
1015CODE_SEG("PAGE")
1016DRIVER_DISPATCH_PAGED AtaDispatchWmi;
1017
1018CODE_SEG("PAGE")
#define CODE_SEG(...)
Type
Definition: Type.h:7
#define VOID
Definition: acefi.h:82
unsigned char BOOLEAN
Definition: actypes.h:127
#define REQUEST_FLAG_DATA_IN
Definition: ata_shared.h:287
CHANNEL_ALLOCATE_SLOT * PCHANNEL_ALLOCATE_SLOT
Definition: ata_shared.h:438
CHANNEL_IDENTIFY_DEVICE * PCHANNEL_IDENTIFY_DEVICE
Definition: ata_shared.h:423
CHANNEL_ABORT_CHANNEL * PCHANNEL_ABORT_CHANNEL
Definition: ata_shared.h:407
CHANNEL_START_IO * PCHANNEL_START_IO
Definition: ata_shared.h:460
#define REQUEST_FLAG_NO_KEEP_AWAKE
Definition: ata_shared.h:339
CHANNEL_SET_MODE * PCHANNEL_SET_MODE
Definition: ata_shared.h:430
CONTROLLER_ATTACH_CHANNEL * PCONTROLLER_ATTACH_CHANNEL
Definition: ata_shared.h:383
#define REQUEST_FLAG_DATA_OUT
Definition: ata_shared.h:290
CHANNEL_PREPARE_PRD_TABLE * PCHANNEL_PREPARE_PRD_TABLE
Definition: ata_shared.h:446
CHANNEL_GET_INIT_TASK_FILE * PCHANNEL_GET_INIT_TASK_FILE
Definition: ata_shared.h:396
CHANNEL_RESET_CHANNEL * PCHANNEL_RESET_CHANNEL
Definition: ata_shared.h:412
CHANNEL_DOWNGRADE_INTERFACE_SPEED * PCHANNEL_DOWNGRADE_INTERFACE_SPEED
Definition: ata_shared.h:401
CHANNEL_PREPARE_IO * PCHANNEL_PREPARE_IO
Definition: ata_shared.h:453
ATA_COMPLETION_ACTION() REQUEST_COMPLETION_ROUTINE(_In_ PATA_DEVICE_REQUEST Request)
Definition: ata_shared.h:155
CHANNEL_ENUMERATE_CHANNEL * PCHANNEL_ENUMERATE_CHANNEL
Definition: ata_shared.h:417
CHANNEL_SET_DEVICE_DATA * PCHANNEL_SET_DEVICE_DATA
Definition: ata_shared.h:390
NTSTATUS NTAPI AtaDispatchCreateClose(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
Definition: atapi.c:274
IO_TIMER_ROUTINE AtaPortIoTimer
Definition: atapi.h:938
BOOLEAN AtapInPEMode
Definition: atapi.c:15
PCHAR AtaCopyIdStringSafe(_Out_writes_bytes_all_(MaxLength) PCHAR Destination, _In_reads_bytes_(MaxLength) PUCHAR Source, _In_ ULONG MaxLength, _In_ CHAR DefaultCharacter)
Definition: enum.c:35
NTSTATUS AtaPnpQueryPnpDeviceState(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PIRP Irp)
Definition: atapi.c:555
#define ATAPORT_RN_FIELD
Definition: atapi.h:197
VOID AtaReqCompleteFailedRequest(_In_ PATA_DEVICE_REQUEST Request)
VOID AtaReqSendRequest(_In_ PATA_DEVICE_REQUEST Request)
Definition: scsi.c:632
NTSTATUS AtaFdoPnp(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _Inout_ PIRP Irp)
Definition: fdo.c:510
VOID AtaDeviceFlushPowerIrpQueue(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: dev_power.c:37
VOID AtaPdoFreeDevice(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: pdo.c:658
struct _ATAPORT_CHANNEL_EXTENSION ATAPORT_CHANNEL_EXTENSION
Definition: atapi.h:33
VOID AtaDeviceSetAddressingMode(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: enum.c:182
KDEFERRED_ROUTINE AtaPortWorkerSignalDpc
Definition: atapi.h:879
#define ATAPORT_SN_FIELD
Definition: atapi.h:196
UCHAR AtaReqExecuteScsi(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
Definition: satl.c:2054
SLIST_HEADER AtapCompletionQueueList
Definition: scsi.c:14
union _ATA_SCSI_ADDRESS ATA_SCSI_ADDRESS
UCHAR AtaReqSetFixedSenseData(_In_ PSCSI_REQUEST_BLOCK Srb, _In_ SCSI_SENSE_CODE SenseCode)
Definition: scsi.c:411
KSTART_ROUTINE AtaPortWorkerThread
Definition: atapi.h:878
struct _ATAPORT_PORT_DATA ATAPORT_PORT_DATA
Definition: atapi.h:35
NTSTATUS AtaPnpRepeatRequest(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PIRP Irp, _In_opt_ PDEVICE_CAPABILITIES DeviceCapabilities)
Definition: atapi.c:445
union _ATA_SCSI_ADDRESS * PATA_SCSI_ADDRESS
#define MAX_SLOTS
Definition: atapi.h:207
VOID AtaReqSetLbaInformation(_In_ PSCSI_REQUEST_BLOCK Srb, _In_ ULONG64 Lba)
Definition: scsi.c:442
VOID AtaSetPortRegistryKey(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ PCWSTR KeyName, _In_ ULONG KeyValue)
Definition: atapi.c:236
FORCEINLINE BOOLEAN AtaCommandUseLba48(_In_ ULONG64 SectorNumber, _In_ ULONG SectorCount)
Definition: atapi.h:630
_ATA_PORT_ACTION
Definition: atapi.h:242
@ ACTION_DEVICE_CONFIG
Definition: atapi.h:248
@ ACTION_ENUM_PORT
Definition: atapi.h:244
@ ACTION_DEVICE_POWER
Definition: atapi.h:250
@ ACTION_PORT_TIMING
Definition: atapi.h:247
@ ACTION_DEVICE_ERROR
Definition: atapi.h:249
@ ACTION_ENUM_DEVICE_NEW
Definition: atapi.h:245
@ ACTION_ENUM_DEVICE
Definition: atapi.h:246
@ ACTION_PORT_RESET
Definition: atapi.h:243
struct _REQUEST_QUEUE_ENTRY REQUEST_QUEUE_ENTRY
DRIVER_INITIALIZE DriverEntry
Definition: atapi.h:652
NTSTATUS AtaFdoQueryBusRelations(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ PIRP Irp)
Definition: enum.c:566
VOID AtaSetRegistryKey(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ UCHAR TargetId, _In_ PCWSTR KeyName, _In_ ULONG KeyValue)
Definition: atapi.c:180
UNICODE_STRING AtapDriverRegistryPath
Definition: atapi.c:14
_ATA_DEVICE_STATUS
Definition: atapi.h:254
@ DEV_STATUS_FAILED
Definition: atapi.h:258
@ DEV_STATUS_SAME_DEVICE
Definition: atapi.h:257
@ DEV_STATUS_NO_DEVICE
Definition: atapi.h:255
@ DEV_STATUS_NEW_DEVICE
Definition: atapi.h:256
NTSTATUS AtaPortDeviceProcessConfig(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: dev_config.c:341
enum _ATA_PORT_ACTION ATA_PORT_ACTION
VOID AtaReqBuildReadLogTaskFile(_In_ PATA_DEVICE_REQUEST Request, _In_ UCHAR LogAddress, _In_ UCHAR PageNumber, _In_ USHORT LogPageCount)
Definition: satl.c:399
struct _ATA_WORKER_DEVICE_CONTEXT * PATA_WORKER_DEVICE_CONTEXT
struct _ATAPORT_COMMON_EXTENSION ATAPORT_COMMON_EXTENSION
VOID AtaGetRegistryKey(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ UCHAR TargetId, _In_ PCWSTR KeyName, _Out_ PULONG KeyValue, _In_ ULONG DefaultValue)
Definition: atapi.c:113
NTSTATUS AtaFdoStartDevice(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ PCM_RESOURCE_LIST ResourcesTranslated)
Definition: fdo.c:229
struct _ATAPORT_IO_CONTEXT * PATAPORT_IO_CONTEXT
Definition: atapi.h:36
KDEFERRED_ROUTINE AtaStorageNotificationlDpc
Definition: atapi.h:655
KDEFERRED_ROUTINE AtaReqCompletionDpc
Definition: atapi.h:939
NTSTATUS AtaPortDeviceProcessError(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: dev_error.c:642
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqFlushDeviceQueue(_In_ PATAPORT_IO_CONTEXT Device)
Definition: scsi.c:1451
DRIVER_UNLOAD AtaUnload
Definition: atapi.h:649
NTSTATUS AtaPdoHandleMiniportSmartVersion(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PSCSI_REQUEST_BLOCK Srb)
Definition: smart.c:246
FORCEINLINE BOOLEAN IsPowerOfTwo(_In_ ULONG x)
Definition: atapi.h:604
VOID AtaPortTimeout(_In_ PATAPORT_PORT_DATA PortData, _In_ ULONG Slot)
Definition: portstate.c:905
FORCEINLINE ATA_SCSI_ADDRESS AtaMarshallScsiAddress(_In_ ULONG PathId, _In_ ULONG TargetId, _In_ ULONG Lun)
Definition: atapi.h:585
NTSTATUS AtaPdoWmiRegistration(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ BOOLEAN Register)
Definition: wmi.c:189
STOP_IO_CALLBACK * PSTOP_IO_CALLBACK
Definition: atapi.h:75
UCHAR AtaReqSmartIoControl(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PATA_DEVICE_REQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb)
Definition: smart.c:92
NTSTATUS AtaOpenRegistryKey(_Out_ PHANDLE KeyHandle, _In_ HANDLE RootKey, _In_ PUNICODE_STRING KeyName, _In_ BOOLEAN Create)
Definition: atapi.c:75
#define QUEUE_FLAG_FROZEN_QUEUE_LOCK
Definition: atapi.h:112
REQUEST_COMPLETION_ROUTINE AtaPortCompleteInternalRequest
Definition: atapi.h:880
VOID AtaPnpInitializeCommonExtension(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PDEVICE_OBJECT SelfDeviceObject, _In_ ULONG Flags)
Definition: atapi.c:572
struct _REQUEST_QUEUE_ENTRY * PREQUEST_QUEUE_ENTRY
struct _ATAPORT_PORT_DATA * PATAPORT_PORT_DATA
Definition: atapi.h:35
struct _ATA_WORKER_CONTEXT ATA_WORKER_CONTEXT
UCHAR AtaReqSetFixedAtaSenseData(_In_ PATA_DEVICE_REQUEST Request)
Definition: satl.c:248
DECLSPEC_NOINLINE_FROM_PAGED PATAPORT_DEVICE_EXTENSION AtaFdoFindNextDeviceByPath(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _Inout_ PATA_SCSI_ADDRESS AtaScsiAddress, _In_ BOOLEAN SearchRemoveDev, _In_ PVOID ReferenceTag)
Definition: fdo.c:654
PORT_NOTIFICATION AtaPortNotification
Definition: atapi.h:881
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqThawQueue(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ULONG ReasonFlags)
Definition: scsi.c:1365
struct _ATA_WORKER_DEVICE_CONTEXT ATA_WORKER_DEVICE_CONTEXT
#define ATA_MAX_LBA_28
Definition: atapi.h:209
DECLSPEC_NOINLINE_FROM_PAGED PATAPORT_DEVICE_EXTENSION AtaFdoFindDeviceByPath(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ ATA_SCSI_ADDRESS AtaScsiAddress, _In_ PVOID ReferenceTag)
Definition: fdo.c:614
VOID AtaReqStartCompletionDpc(_In_ PATA_DEVICE_REQUEST Request)
Definition: scsi.c:777
BOOLEAN AtaReqDmaTransferToPioTransfer(_In_ PATA_DEVICE_REQUEST Request)
Definition: satl.c:78
DEVICE_TYPE_NAME
Definition: atapi.h:565
@ GetGenericType
Definition: atapi.h:567
@ GetPeripheralId
Definition: atapi.h:568
@ GetDeviceType
Definition: atapi.h:566
VOID AtaSwapIdString(_Inout_updates_bytes_(WordCount *sizeof(USHORT)) PVOID Buffer, _In_range_(>, 0) ULONG WordCount)
Definition: enum.c:64
struct _ATAPORT_DEVICE_EXTENSION * PATAPORT_DEVICE_EXTENSION
Definition: atapi.h:34
struct _ATAPORT_IO_CONTEXT ATAPORT_IO_CONTEXT
Definition: atapi.h:36
UCHAR AtaDeviceGetFlushCacheCommand(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: dev_power.c:63
IO_WORKITEM_ROUTINE AtaStorageNotificationWorker
Definition: atapi.h:654
PATAPORT_DEVICE_EXTENSION AtaPdoCreateDevice(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ ATA_SCSI_ADDRESS AtaScsiAddress)
Definition: pdo.c:685
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaPortSignalWorkerThread(_In_ PATAPORT_PORT_DATA PortData)
Definition: portstate.c:963
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaDeviceQueueEvent(_In_ PATAPORT_PORT_DATA PortData, _In_opt_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ATA_PORT_ACTION Action)
Definition: portstate.c:992
NTSTATUS AtaPortCheckDevicePowerState(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: dev_power.c:218
enum _ATA_DEVICE_STATUS ATA_DEVICE_STATUS
_ATA_ERROR_LOG_VALUE
Definition: atapi.h:262
@ EVENT_CODE_CRC_ERROR
Definition: atapi.h:263
@ EVENT_CODE_BAD_STATE
Definition: atapi.h:264
@ EVENT_CODE_TIMEOUT
Definition: atapi.h:265
@ EVENT_CODE_NCQ_DISABLE
Definition: atapi.h:268
@ EVENT_CODE_DOWNSHIFT
Definition: atapi.h:266
@ EVENT_CODE_DMA_DISABLE
Definition: atapi.h:267
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqWaitForOutstandingIoToComplete(_In_ PATAPORT_IO_CONTEXT Device, _In_ PSCSI_REQUEST_BLOCK Srb)
Definition: scsi.c:1395
struct _ATAPORT_CHANNEL_EXTENSION * PATAPORT_CHANNEL_EXTENSION
Definition: atapi.h:33
NTSTATUS AtaPortSendRequest(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: portstate.c:831
DRIVER_ADD_DEVICE AtaAddChannel
Definition: atapi.h:646
FORCEINLINE BOOLEAN AtaPortQueueEmpty(_In_ PATAPORT_PORT_DATA PortData)
Definition: atapi.h:573
KDPC AtapCompletionDpc
Definition: scsi.c:15
BOOLEAN AtaReqAllocateMdl(_In_ PATA_DEVICE_REQUEST Request)
Definition: scsi.c:467
PCSTR AtaTypeCodeToName(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ DEVICE_TYPE_NAME Type)
Definition: atapi.c:42
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaReqFreezeQueue(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ ULONG ReasonFlags)
Definition: scsi.c:1351
NTSTATUS AtaPdoHandleMiniportIdentify(_In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ PSCSI_REQUEST_BLOCK Srb)
Definition: smart.c:207
FORCEINLINE BOOLEAN AtaPacketCommandUseDma(_In_ UCHAR OpCode)
Definition: atapi.h:613
DECLSPEC_NOINLINE_FROM_PAGED VOID AtaFdoDeviceListInsert(_In_ PATAPORT_CHANNEL_EXTENSION ChanExt, _In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ BOOLEAN DoInsert)
Definition: fdo.c:699
enum _ATA_ERROR_LOG_VALUE ATA_ERROR_LOG_VALUE
VOID AtaCreateStandardInquiryData(_In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: satl.c:1166
#define ATAPORT_FN_FIELD
The maximum length of identifier strings for ATA devices excluding the terminating NULL.
Definition: atapi.h:195
VOID() STOP_IO_CALLBACK(_In_ PATAPORT_IO_CONTEXT Device)
Definition: atapi.h:73
IO_COMPLETION_ROUTINE AtaPdoCompletionRoutine
Definition: atapi.h:859
NTSTATUS AtaDeviceSendIdentify(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt, _In_ UCHAR Command)
Definition: dev_identify.c:45
struct _ATAPORT_COMMON_EXTENSION * PATAPORT_COMMON_EXTENSION
VOID AtaPortSelectTimings(_In_ PATAPORT_PORT_DATA PortData, _In_ BOOLEAN ForceCompatibleTimings)
Definition: dev_timings.c:258
ATA_DEVICE_STATUS AtaPortIdentifyDevice(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: dev_identify.c:213
NTSTATUS AtaPnpQueryInterface(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ const GUID *Guid, _Out_ PVOID Interface, _In_ ULONG Version, _In_ ULONG Size)
Definition: atapi.c:396
PUCHAR AtaCopyIdStringUnsafe(_Out_writes_bytes_all_(Length) PUCHAR Destination, _In_reads_bytes_(Length) PUCHAR Source, _In_ ULONG Length)
Definition: enum.c:15
struct _ATA_WORKER_CONTEXT * PATA_WORKER_CONTEXT
NTSTATUS AtaPnpQueryDeviceUsageNotification(_In_ PATAPORT_COMMON_EXTENSION CommonExt, _In_ PIRP Irp)
Definition: atapi.c:503
NTSTATUS AtaPortDeviceProcessPowerChange(_In_ PATAPORT_PORT_DATA PortData, _In_ PATAPORT_DEVICE_EXTENSION DevExt)
Definition: dev_power.c:151
#define QUEUE_FLAG_FROZEN_QUEUE_FREEZE
Definition: atapi.h:109
LONG NTSTATUS
Definition: precomp.h:26
@ Create
Definition: registry.c:563
#define _Dispatch_type_(a)
Definition: btrfs_drv.h:204
_In_ PSCSI_REQUEST_BLOCK Srb
Definition: cdrom.h:989
#define SCSIOP_READ_CD
Definition: cdrw_hw.h:967
#define SCSIOP_WRITE6
Definition: cdrw_hw.h:876
#define SCSIOP_WRITE
Definition: cdrw_hw.h:906
#define SCSIOP_READ6
Definition: cdrw_hw.h:874
#define SCSIOP_READ12
Definition: cdrw_hw.h:956
#define SCSIOP_WRITE12
Definition: cdrw_hw.h:957
#define SCSIOP_READ_CD_MSF
Definition: cdrw_hw.h:964
#define SCSIOP_READ
Definition: cdrw_hw.h:905
#define IRP_MJ_PNP
Definition: cdrw_usr.h:52
Definition: bufpool.h:45
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
Definition: classpnp.h:1315
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
Definition: classpnp.h:1313
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR TargetId
Definition: classpnp.h:1314
_In_ PIRP Irp
Definition: csq.h:116
NTSTATUS NTAPI AtaDispatchPower(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
Definition: dev_power.c:523
OpCode
Definition: dlist.c:229
#define DECLSPEC_ALIGN(x)
Definition: corecrt.h:141
NTSTATUS NTAPI AtaDispatchDeviceControl(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
Definition: ioctl.c:932
NTSTATUS NTAPI AtaDispatchWmi(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
Definition: wmi.c:175
#define SCSIOP_READ16
Definition: scsi.h:914
#define SCSIOP_WRITE16
Definition: scsi.h:915
#define SRB_FLAGS_BYPASS_FROZEN_QUEUE
Definition: srb.h:398
#define SRB_FLAGS_DATA_OUT
Definition: srb.h:401
#define SRB_FLAGS_BYPASS_LOCKED_QUEUE
Definition: srb.h:410
#define SRB_FLAGS_DATA_IN
Definition: srb.h:400
#define SRB_FLAGS_NO_KEEP_AWAKE
Definition: srb.h:412
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
#define C_ASSERT(e)
Definition: intsafe.h:73
DeviceType
Definition: mmdrv.h:42
unsigned __int64 ULONG64
Definition: imports.h:198
#define _Field_z_
Definition: ms_sal.h:607
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3169
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
Definition: ndis.h:4715
_In_ PIOMMU_DEVICE_PATH _In_ PIOMMU_SVM_CAPABILITIES DeviceCapabilities
Definition: haltypes.h:1824
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
Definition: rtlfuncs.h:3051
#define _In_reads_bytes_(s)
Definition: no_sal2.h:170
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _Out_writes_bytes_all_(s)
Definition: no_sal2.h:194
#define _In_opt_
Definition: no_sal2.h:212
#define _In_range_(l, h)
Definition: no_sal2.h:368
#define _Inout_updates_bytes_(s)
Definition: no_sal2.h:184
#define ANSI_NULL
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
enum _DEVICE_POWER_STATE DEVICE_POWER_STATE
enum _SYSTEM_POWER_STATE SYSTEM_POWER_STATE
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:455
ULONG SectorCount
Definition: part_brfr.c:22
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
char CHAR
Definition: pedump.c:57
#define IRP_MJ_CLOSE
Definition: rdpdr.c:45
#define IRP_MJ_DEVICE_CONTROL
Definition: rdpdr.c:52
#define IRP_MJ_CREATE
Definition: rdpdr.c:44
ULONG SerialNumber
Definition: rxce.c:117
static PMEMKEY RootKey
Definition: registry.c:55
#define DECLSPEC_NOINLINE_FROM_PAGED
NTSTATUS NTAPI AtaDispatchPnp(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
Definition: pdo.c:644
NTSTATUS NTAPI AtaDispatchScsi(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
Definition: scsi.c:1771
Definition: shell.h:41
KSPIN_LOCK PdoListLock
Definition: atapi.h:445
PDEVICE_OBJECT Pdo
Definition: atapi.h:444
ATAPORT_PORT_DATA PortData
Definition: atapi.h:442
ATAPORT_COMMON_EXTENSION Common
Definition: atapi.h:440
SINGLE_LIST_ENTRY PdoList
Definition: atapi.h:446
UNICODE_STRING StorageInterfaceName
Definition: atapi.h:449
PDEVICE_OBJECT Self
Definition: atapi.h:432
PDEVICE_OBJECT LowerDeviceObject
Definition: atapi.h:423
_Write_guarded_by_(_Global_interlock_) volatile LONG PageFiles
IO_REMOVE_LOCK RemoveLock
Definition: atapi.h:434
DEVICE_POWER_STATE DevicePowerState
Definition: atapi.h:415
_Write_guarded_by_(_Global_interlock_) volatile LONG HibernateFiles
_Write_guarded_by_(_Global_interlock_) volatile LONG DumpFiles
SYSTEM_POWER_STATE SystemPowerState
Definition: atapi.h:418
ATA_WORKER_DEVICE_CONTEXT Worker
Definition: atapi.h:458
ULONG MinimumUltraDmaCycleTime
Definition: atapi.h:545
ULONG TransferModeSelectedBitmap
Definition: atapi.h:527
ULONG TransferModeCurrentBitmap
Definition: atapi.h:509
WMILIB_CONTEXT WmiLibInfo
Definition: atapi.h:555
LIST_ENTRY PowerIrpQueueList
Definition: atapi.h:469
IDENTIFY_DEVICE_DATA IdentifyDeviceData
Definition: atapi.h:474
ULONG TransferModeSupportedBitmap
Definition: atapi.h:518
ULONG MinimumSingleWordDmaCycleTime
Definition: atapi.h:543
IDENTIFY_PACKET_DATA IdentifyPacketData
Definition: atapi.h:475
ATAPORT_IO_CONTEXT Device
Definition: atapi.h:457
ULONG MinimumMultiWordDmaCycleTime
Definition: atapi.h:544
INQUIRYDATA InquiryData
Definition: atapi.h:479
SINGLE_LIST_ENTRY ListEntry
Definition: atapi.h:466
ULONG TransferModeAllowedMask
Definition: atapi.h:533
LARGE_INTEGER LastDmaErrorTime
Definition: atapi.h:552
_Field_z_ DECLSPEC_ALIGN(2) CHAR FriendlyName[ATAPORT_FN_FIELD+sizeof(ANSI_NULL)]
ATAPORT_COMMON_EXTENSION Common
Definition: atapi.h:455
ULONG TransferModeUserAllowedMask
Definition: atapi.h:503
PATAPORT_PORT_DATA PortData
Definition: atapi.h:101
LIST_ENTRY DeviceQueueList
Definition: atapi.h:133
PSCSI_REQUEST_BLOCK QuiescenceSrb
Definition: atapi.h:135
ULONG DeviceFlags
Definition: atapi.h:81
ULONG FreeRequestsBitmap
Definition: atapi.h:131
PULONG PowerIdleCounter
Definition: atapi.h:98
PATA_DEVICE_REQUEST Requests
Definition: atapi.h:132
USHORT SectorsPerTrack
Definition: atapi.h:128
USHORT Cylinders
Definition: atapi.h:126
ULONG64 TotalSectors
Definition: atapi.h:129
ATA_SCSI_ADDRESS AtaScsiAddress
Definition: atapi.h:100
KEVENT QueueStoppedEvent
Definition: atapi.h:134
PVOID LocalBuffer
Definition: atapi.h:99
KSPIN_LOCK QueueLock
Definition: atapi.h:102
ULONG MaxRequestsBitmap
Definition: atapi.h:130
PVOID LocalBuffer
Definition: atapi.h:398
PCHANNEL_SET_MODE SetTransferMode
Definition: atapi.h:386
PVOID ChannelContext
Definition: atapi.h:348
PCHANNEL_ENUMERATE_CHANNEL EnumerateChannel
Definition: atapi.h:384
ULONG MaximumPhysicalPages
Definition: atapi.h:393
ULONG LastUsedSlot
Definition: atapi.h:367
PDMA_ADAPTER DmaAdapter
Definition: atapi.h:353
PDEVICE_OBJECT ChannelObject
Definition: atapi.h:354
ULONG MaximumTransferLength
Definition: atapi.h:392
ULONG FreeSlotsBitmap
Definition: atapi.h:366
volatile LONG ReservedMappingLock
Definition: atapi.h:379
PCHANNEL_IDENTIFY_DEVICE IdentifyDevice
Definition: atapi.h:385
PCHANNEL_PREPARE_PRD_TABLE PreparePrdTable
Definition: atapi.h:350
PCHANNEL_SET_DEVICE_DATA SetDeviceData
Definition: atapi.h:387
PATA_DEVICE_REQUEST Slots[MAX_SLOTS]
Definition: atapi.h:355
KEVENT QueueStoppedEvent
Definition: atapi.h:391
PCHANNEL_GET_INIT_TASK_FILE GetInitTaskFile
Definition: atapi.h:388
PCHANNEL_START_IO StartIo
Definition: atapi.h:352
PCHANNEL_ABORT_CHANNEL AbortChannel
Definition: atapi.h:382
PCHANNEL_RESET_CHANNEL ResetChannel
Definition: atapi.h:383
KSPIN_LOCK QueueLock
Definition: atapi.h:363
volatile LONG InterruptFlags
Definition: atapi.h:359
PCHANNEL_PREPARE_IO PrepareIo
Definition: atapi.h:351
PCHANNEL_DOWNGRADE_INTERFACE_SPEED DowngradeInterfaceSpeed
Definition: atapi.h:389
ULONG PortNumber
Definition: atapi.h:396
ULONG MaxSlotsBitmap
Definition: atapi.h:397
SCATTER_GATHER_LIST LocalSgList
Definition: atapi.h:399
PKINTERRUPT InterruptObject
Definition: atapi.h:357
ULONG PortFlags
Definition: atapi.h:335
ATA_WORKER_CONTEXT Worker
Definition: atapi.h:400
LONG TimerCount[MAX_SLOTS]
Definition: atapi.h:356
PCONTROLLER_ATTACH_CHANNEL AttachChannel
Definition: atapi.h:390
PCHANNEL_ALLOCATE_SLOT AllocateSlot
Definition: atapi.h:349
ULONG QueueDepth
Definition: atapi.h:395
ULONG ActiveSlotsBitmap
Definition: atapi.h:358
LIST_ENTRY PortQueueList
Definition: atapi.h:364
PCONTROLLER_OBJECT HwSyncObject
Definition: atapi.h:381
ULONG MaxTargetId
Definition: atapi.h:394
PVOID ReservedVaSpace
Definition: atapi.h:380
ULONG QueueFlags
Definition: atapi.h:368
LONG AllocatedSlots
Definition: atapi.h:377
ULONG ActiveTimersBitmap
Definition: atapi.h:365
ULONG ResetRetryCount
Definition: atapi.h:283
ATA_DEVICE_REQUEST InternalRequest
Definition: atapi.h:291
KEVENT EnumerationEvent
Definition: atapi.h:293
ULONG PausedSlotsBitmap
Definition: atapi.h:281
ATAPORT_IO_CONTEXT InternalDevice
Definition: atapi.h:292
volatile ULONG DeviceCount
Definition: atapi.h:276
KEVENT ThreadEvent
Definition: atapi.h:274
PKTHREAD Thread
Definition: atapi.h:295
volatile PATAPORT_DEVICE_EXTENSION EnumDevExt
Definition: atapi.h:275
KEVENT CompletionEvent
Definition: atapi.h:290
PATA_DEVICE_REQUEST OldRequest
Definition: atapi.h:289
volatile LONG EventsPending
Definition: atapi.h:277
PATA_DEVICE_REQUEST FailedRequest
Definition: atapi.h:288
ULONG BadDeviceBitmap
Definition: atapi.h:282
KSPIN_LOCK Lock
Definition: atapi.h:273
KDPC NotificationDpc
Definition: atapi.h:294
volatile LONG EventsPending
Definition: atapi.h:300
volatile LONG EnumStatus
Definition: atapi.h:301
Definition: ketypes.h:751
Definition: typedefs.h:120
Definition: atapi.h:317
PVOID Context
Definition: atapi.h:319
ULONG SortKey
Definition: atapi.h:320
LIST_ENTRY ListEntry
Definition: atapi.h:318
Definition: ntbasedef.h:640
uint32_t * PULONG
Definition: typedefs.h:59
const uint16_t * PCWSTR
Definition: typedefs.h:57
unsigned char UCHAR
Definition: typedefs.h:53
const char * PCSTR
Definition: typedefs.h:52
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
ULONG AsULONG
Definition: atapi.h:69
UCHAR PathId
Definition: atapi.h:65
UCHAR TargetId
Definition: atapi.h:60
UCHAR IsValid
Definition: atapi.h:67
UCHAR DefaultValue
Definition: via.c:137
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
_In_ WDFCMRESLIST _In_ WDFCMRESLIST ResourcesTranslated
Definition: wdfdevice.h:891
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2705
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
Definition: wdffdo.h:469
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
Definition: wdfiotarget.h:510
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
Definition: wdfobject.h:762
#define FORCEINLINE
Definition: wdftypes.h:67
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
#define IRP_MJ_SCSI
struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
Definition: iotypes.h:2206
DRIVER_DISPATCH DRIVER_DISPATCH_RAISED
Definition: iotypes.h:2265
#define IRP_MJ_SYSTEM_CONTROL
* PDEVICE_CAPABILITIES
Definition: iotypes.h:965
#define IRP_MJ_POWER
#define const
Definition: zconf.h:233