summaryrefslogtreecommitdiff
path: root/storage/miniports/storahci/src/data.h
blob: 6bec0934a99807e07e4d443f231f4f4dfce8b98b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*++

Copyright (c) 2017  Microsoft Corporation

Module Name:

    data.h

Abstract:

    Definitions needed by storahci log/diagnostic function.

Author:

--*/

#pragma once

//
// Diagnostic data definitions for STORAHCI
//

#define MAX_EXECUTION_HISTORY_ENTRY_COUNT   200 // 200 entries take up 20KB

typedef struct _SLOT_MANAGER {

    ULONG HighPriorityAttribute;

    ULONG NCQueueSlice;
    ULONG NormalQueueSlice;
    ULONG SingleIoSlice;

    ULONG CommandsIssued;
    ULONG CommandsToComplete;

    //
    // These issued slices are used to determine the type of command
    // being programmed to adapter.
    // They are used instead of reading PxCI and PxSACT.
    //
    ULONG NCQueueSliceIssued;
    ULONG NormalQueueSliceIssued;
    ULONG SingleIoSliceIssued;

    ULONG Reserved;

} SLOT_MANAGER, *PSLOT_MANAGER;

typedef struct _EXECUTION_HISTORY {

    ULONG Function;
    ULONG IS;
    SLOT_MANAGER SlotManager;   //SLOT_MANAGER from _AHCI_CHANNEL_EXTENSION
    ULONG Px[0x10];      //Px registers value, end to AHCI_SNOTIFICATION -- SNTF
    LARGE_INTEGER TimeStamp;

} EXECUTION_HISTORY, *PEXECUTION_HISTORY;

typedef struct _ATA_IO_RECORD {

    ULONG   SuccessCount;

    ULONG   CrcErrorCount;
    ULONG   MediaErrorCount;
    ULONG   EndofMediaCount;
    ULONG   IllegalCommandCount;
    ULONG   AbortedCommandCount;
    ULONG   DeviceFaultCount;

    ULONG   OtherErrorCount;

    ULONG   NcqReadLogErrorCount;   // used to record the READ LOG EXT command error count when used for NCQ Error Recovery.

    ULONG   PortDriverResetCount;
    ULONG   TotalResetCount;

} ATA_IO_RECORD, *PATA_IO_RECORD;

typedef struct _STORAGE_DIAGNOSTIC_AHCI_EXECUTION_HISTORY {

    ULONG ExecutionHistoryCount;
    ULONG ExecutionHistoryIndex;
    EXECUTION_HISTORY History[MAX_EXECUTION_HISTORY_ENTRY_COUNT];

} STORAGE_DIAGNOSTIC_AHCI_EXECUTION_HISTORY, *PSTORAGE_DIAGNOSTIC_AHCI_EXECUTION_HISTORY;

typedef struct _STORAGE_DIAGNOSTIC_AHCI_DATA {

    ULONG Version;
    ULONG Count;
    STORAGE_DIAGNOSTIC_AHCI_EXECUTION_HISTORY ExecutionHistory;
    AHCI_PORT Registers;
    ATA_IO_RECORD IoRecord;

} STORAGE_DIAGNOSTIC_AHCI_DATA, *PSTORAGE_DIAGNOSTIC_AHCI_DATA;