diff options
| author | karlf <[email protected]> | 2016-08-11 13:28:13 -0700 |
|---|---|---|
| committer | karlf <[email protected]> | 2016-08-11 13:28:13 -0700 |
| commit | 96eb96dfb613e4c745db6bd1f53a92fe7e2290fc (patch) | |
| tree | ad5f3ede5cbcd6b598677ce41bcf8318471bdd92 /sd | |
| parent | 687b274aa38fd05c8c26e3068932121876d7f745 (diff) | |
Updated for "Windows 10 Anniversary Update" (Version 1607)
Diffstat (limited to 'sd')
| -rw-r--r-- | sd/miniport/sdhc/inbox/sdhc.vcxproj | 4 | ||||
| -rw-r--r-- | sd/miniport/sdhc/inbox/sdhc.vcxproj.Filters | 8 | ||||
| -rw-r--r-- | sd/miniport/sdhc/sdhc.c | 116 | ||||
| -rw-r--r-- | sd/miniport/sdhc/sdhc.h | 17 | ||||
| -rw-r--r-- | sd/miniport/sdhc/sdhc.sln | 18 | ||||
| -rw-r--r-- | sd/sdiomars/mars.vcxproj | 4 | ||||
| -rw-r--r-- | sd/sdiomars/mars.vcxproj.Filters | 8 | ||||
| -rw-r--r-- | sd/sdiomars/sdiomars.sln | 18 |
8 files changed, 134 insertions, 59 deletions
diff --git a/sd/miniport/sdhc/inbox/sdhc.vcxproj b/sd/miniport/sdhc/inbox/sdhc.vcxproj index cd4c4273..054462d4 100644 --- a/sd/miniport/sdhc/inbox/sdhc.vcxproj +++ b/sd/miniport/sdhc/inbox/sdhc.vcxproj @@ -19,11 +19,11 @@ </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> - <ProjectGuid>{2619C7A0-9593-4B9D-B7B6-39315EB8B689}</ProjectGuid> + <ProjectGuid>{10452736-7C4F-4206-94F9-AD634213C9C4}</ProjectGuid> <RootNamespace>$(MSBuildProjectName)</RootNamespace> <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration> <Platform Condition="'$(Platform)' == ''">Win32</Platform> - <SampleGuid>{2621B937-3FC0-4A3C-8DCD-507E2A3C8CCF}</SampleGuid> + <SampleGuid>{BF01AA4F-592C-4E53-A80E-E8E61BE4F7BC}</SampleGuid> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> diff --git a/sd/miniport/sdhc/inbox/sdhc.vcxproj.Filters b/sd/miniport/sdhc/inbox/sdhc.vcxproj.Filters index b79c2a1f..c37b6a7e 100644 --- a/sd/miniport/sdhc/inbox/sdhc.vcxproj.Filters +++ b/sd/miniport/sdhc/inbox/sdhc.vcxproj.Filters @@ -3,19 +3,19 @@ <ItemGroup> <Filter Include="Source Files"> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions> - <UniqueIdentifier>{0D7C22F4-3833-4FF6-AEC7-EB6D0AA2C27A}</UniqueIdentifier> + <UniqueIdentifier>{DDB410DD-88B9-435E-8F12-9B76CDBF781D}</UniqueIdentifier> </Filter> <Filter Include="Header Files"> <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> - <UniqueIdentifier>{32B2D023-A9AF-4DF5-A1A0-6D1B8BD5DE92}</UniqueIdentifier> + <UniqueIdentifier>{968DB77B-5C06-4BFE-89A3-21FC86AA2045}</UniqueIdentifier> </Filter> <Filter Include="Resource Files"> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions> - <UniqueIdentifier>{AC9D724E-A9F5-4CB5-86A4-5DBA92452CF4}</UniqueIdentifier> + <UniqueIdentifier>{61C7F1C7-4FC2-4BB2-AD6B-939B62C88F02}</UniqueIdentifier> </Filter> <Filter Include="Driver Files"> <Extensions>inf;inv;inx;mof;mc;</Extensions> - <UniqueIdentifier>{4A3A774C-B573-4EC1-9364-469F243356D0}</UniqueIdentifier> + <UniqueIdentifier>{CE4A0734-7B47-4CE8-8A72-233C81D37C5E}</UniqueIdentifier> </Filter> </ItemGroup> <ItemGroup> diff --git a/sd/miniport/sdhc/sdhc.c b/sd/miniport/sdhc/sdhc.c index 35403a30..54abe413 100644 --- a/sd/miniport/sdhc/sdhc.c +++ b/sd/miniport/sdhc/sdhc.c @@ -87,12 +87,14 @@ Return Value: InitializationData.SaveContext = SdhcSaveContext; InitializationData.RestoreContext = SdhcRestoreContext; InitializationData.PowerControlCallback = SdhcPoFxPowerControlCallback; + InitializationData.Cleanup = SdhcCleanup; // // Provide the number of slots and their size. // InitializationData.PrivateExtensionSize = sizeof(SDHC_EXTENSION); + InitializationData.CrashdumpSupported = TRUE; // // Hook up the IRP dispatch routines. @@ -222,7 +224,8 @@ SdhcSlotInitialize( _In_ PVOID PrivateExtension, _In_ PHYSICAL_ADDRESS PhysicalBase, _In_ PVOID VirtualBase, - _In_ ULONG Length + _In_ ULONG Length, + _In_ BOOLEAN CrashdumpMode ) /*++ @@ -235,6 +238,14 @@ Arguments: SlotExtension - SlotExtension interface between sdhost and this miniport. + PhysicalBase - Physical base address of the host controller register space. + + VirtualBase - Mapped register space. + + Length - Length of the host register set in bytes. + + CrashdumpMode - whether this miniport is being used for crashdump. + Return value: NTSTATUS @@ -267,6 +278,12 @@ Return value: (PSD_HOST_CONTROLLER_REGISTERS) VirtualBase; // + // Check whether the driver is in crashdump mode. + // + + SdhcExtension->CrashdumpMode = CrashdumpMode; + + // // Initialize host capabilities. // @@ -499,8 +516,11 @@ Return value: break; case SdSetSignalingVoltage: - Status = SdhcSetSignaling(SdhcExtension, - BusOperation->Parameters.SignalingVoltage); + Status = + SdhcSetSignaling( + SdhcExtension, + (BOOLEAN)(BusOperation->Parameters.SignalingVoltage == + SdSignalingVoltage18)); break; @@ -608,9 +628,9 @@ SdhcSlotInterrupt( _In_ PVOID PrivateExtension, _Out_ PULONG Events, _Out_ PULONG Errors, - _Out_ PBOOLEAN NotifyCardChange, - _Out_ PBOOLEAN NotifySdioInterrupt, - _Out_ PBOOLEAN NotifyTuning + _Out_ PBOOLEAN CardChange, + _Out_ PBOOLEAN SdioInterrupt, + _Out_ PBOOLEAN Tuning ) /*++ @@ -654,8 +674,7 @@ Return value: // if (*Events & SDHC_IS_CARD_DETECT) { - *NotifyCardChange = TRUE; - *Events &= ~SDHC_IS_CARD_DETECT; + *CardChange = TRUE; } // @@ -663,8 +682,7 @@ Return value: // if (*Events & SDHC_IS_CARD_INTERRUPT) { - *NotifySdioInterrupt = TRUE; - *Events &= ~SDHC_IS_CARD_INTERRUPT; + *SdioInterrupt = TRUE; } // @@ -672,8 +690,7 @@ Return value: // if (*Events & SDHC_IS_TUNING_INTERRUPT) { - *NotifyTuning = TRUE; - *Events &= ~SDHC_IS_TUNING_INTERRUPT; + *Tuning = TRUE; } // @@ -684,7 +701,11 @@ Return value: // SdhcAcknowledgeInterrupts(SdhcExtension, (USHORT) *Events); - return (*Events != 0); + *Events &= ~(SDHC_IS_CARD_DETECT | + SDHC_IS_CARD_INTERRUPT | + SDHC_IS_TUNING_INTERRUPT); + + return (*Events != 0) || (*CardChange) || (*SdioInterrupt) || (*Tuning); } NTSTATUS @@ -1029,7 +1050,32 @@ Return value: return STATUS_NOT_IMPLEMENTED; } - + +VOID +SdhcCleanup( + _In_ PSD_MINIPORT Miniport + ) + +/*++ + +Routine Description: + + Cleanup any memory allocations done during the lifetime of the driver. + +Arguments: + + Miniport - Miniport interface for the controller. + +Return value: + + NTSTATUS + +--*/ + +{ + + UNREFERENCED_PARAMETER(Miniport); +} //----------------------------------------------------------------------------- // Host routine implementations. @@ -1095,7 +1141,7 @@ Return value: do { Retries -= 1; if (Retries == 0) { - return STATUS_TIMEOUT; + return STATUS_IO_TIMEOUT; } Reset = SdhcReadRegisterUchar(SdhcExtension, SDHC_RESET); @@ -1115,6 +1161,15 @@ Return value: SDHC_TC_MAX_DATA_TIMEOUT); // + // Clear detection interrupt after reset, we will pick up the + // status from the present state register + // + + SdhcWriteRegisterUshort(SdhcExtension, + SDHC_INTERRUPT_STATUS, + 0xFFFF); + + // // Initialize DMA if the controller supports it. // @@ -1156,7 +1211,7 @@ Return value: STATUS_SUCCESS - The clock was successfuly set. - STATUS_TIMEOUT - The clock did not stabilize in time. + STATUS_IO_TIMEOUT - The clock did not stabilize in time. --*/ @@ -1190,7 +1245,7 @@ Return value: do { Retries -= 1; if (Retries == 0) { - return STATUS_TIMEOUT; + return STATUS_IO_TIMEOUT; } ClockControl = @@ -1245,7 +1300,7 @@ Return value: STATUS_INVALID_PARAMETER - The voltage profile provided was invalid. - STATUS_TIMEOUT - The bus voltage did not stabilize in time. + STATUS_IO_TIMEOUT - The bus voltage did not stabilize in time. --*/ @@ -1297,7 +1352,7 @@ Return value: do { Retries -= 1; if (Retries == 0) { - return STATUS_TIMEOUT; + return STATUS_IO_TIMEOUT; } SdhcWriteRegisterUchar(SdhcExtension, SDHC_POWER_CONTROL, PowerControl); @@ -1319,7 +1374,7 @@ Return value: do { Retries -= 1; if (Retries == 0) { - return STATUS_TIMEOUT; + return STATUS_IO_TIMEOUT; } SdhcWriteRegisterUchar(SdhcExtension, SDHC_POWER_CONTROL, PowerControl); @@ -1595,7 +1650,7 @@ Return value: ClockControl = SdhcReadRegisterUshort(SdhcExtension, SDHC_CLOCK_CONTROL); ClockControl &= ~SDHC_CC_CLOCK_ENABLE; SdhcWriteRegisterUshort(SdhcExtension, SDHC_CLOCK_CONTROL, ClockControl); - SdPortWait(10 * 1000); + SdPortWait(10000); // // DAT[3:0] must be all zeroes. @@ -1624,7 +1679,7 @@ Return value: } SdhcWriteRegisterUshort(SdhcExtension, SDHC_HOST_CONTROL2, HostControl2); - SdPortWait(5 * 1000); + SdPortWait(5000); HostControl2 = SdhcReadRegisterUshort(SdhcExtension, SDHC_HOST_CONTROL2); // @@ -1647,6 +1702,8 @@ Return value: // ClockControl = SdhcReadRegisterUshort(SdhcExtension, SDHC_CLOCK_CONTROL); + ClockControl |= SDHC_CC_CLOCK_ENABLE; + SdhcWriteRegisterUshort(SdhcExtension, SDHC_CLOCK_CONTROL, ClockControl); SdPortWait(10000); // @@ -1949,13 +2006,15 @@ Return value: // Enable the interrupt signals from controller to OS. // - SdhcWriteRegisterUshort(SdhcExtension, - SDHC_INTERRUPT_SIGNAL_ENABLE, - InterruptEnable); + if (!SdhcExtension->CrashdumpMode) { + SdhcWriteRegisterUshort(SdhcExtension, + SDHC_INTERRUPT_SIGNAL_ENABLE, + InterruptEnable); - SdhcWriteRegisterUshort(SdhcExtension, - SDHC_ERROR_SIGNAL_ENABLE, - 0xFFFF); + SdhcWriteRegisterUshort(SdhcExtension, + SDHC_ERROR_SIGNAL_ENABLE, + 0xFFFF); + } // // Enable the interrupt signals on the controller. @@ -2541,6 +2600,7 @@ Return value: return STATUS_INVALID_PARAMETER; } + TransferMode = 0; TransferMode &= ~(SDHC_TM_AUTO_CMD12_ENABLE | SDHC_TM_AUTO_CMD23_ENABLE | SDHC_TM_DMA_ENABLE | diff --git a/sd/miniport/sdhc/sdhc.h b/sd/miniport/sdhc/sdhc.h index 74d0a7c2..553a2393 100644 --- a/sd/miniport/sdhc/sdhc.h +++ b/sd/miniport/sdhc/sdhc.h @@ -1372,6 +1372,12 @@ typedef struct _SDHC_EXTENSION { PSDPORT_REQUEST OutstandingRequests[SDHC_MAX_OUTSTANDING_REQUESTS]; USHORT UnhandledEvents; + + // + // Whether this driver is used for crashdump/hibernate. + // + + BOOLEAN CrashdumpMode; } SDHC_EXTENSION, *PSDHC_EXTENSION; @@ -1480,7 +1486,8 @@ VOID SdhcSlotToggleEevnts( _In_ PSDPORT_SLOT_EXTENSION SlotExtension, _In_ ULONG EventMask, - _In_ BOOLEAN Enable + _In_ BOOLEAN Enable, + _In_ BOOLEAN CrashdumpMode ); */ @@ -1534,6 +1541,14 @@ SdhcPoFxPowerControlCallback( ) */ +SDPORT_CLEANUP SdhcCleanup; +/* +VOID +SdhcCleanup( + _In_ PSD_MINIPORT Miniport + ) +*/ + //----------------------------------------------------------------------------- // Hardware access routines. //----------------------------------------------------------------------------- diff --git a/sd/miniport/sdhc/sdhc.sln b/sd/miniport/sdhc/sdhc.sln index f9b7448c..f3ea0bb2 100644 --- a/sd/miniport/sdhc/sdhc.sln +++ b/sd/miniport/sdhc/sdhc.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdhc", "inbox\sdhc.vcxproj", "{2619C7A0-9593-4B9D-B7B6-39315EB8B689}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdhc", "inbox\sdhc.vcxproj", "{10452736-7C4F-4206-94F9-AD634213C9C4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2619C7A0-9593-4B9D-B7B6-39315EB8B689}.Debug|Win32.ActiveCfg = Debug|Win32 - {2619C7A0-9593-4B9D-B7B6-39315EB8B689}.Debug|Win32.Build.0 = Debug|Win32 - {2619C7A0-9593-4B9D-B7B6-39315EB8B689}.Release|Win32.ActiveCfg = Release|Win32 - {2619C7A0-9593-4B9D-B7B6-39315EB8B689}.Release|Win32.Build.0 = Release|Win32 - {2619C7A0-9593-4B9D-B7B6-39315EB8B689}.Debug|x64.ActiveCfg = Debug|x64 - {2619C7A0-9593-4B9D-B7B6-39315EB8B689}.Debug|x64.Build.0 = Debug|x64 - {2619C7A0-9593-4B9D-B7B6-39315EB8B689}.Release|x64.ActiveCfg = Release|x64 - {2619C7A0-9593-4B9D-B7B6-39315EB8B689}.Release|x64.Build.0 = Release|x64 + {10452736-7C4F-4206-94F9-AD634213C9C4}.Debug|Win32.ActiveCfg = Debug|Win32 + {10452736-7C4F-4206-94F9-AD634213C9C4}.Debug|Win32.Build.0 = Debug|Win32 + {10452736-7C4F-4206-94F9-AD634213C9C4}.Release|Win32.ActiveCfg = Release|Win32 + {10452736-7C4F-4206-94F9-AD634213C9C4}.Release|Win32.Build.0 = Release|Win32 + {10452736-7C4F-4206-94F9-AD634213C9C4}.Debug|x64.ActiveCfg = Debug|x64 + {10452736-7C4F-4206-94F9-AD634213C9C4}.Debug|x64.Build.0 = Debug|x64 + {10452736-7C4F-4206-94F9-AD634213C9C4}.Release|x64.ActiveCfg = Release|x64 + {10452736-7C4F-4206-94F9-AD634213C9C4}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/sd/sdiomars/mars.vcxproj b/sd/sdiomars/mars.vcxproj index f974e79c..fc11a774 100644 --- a/sd/sdiomars/mars.vcxproj +++ b/sd/sdiomars/mars.vcxproj @@ -19,12 +19,12 @@ </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> - <ProjectGuid>{B1304510-A6A8-4646-9C48-EDDD5ABEB540}</ProjectGuid> + <ProjectGuid>{EC43E875-56F0-402F-A42A-52D725108F56}</ProjectGuid> <RootNamespace>$(MSBuildProjectName)</RootNamespace> <KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR> <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration> <Platform Condition="'$(Platform)' == ''">Win32</Platform> - <SampleGuid>{8C68F76C-ECAC-4889-BC6F-C1FFAB76AD9B}</SampleGuid> + <SampleGuid>{CF2C68BB-DD38-4252-8833-F6612F4AF2C5}</SampleGuid> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> diff --git a/sd/sdiomars/mars.vcxproj.Filters b/sd/sdiomars/mars.vcxproj.Filters index 267b5122..689eb659 100644 --- a/sd/sdiomars/mars.vcxproj.Filters +++ b/sd/sdiomars/mars.vcxproj.Filters @@ -3,19 +3,19 @@ <ItemGroup> <Filter Include="Source Files"> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions> - <UniqueIdentifier>{375A493C-03C2-4C20-B2F4-236061BA63EE}</UniqueIdentifier> + <UniqueIdentifier>{A0B01610-7348-4D47-8415-CBCFEB7024C9}</UniqueIdentifier> </Filter> <Filter Include="Header Files"> <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> - <UniqueIdentifier>{C1A39E19-0808-487E-8B2B-34B586AA6F50}</UniqueIdentifier> + <UniqueIdentifier>{4861BC04-1F15-46A0-B2DE-28D21B74ECB3}</UniqueIdentifier> </Filter> <Filter Include="Resource Files"> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions> - <UniqueIdentifier>{74D04A5E-CCE1-40C8-A807-963F781F4607}</UniqueIdentifier> + <UniqueIdentifier>{34886BF6-4425-4ABE-AED6-105D0167B275}</UniqueIdentifier> </Filter> <Filter Include="Driver Files"> <Extensions>inf;inv;inx;mof;mc;</Extensions> - <UniqueIdentifier>{23C205B5-BAEA-4EC6-BF45-4D7FA8BF1E93}</UniqueIdentifier> + <UniqueIdentifier>{9EDC37D6-4A7F-4722-81F4-86129D5BF8CD}</UniqueIdentifier> </Filter> </ItemGroup> <ItemGroup> diff --git a/sd/sdiomars/sdiomars.sln b/sd/sdiomars/sdiomars.sln index b0db009e..943d4707 100644 --- a/sd/sdiomars/sdiomars.sln +++ b/sd/sdiomars/sdiomars.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mars", "mars.vcxproj", "{B1304510-A6A8-4646-9C48-EDDD5ABEB540}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mars", "mars.vcxproj", "{EC43E875-56F0-402F-A42A-52D725108F56}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B1304510-A6A8-4646-9C48-EDDD5ABEB540}.Debug|Win32.ActiveCfg = Debug|Win32 - {B1304510-A6A8-4646-9C48-EDDD5ABEB540}.Debug|Win32.Build.0 = Debug|Win32 - {B1304510-A6A8-4646-9C48-EDDD5ABEB540}.Release|Win32.ActiveCfg = Release|Win32 - {B1304510-A6A8-4646-9C48-EDDD5ABEB540}.Release|Win32.Build.0 = Release|Win32 - {B1304510-A6A8-4646-9C48-EDDD5ABEB540}.Debug|x64.ActiveCfg = Debug|x64 - {B1304510-A6A8-4646-9C48-EDDD5ABEB540}.Debug|x64.Build.0 = Debug|x64 - {B1304510-A6A8-4646-9C48-EDDD5ABEB540}.Release|x64.ActiveCfg = Release|x64 - {B1304510-A6A8-4646-9C48-EDDD5ABEB540}.Release|x64.Build.0 = Release|x64 + {EC43E875-56F0-402F-A42A-52D725108F56}.Debug|Win32.ActiveCfg = Debug|Win32 + {EC43E875-56F0-402F-A42A-52D725108F56}.Debug|Win32.Build.0 = Debug|Win32 + {EC43E875-56F0-402F-A42A-52D725108F56}.Release|Win32.ActiveCfg = Release|Win32 + {EC43E875-56F0-402F-A42A-52D725108F56}.Release|Win32.Build.0 = Release|Win32 + {EC43E875-56F0-402F-A42A-52D725108F56}.Debug|x64.ActiveCfg = Debug|x64 + {EC43E875-56F0-402F-A42A-52D725108F56}.Debug|x64.Build.0 = Debug|x64 + {EC43E875-56F0-402F-A42A-52D725108F56}.Release|x64.ActiveCfg = Release|x64 + {EC43E875-56F0-402F-A42A-52D725108F56}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE |
