From a42a11458326e0ea32e8815f969a47f3fa8abf28 Mon Sep 17 00:00:00 2001 From: ergo720 Date: Tue, 31 Jul 2018 21:44:10 +0200 Subject: [PATCH] Disabled LLE USB --- .gitmodules | 4 - build/win32/Cxbx.sln | 89 -------- build/win32/Cxbx.vcxproj | 158 +------------- import/SDL-mirror | 1 - resource/Cxbx.rc | 2 +- src/Common/Input/InputConfig.cpp | 3 +- src/Common/Input/InputConfig.h | 4 +- src/Common/Input/SDL2_Device.cpp | 3 + src/Common/Input/SDL2_Device.h | 4 +- src/Cxbx/ResCxbx.h | 2 +- src/Cxbx/WndMain.cpp | 10 +- src/CxbxKrnl/CxbxKrnl.cpp | 4 +- src/CxbxKrnl/HLEIntercept.cpp | 5 +- src/CxbxKrnl/Timer.cpp | 3 +- src/devices/usb/Hub.cpp | 13 +- src/devices/usb/OHCI.cpp | 353 +++++++++++-------------------- src/devices/usb/OHCI.h | 4 +- src/devices/usb/USBDevice.cpp | 8 +- src/devices/usb/UsbCommon.h | 10 +- src/devices/usb/XidGamepad.cpp | 12 +- 20 files changed, 182 insertions(+), 510 deletions(-) delete mode 160000 import/SDL-mirror diff --git a/.gitmodules b/.gitmodules index c0e5ff063..bfb466842 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,7 +10,3 @@ [submodule "import/XbSymbolDatabase"] path = import/XbSymbolDatabase url = https://github.com/Cxbx-Reloaded/XbSymbolDatabase.git -[submodule "SDL-mirror"] - path = import/SDL-mirror - url = https://github.com/spurious/SDL-mirror - branch = release-2.0.8 diff --git a/build/win32/Cxbx.sln b/build/win32/Cxbx.sln index bbb26e36f..e9955397a 100644 --- a/build/win32/Cxbx.sln +++ b/build/win32/Cxbx.sln @@ -26,18 +26,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XbSymbolDatabase", "..\..\i EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CxbxVSBC", "CxbxVSBC.vcxproj", "{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL2", "..\..\import\SDL-mirror\VisualC\SDL\SDL.vcxproj", "{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL2main", "..\..\import\SDL-mirror\VisualC\SDLmain\SDLmain.vcxproj", "{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug_Direct3D9|Any CPU = Debug_Direct3D9|Any CPU Debug_Direct3D9|Win32 = Debug_Direct3D9|Win32 Debug_Direct3D9|x64 = Debug_Direct3D9|x64 - Debug_USB_Packets|Any CPU = Debug_USB_Packets|Any CPU - Debug_USB_Packets|Win32 = Debug_USB_Packets|Win32 - Debug_USB_Packets|x64 = Debug_USB_Packets|x64 Debug|Any CPU = Debug|Any CPU Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 @@ -50,11 +43,6 @@ Global {E7A72D3D-5810-4078-A243-348B59726365}.Debug_Direct3D9|Win32.ActiveCfg = Debug_Direct3D9|Win32 {E7A72D3D-5810-4078-A243-348B59726365}.Debug_Direct3D9|Win32.Build.0 = Debug_Direct3D9|Win32 {E7A72D3D-5810-4078-A243-348B59726365}.Debug_Direct3D9|x64.ActiveCfg = Debug|Win32 - {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug_USB_Packets|Win32 - {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|Any CPU.Build.0 = Debug_USB_Packets|Win32 - {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|Win32.ActiveCfg = Debug_USB_Packets|Win32 - {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|Win32.Build.0 = Debug_USB_Packets|Win32 - {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|x64.ActiveCfg = Debug|Win32 {E7A72D3D-5810-4078-A243-348B59726365}.Debug|Any CPU.ActiveCfg = Debug|Win32 {E7A72D3D-5810-4078-A243-348B59726365}.Debug|Win32.ActiveCfg = Debug|Win32 {E7A72D3D-5810-4078-A243-348B59726365}.Debug|Win32.Build.0 = Debug|Win32 @@ -68,12 +56,6 @@ Global {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32 {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64 {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_Direct3D9|x64.Build.0 = Debug|x64 - {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug|Win32 - {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|Any CPU.Build.0 = Debug|Win32 - {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32 - {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32 - {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64 - {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|x64.Build.0 = Debug|x64 {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug|Any CPU.ActiveCfg = Debug|Win32 {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug|Win32.ActiveCfg = Debug|Win32 {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug|Win32.Build.0 = Debug|Win32 @@ -89,11 +71,6 @@ Global {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Any CPU {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_Direct3D9|x64.ActiveCfg = Debug|Any CPU {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_Direct3D9|x64.Build.0 = Debug|Any CPU - {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug|Any CPU - {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|Any CPU.Build.0 = Debug|Any CPU - {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Any CPU - {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|x64.ActiveCfg = Debug|Any CPU - {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|x64.Build.0 = Debug|Any CPU {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug|Any CPU.Build.0 = Debug|Any CPU {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug|Win32.ActiveCfg = Debug|Any CPU @@ -109,11 +86,6 @@ Global {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Any CPU {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_Direct3D9|x64.ActiveCfg = Debug|Any CPU {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_Direct3D9|x64.Build.0 = Debug|Any CPU - {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug|Any CPU - {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|Any CPU.Build.0 = Debug|Any CPU - {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Any CPU - {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|x64.ActiveCfg = Debug|Any CPU - {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|x64.Build.0 = Debug|Any CPU {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug|Any CPU.Build.0 = Debug|Any CPU {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug|Win32.ActiveCfg = Debug|Any CPU @@ -129,11 +101,6 @@ Global {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32 {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64 {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_Direct3D9|x64.Build.0 = Debug|x64 - {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug|Win32 - {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32 - {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32 - {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64 - {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|x64.Build.0 = Debug|x64 {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug|Any CPU.ActiveCfg = Debug|Win32 {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug|Win32.ActiveCfg = Debug|Win32 {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug|Win32.Build.0 = Debug|Win32 @@ -148,12 +115,6 @@ Global {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Win32 {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32 {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_Direct3D9|x64.ActiveCfg = Debug|Win32 - {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|Any CPU.ActiveCfg = Release|x64 - {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|Any CPU.Build.0 = Release|x64 - {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32 - {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32 - {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64 - {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|x64.Build.0 = Debug|x64 {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug|Any CPU.ActiveCfg = Debug|Win32 {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug|Win32.ActiveCfg = Debug|Win32 {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug|Win32.Build.0 = Debug|Win32 @@ -168,12 +129,6 @@ Global {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32 {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64 {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_Direct3D9|x64.Build.0 = Debug|x64 - {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|Any CPU.ActiveCfg = Release|Win32 - {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|Any CPU.Build.0 = Release|Win32 - {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32 - {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32 - {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64 - {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|x64.Build.0 = Debug|x64 {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug|Any CPU.ActiveCfg = Debug|Win32 {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug|Win32.ActiveCfg = Debug|Win32 {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug|Win32.Build.0 = Debug|Win32 @@ -184,50 +139,6 @@ Global {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Release|Win32.Build.0 = Release|Win32 {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Release|x64.ActiveCfg = Release|x64 {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Release|x64.Build.0 = Release|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|Any CPU.ActiveCfg = Release|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|Any CPU.Build.0 = Release|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|x64.Build.0 = Debug|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|Any CPU.ActiveCfg = Release|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|Any CPU.Build.0 = Release|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|x64.Build.0 = Debug|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.ActiveCfg = Debug|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.Build.0 = Debug|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.ActiveCfg = Debug|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.Build.0 = Debug|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Any CPU.ActiveCfg = Release|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.ActiveCfg = Release|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.Build.0 = Release|Win32 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.ActiveCfg = Release|x64 - {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.Build.0 = Release|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|Any CPU.ActiveCfg = Release|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|Any CPU.Build.0 = Release|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|x64.Build.0 = Debug|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|Any CPU.ActiveCfg = Release|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|Any CPU.Build.0 = Release|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|x64.Build.0 = Debug|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Win32.ActiveCfg = Debug|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Win32.Build.0 = Debug|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|x64.ActiveCfg = Debug|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|x64.Build.0 = Debug|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Any CPU.ActiveCfg = Release|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Win32.ActiveCfg = Release|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Win32.Build.0 = Release|Win32 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|x64.ActiveCfg = Release|x64 - {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/build/win32/Cxbx.vcxproj b/build/win32/Cxbx.vcxproj index 2f63af725..8537ca598 100644 --- a/build/win32/Cxbx.vcxproj +++ b/build/win32/Cxbx.vcxproj @@ -5,10 +5,6 @@ Debug_Direct3D9 Win32 - - Debug_USB_Packets - Win32 - Debug Win32 @@ -36,12 +32,6 @@ MultiByte $(DefaultPlatformToolset) - - Application - false - MultiByte - $(DefaultPlatformToolset) - Application false @@ -59,10 +49,6 @@ - - - - @@ -71,26 +57,20 @@ <_ProjectFileVersion>10.0.40219.1 false - false false false AllRules.ruleset - AllRules.ruleset AllRules.ruleset - - AllRules.ruleset ..\..\import\DirectX8\include;$(IncludePath) - ..\..\import\DirectX8\include;$(IncludePath) ..\..\import\DirectX9\include;$(IncludePath) ..\..\import\DirectX8\lib;$(LibraryPath) - ..\..\import\DirectX8\lib;$(LibraryPath) $(LibraryPath) ..\..\import\DirectX8\include;$(IncludePath) ..\..\import\DirectX8\lib;$(LibraryPath) @@ -100,11 +80,6 @@ $(Configuration)\$(ProjectName)\ - - Build - - $(Configuration)\$(ProjectName) - Build @@ -144,7 +119,7 @@ Include\Win32\Cxbx;%(AdditionalIncludeDirectories) - legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) + legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;%(AdditionalDependencies) true $(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories) libcmt;%(IgnoreSpecificDefaultLibraries) @@ -175,67 +150,6 @@ Generate version header - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\..\..\bin\debug/Cxbx.tlb - - - - - Disabled - ..\..\src\Common;..\..\src;..\..\src\Common\Win32;%(AdditionalIncludeDirectories);..\..\import\OpenXDK\include;..\..\import\distorm\include;..\..\import\glew-2.0.0\include;..\..\import\subhook\;..\..\import\SDL-mirror\include - NOMINMAX;_WIN32_WINNT=0x0601;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;DEBUG_PACKET;DEBUG_ISOCH;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - false - Level3 - true - ProgramDatabase - true - StreamingSIMDExtensions2 - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - Include\Win32\Cxbx;%(AdditionalIncludeDirectories) - - - legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - true - $(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories) - msvcrt;%(IgnoreSpecificDefaultLibraries) - true - true - Windows - false - - - MachineX86 - false - 0x10000 - true - true - - - true - - - copy $(SolutionDir)..\..\import\glew-2.0.0\bin\Release\Win32\glew32.dll $(TargetDir) - - - - - - - CALL "$(SolutionDir)Version.bat" "$(SolutionDir)..\..\src\Version.h" - Generate version header - - _DEBUG;%(PreprocessorDefinitions) @@ -265,7 +179,7 @@ Include\Win32\Cxbx;%(AdditionalIncludeDirectories) - legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) + legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;%(AdditionalDependencies) true $(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories) libcmt;%(IgnoreSpecificDefaultLibraries) @@ -334,7 +248,7 @@ Include\Win32\Cxbx;%(AdditionalIncludeDirectories) - legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) + legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;%(AdditionalDependencies) true $(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories) libcmt;%(IgnoreSpecificDefaultLibraries) @@ -502,10 +416,8 @@ %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) \cxbx\git\cxbx-ds\resource;%(AdditionalIncludeDirectories) - \cxbx\git\cxbx-ds\resource;%(AdditionalIncludeDirectories) \cxbx\git\cxbx-ds\resource;%(AdditionalIncludeDirectories) %(PreprocessorDefinitions) \cxbx\git\cxbx-ds\resource;%(AdditionalIncludeDirectories) @@ -527,11 +439,9 @@ %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) @@ -539,143 +449,115 @@ %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) false %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) @@ -699,11 +581,9 @@ %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) @@ -713,32 +593,26 @@ %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) @@ -747,21 +621,17 @@ %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) @@ -770,11 +640,9 @@ %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(PreprocessorDefinitions) @@ -785,10 +653,8 @@ %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) @@ -796,30 +662,24 @@ %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) @@ -827,60 +687,48 @@ %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - %(PreprocessorDefinitions) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) diff --git a/import/SDL-mirror b/import/SDL-mirror deleted file mode 160000 index ef5bf55e8..000000000 --- a/import/SDL-mirror +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ef5bf55e83c9d0ccf7a02bc2b08b0d6e46e1b6ef diff --git a/resource/Cxbx.rc b/resource/Cxbx.rc index 8e3d5f3e4..cefc315d6 100644 --- a/resource/Cxbx.rc +++ b/resource/Cxbx.rc @@ -485,7 +485,7 @@ BEGIN POPUP "&LLE (Experimental)", 65535,MFT_STRING,MFS_ENABLED BEGIN MENUITEM "LLE &GPU", ID_EMULATION_LLE_GPU,MFT_STRING,MFS_ENABLED - MENUITEM "LLE &USB", ID_EMULATION_LLE_USB,MFT_STRING,MFS_ENABLED + //MENUITEM "LLE &USB", ID_EMULATION_LLE_USB,MFT_STRING,MFS_ENABLED // Reenable this when LLE USB actually works END POPUP "Hacks", 65535,MFT_STRING,MFS_ENABLED BEGIN diff --git a/src/Common/Input/InputConfig.cpp b/src/Common/Input/InputConfig.cpp index e6bc626dd..d74095ea6 100644 --- a/src/Common/Input/InputConfig.cpp +++ b/src/Common/Input/InputConfig.cpp @@ -33,7 +33,7 @@ // * All rights reserved // * // ****************************************************************** - +#if 0 // Reenable this when LLE USB actually works #define _XBOXKRNL_DEFEXTRN_ // prevent name collisions @@ -483,3 +483,4 @@ SDL2Devices* InputDeviceManager::FindDeviceFromXboxPort(int port) } return nullptr; } +#endif diff --git a/src/Common/Input/InputConfig.h b/src/Common/Input/InputConfig.h index 1d6a28e1d..0f204c401 100644 --- a/src/Common/Input/InputConfig.h +++ b/src/Common/Input/InputConfig.h @@ -36,7 +36,7 @@ #ifndef INPUTCONFIG_H_ #define INPUTCONFIG_H_ - +#if 0 // Reenable this when LLE USB actually works #include #include #include "SDL.h" @@ -124,5 +124,5 @@ class InputDeviceManager }; extern InputDeviceManager* g_InputDeviceManager; - +#endif #endif diff --git a/src/Common/Input/SDL2_Device.cpp b/src/Common/Input/SDL2_Device.cpp index ff481e46d..978c5294d 100644 --- a/src/Common/Input/SDL2_Device.cpp +++ b/src/Common/Input/SDL2_Device.cpp @@ -34,6 +34,7 @@ // * // ****************************************************************** +#if 0 // Reenable this when LLE USB actually works #include "SDL2_Device.h" #include @@ -216,3 +217,5 @@ bool SDL2Devices::ReadButtonState(uint16_t* wButtons, uint8_t* bAnalogButtons, i } return false; } + +#endif diff --git a/src/Common/Input/SDL2_Device.h b/src/Common/Input/SDL2_Device.h index d5bf68d8e..ee666d9a1 100644 --- a/src/Common/Input/SDL2_Device.h +++ b/src/Common/Input/SDL2_Device.h @@ -36,7 +36,7 @@ #ifndef SDL2DEVICE_H_ #define SDL2DEVICE_H_ - +#if 0 // Reenable this when LLE USB actually works #include "InputConfig.h" @@ -119,5 +119,5 @@ class SDL2Devices // indicates that the button state has been updated since the last time it was read std::atomic_bool bStateDirty; }; - +#endif #endif diff --git a/src/Cxbx/ResCxbx.h b/src/Cxbx/ResCxbx.h index 9f0ab17dd..7b5f220aa 100644 --- a/src/Cxbx/ResCxbx.h +++ b/src/Cxbx/ResCxbx.h @@ -244,7 +244,7 @@ #define ID_EMULATION_LLE_APU 40039 #define ID_EMULATION_LLE_GPU 40040 #define ID_EMULATION_LLE_JIT 40041 -#define ID_EMULATION_LLE_USB 40042 +//#define ID_EMULATION_LLE_USB 40042 // Reenable this when LLE USB actually works #define ID_SETTINGS_CONFIG_CONTROLLER 40046 #define ID_SETTINGS_CONFIG_VIDEO 40047 #define ID_SETTINGS_CONFIG_AUDIO 40048 diff --git a/src/Cxbx/WndMain.cpp b/src/Cxbx/WndMain.cpp index 6fea5f356..68bb051e5 100644 --- a/src/Cxbx/WndMain.cpp +++ b/src/Cxbx/WndMain.cpp @@ -1465,14 +1465,14 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP RefreshMenus(); } break; - +#if 0 // Reenable this when LLE USB actually works case ID_EMULATION_LLE_USB: { m_FlagsLLE = m_FlagsLLE ^ LLE_USB; RefreshMenus(); } break; - +#endif case ID_EMULATION_START: if (m_Xbe != nullptr) { @@ -1937,8 +1937,8 @@ void WndMain::RefreshMenus() chk_flag = (m_FlagsLLE & LLE_GPU) ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(settings_menu, ID_EMULATION_LLE_GPU, chk_flag); - chk_flag = (m_FlagsLLE & LLE_USB) ? MF_CHECKED : MF_UNCHECKED; - CheckMenuItem(settings_menu, ID_EMULATION_LLE_USB, chk_flag); + //chk_flag = (m_FlagsLLE & LLE_USB) ? MF_CHECKED : MF_UNCHECKED; // Reenable this when LLE USB actually works + //CheckMenuItem(settings_menu, ID_EMULATION_LLE_USB, chk_flag); chk_flag = (m_DisablePixelShaders) ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(settings_menu, ID_HACKS_DISABLEPIXELSHADERS, chk_flag); @@ -2609,7 +2609,7 @@ void WndMain::DrawLedBitmap(HWND hwnd, bool bdefault) if (FlagsLLE == 0) { sprintf(flagString, "HLE"); } - else if ((FlagsLLE & LLE_GPU) != 0) { + else if ((FlagsLLE & LLE_GPU) == 0) { strcat(flagString, " HLE"); } } diff --git a/src/CxbxKrnl/CxbxKrnl.cpp b/src/CxbxKrnl/CxbxKrnl.cpp index 32199f36d..ffd2103bf 100644 --- a/src/CxbxKrnl/CxbxKrnl.cpp +++ b/src/CxbxKrnl/CxbxKrnl.cpp @@ -1301,7 +1301,7 @@ __declspec(noreturn) void CxbxKrnlInit g_EmuShared->GetFlagsLLE(&CxbxLLE_Flags); bLLE_APU = (CxbxLLE_Flags & LLE_APU) > 0; bLLE_GPU = (CxbxLLE_Flags & LLE_GPU) > 0; - bLLE_USB = (CxbxLLE_Flags & LLE_USB) > 0; + //bLLE_USB = (CxbxLLE_Flags & LLE_USB) > 0; // Reenable this when LLE USB actually works bLLE_JIT = (CxbxLLE_Flags & LLE_JIT) > 0; } @@ -1465,6 +1465,7 @@ __declspec(noreturn) void CxbxKrnlInit InitXboxHardware(HardwareModel::Revision1_5); // TODO : Make configurable if (bLLE_USB) { +#if 0 // Reenable this when LLE USB actually works int ret; g_InputDeviceManager = new InputDeviceManager; ret = g_InputDeviceManager->EnumSdl2Devices(); @@ -1473,6 +1474,7 @@ __declspec(noreturn) void CxbxKrnlInit // Temporary: the device type and bindings should be read from emushared, for now always assume one xbox controller g_InputDeviceManager->ConnectDeviceToXbox(1, MS_CONTROLLER_DUKE); } +#endif } // Now the hardware devices exist, couple the EEPROM buffer to it's device diff --git a/src/CxbxKrnl/HLEIntercept.cpp b/src/CxbxKrnl/HLEIntercept.cpp index 07f0a456b..6cfb73d1c 100644 --- a/src/CxbxKrnl/HLEIntercept.cpp +++ b/src/CxbxKrnl/HLEIntercept.cpp @@ -350,13 +350,14 @@ void EmuUpdateLLEStatus(uint32_t XbLibScan) FlagsLLE ^= LLE_APU; EmuOutputMessage(XB_OUTPUT_MESSAGE_INFO, "Fallback to LLE APU."); } - +#if 0 // Reenable this when LLE USB actually works if ((FlagsLLE & LLE_USB) == false && (XbLibScan & XbSymbolLib_XAPILIB) == 0) { bLLE_USB = true; FlagsLLE ^= LLE_USB; EmuOutputMessage(XB_OUTPUT_MESSAGE_INFO, "Fallback to LLE USB."); - } + } +#endif g_EmuShared->SetFlagsLLE(&FlagsLLE); } diff --git a/src/CxbxKrnl/Timer.cpp b/src/CxbxKrnl/Timer.cpp index 31e87d2a8..4f7a9f642 100644 --- a/src/CxbxKrnl/Timer.cpp +++ b/src/CxbxKrnl/Timer.cpp @@ -114,7 +114,8 @@ void ClockThread(TimerObject* Timer) return; } NewExpireTime = GetNextExpireTime(Timer); - } + } + Sleep(1); // prevent burning the cpu } } diff --git a/src/devices/usb/Hub.cpp b/src/devices/usb/Hub.cpp index d8aa787e2..5fedab005 100644 --- a/src/devices/usb/Hub.cpp +++ b/src/devices/usb/Hub.cpp @@ -46,7 +46,7 @@ namespace xboxkrnl #include "Hub.h" #include "CxbxKrnl\EmuKrnl.h" // For EmuWarning -#define LOG_STR_HUB "Hub" +#define LOG_STR_HUB "Hub:" #define NUM_PORTS 8 @@ -86,6 +86,9 @@ namespace xboxkrnl #define PORT_C_RESET 20 +// Acknowledgment: XQEMU (GPLv2) + + // To avoid including Xbox.h extern USBDevice* g_USB0; @@ -372,7 +375,7 @@ void Hub::UsbHub_HandleControl(XboxDeviceState* dev, USBPacket* p, goto fail; } port = &m_HubState->ports[n]; - DbgPrintf("%s: %s GetPortStatus -> Address 0x%X, wIndex %d, wPortStatus %d, wPortChange %d\n", + DbgPrintf("%s %s GetPortStatus -> Address 0x%X, wIndex %d, wPortStatus %d, wPortChange %d\n", LOG_STR_HUB, __func__, m_HubState->dev.Addr, index, port->wPortStatus, port->wPortChange); data[0] = port->wPortStatus; data[1] = port->wPortStatus >> 8; @@ -397,7 +400,7 @@ void Hub::UsbHub_HandleControl(XboxDeviceState* dev, USBPacket* p, USBHubPort* port; XboxDeviceState* dev; - DbgPrintf("%s: %s SetPortFeature -> Address 0x%X, wIndex %d, Feature %s\n", + DbgPrintf("%s %s SetPortFeature -> Address 0x%X, wIndex %d, Feature %s\n", LOG_STR_HUB, __func__, m_HubState->dev.Addr, index, GetFeatureName(value)); if (n >= NUM_PORTS) { @@ -435,7 +438,7 @@ void Hub::UsbHub_HandleControl(XboxDeviceState* dev, USBPacket* p, unsigned int n = index - 1; USBHubPort *port; - DbgPrintf("%s: %s ClearPortFeature -> Address 0x%X, wIndex %d, Feature %s\n", + DbgPrintf("%s %s ClearPortFeature -> Address 0x%X, wIndex %d, Feature %s\n", LOG_STR_HUB, __func__, m_HubState->dev.Addr, index, GetFeatureName(value)); if (n >= NUM_PORTS) { @@ -522,7 +525,7 @@ void Hub::UsbHub_HandleData(XboxDeviceState* dev, USBPacket* p) p->Status = USB_RET_BABBLE; return; } - DbgPrintf("%s: %s Address 0x%X, Status %d\n", LOG_STR_HUB, __func__, m_HubState->dev.Addr, status); + DbgPrintf("%s %s Address 0x%X, Status %d\n", LOG_STR_HUB, __func__, m_HubState->dev.Addr, status); for (i = 0; i < n; i++) { buf[i] = status >> (8 * i); } diff --git a/src/devices/usb/OHCI.cpp b/src/devices/usb/OHCI.cpp index 880d18262..21577f015 100644 --- a/src/devices/usb/OHCI.cpp +++ b/src/devices/usb/OHCI.cpp @@ -46,7 +46,11 @@ namespace xboxkrnl #include "CxbxKrnl\EmuKrnl.h" // For HalSystemInterrupt #include "CxbxCommon.h" -#define LOG_STR_OHCI "Ohci" +#define LOG_STR_OHCI "Ohci:" + +/* Define these two if you want to dump usb packets */ +//#define DEBUG_ISOCH +//#define DEBUG_PACKET /* These macros are used to access the bits of the various registers */ // HcControl @@ -197,14 +201,7 @@ namespace xboxkrnl #define OHCI_OFFSET_MASK 0xFFF -// Temporary output (useful for debugging LLE USB) -#define DEBUG - -#ifdef DEBUG - -#define TestOut printf - -#endif // DEBUG +// Acknowledgment: XQEMU (GPLv2) OHCI::OHCI(USBDevice* UsbObj) @@ -247,13 +244,10 @@ void OHCI::OHCI_FrameBoundaryWorker() OHCI_HCCA hcca; while (m_bFrameTime) { Sleep(1); } - m_bFrameTime = true; - - TestOut("Frame processing started\n"); - TestOut("HcControl: 0x%X, HcFmNumber: 0x%X, HcInterruptStatus: 0x%X\n", m_Registers.HcControl, m_Registers.HcFmNumber, m_Registers.HcInterruptStatus); + m_bFrameTime = true; if (OHCI_ReadHCCA(m_Registers.HcHCCA, &hcca)) { - EmuWarning("%s: HCCA read error at physical address 0x%X", m_Registers.HcHCCA, LOG_STR_OHCI); + EmuWarning("%s HCCA read error at physical address 0x%X", m_Registers.HcHCCA, LOG_STR_OHCI); OHCI_FatalError(); m_bFrameTime = false; return; @@ -283,13 +277,11 @@ void OHCI::OHCI_FrameBoundaryWorker() m_bFrameTime = false; return; } - - TestOut("HcFmRemaining: 0x%X, HcFmInterval: 0x%X - before\n", m_Registers.HcFmRemaining, m_Registers.HcFmInterval); + // From the standard: "This bit is loaded from the FrameIntervalToggle field of // HcFmInterval whenever FrameRemaining reaches 0." m_Registers.HcFmRemaining = (m_Registers.HcFmInterval & OHCI_FMI_FIT) == 0 ? - m_Registers.HcFmRemaining & ~OHCI_FMR_FRT : m_Registers.HcFmRemaining | OHCI_FMR_FRT; - TestOut("HcFmRemaining: 0x%X, HcFmInterval: 0x%X - after\n", m_Registers.HcFmRemaining, m_Registers.HcFmInterval); + m_Registers.HcFmRemaining & ~OHCI_FMR_FRT : m_Registers.HcFmRemaining | OHCI_FMR_FRT; // Increment frame number m_Registers.HcFmNumber = (m_Registers.HcFmNumber + 1) & 0xFFFF; // prevent overflow @@ -299,7 +291,7 @@ void OHCI::OHCI_FrameBoundaryWorker() if (!m_Registers.HcDoneHead) { // From the standard: "This is set to zero whenever HC writes the content of this // register to HCCA. It also sets the WritebackDoneHead of HcInterruptStatus." - CxbxKrnlCleanup("%s: HcDoneHead is zero but WritebackDoneHead interrupt is not set!\n", LOG_STR_OHCI); + CxbxKrnlCleanup("%s HcDoneHead is zero but WritebackDoneHead interrupt is not set!\n", LOG_STR_OHCI); } if (m_Registers.HcInterrupt & m_Registers.HcInterruptStatus) { @@ -326,13 +318,10 @@ void OHCI::OHCI_FrameBoundaryWorker() // Writeback HCCA if (OHCI_WriteHCCA(m_Registers.HcHCCA, &hcca)) { - EmuWarning("%s: HCCA write error at physical address 0x%X", LOG_STR_OHCI, m_Registers.HcHCCA); + EmuWarning("%s HCCA write error at physical address 0x%X", LOG_STR_OHCI, m_Registers.HcHCCA); OHCI_FatalError(); } - TestOut("Frame processing ended\n"); - TestOut("HcControl: 0x%X, HcFmNumber: 0x%X, HcInterruptStatus: 0x%X\n", m_Registers.HcControl, m_Registers.HcFmNumber, m_Registers.HcInterruptStatus); - m_bFrameTime = false; } @@ -344,8 +333,7 @@ void OHCI::OHCI_FatalError() OHCI_SetInterrupt(OHCI_INTR_UE); OHCI_BusStop(); - DbgPrintf("%s: an unrecoverable error occoured!\n", LOG_STR_OHCI); - TestOut("Fatal error"); + DbgPrintf("%s an unrecoverable error occoured!\n", LOG_STR_OHCI); } bool OHCI::OHCI_ReadHCCA(xbaddr Paddr, OHCI_HCCA* Hcca) @@ -546,7 +534,7 @@ int OHCI::OHCI_ServiceEDlist(xbaddr Head, int Completion) for (current = Head; current; current = next_ed) { if (OHCI_ReadED(current, &ed)) { - EmuWarning("%s: ED read error at physical address 0x%X", LOG_STR_OHCI, current); + EmuWarning("%s ED read error at physical address 0x%X", LOG_STR_OHCI, current); OHCI_FatalError(); return 0; } @@ -623,12 +611,12 @@ int OHCI::OHCI_ServiceTD(OHCI_ED* Ed) addr = Ed->HeadP & OHCI_DPTR_MASK; // See if this TD has already been submitted to the device completion = (addr == m_AsyncTD); - if (completion && !m_AsyncComplete) { // ?? + if (completion && !m_AsyncComplete) { DbgPrintf("Skipping async TD\n"); return 1; } if (OHCI_ReadTD(addr, &td)) { - EmuWarning("%s: TD read error at physical address 0x%X", LOG_STR_OHCI, addr); + EmuWarning("%s TD read error at physical address 0x%X", LOG_STR_OHCI, addr); OHCI_FatalError(); return 0; } @@ -676,7 +664,7 @@ int OHCI::OHCI_ServiceTD(OHCI_ED* Ed) pid = USB_TOKEN_SETUP; break; default: - EmuWarning("%s: bad direction", LOG_STR_OHCI); + EmuWarning("%s bad direction", LOG_STR_OHCI); return 1; } @@ -728,7 +716,7 @@ int OHCI::OHCI_ServiceTD(OHCI_ED* Ed) // From XQEMU: "??? The hardware should allow one active packet per endpoint. // We only allow one active packet per controller. This should be sufficient // as long as devices respond in a timely manner." - DbgPrintf("%s: too many pending packets\n", LOG_STR_OHCI); + DbgPrintf("%s too many pending packets\n", LOG_STR_OHCI); return 1; } dev = OHCI_FindDevice(OHCI_BM(Ed->Flags, ED_FA)); @@ -802,29 +790,29 @@ int OHCI::OHCI_ServiceTD(OHCI_ED* Ed) } else { if (ret >= 0) { - DbgPrintf("%s: Underrun\n", LOG_STR_OHCI); + DbgPrintf("%s Underrun\n", LOG_STR_OHCI); OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_DATAUNDERRUN); } else { switch (ret) { case USB_RET_IOERROR: case USB_RET_NODEV: - DbgPrintf("%s: Received DEV ERROR\n", LOG_STR_OHCI); + DbgPrintf("%s Received DEV ERROR\n", LOG_STR_OHCI); OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_DEVICENOTRESPONDING); break; case USB_RET_NAK: - DbgPrintf("%s: Received NAK\n", LOG_STR_OHCI); + DbgPrintf("%s Received NAK\n", LOG_STR_OHCI); return 1; case USB_RET_STALL: - DbgPrintf("%s: Received STALL\n", LOG_STR_OHCI); + DbgPrintf("%s Received STALL\n", LOG_STR_OHCI); OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_STALL); break; case USB_RET_BABBLE: - DbgPrintf("%s: Received BABBLE\n", LOG_STR_OHCI); + DbgPrintf("%s Received BABBLE\n", LOG_STR_OHCI); OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_DATAOVERRUN); break; default: - DbgPrintf("%s: Bad device response %d\n", LOG_STR_OHCI, ret); + DbgPrintf("%s Bad device response %d\n", LOG_STR_OHCI, ret); OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_UNDEXPETEDPID); OHCI_SET_BM(td.Flags, TD_EC, 3); } @@ -921,16 +909,15 @@ void OHCI::OHCI_StateReset() OHCI_StopEndpoints(); - DbgPrintf("%s: Reset mode event.\n", LOG_STR_OHCI); + DbgPrintf("%s Reset mode event.\n", LOG_STR_OHCI); } void OHCI::OHCI_BusStart() { // Create the EOF timer. Let's try a factor of 50 (1 virtual ms -> 50 real ms) - m_pEOFtimer = Timer_Create(OHCI_FrameBoundaryWrapper, this, 100); - TestOut("Bus start.\n"); + m_pEOFtimer = Timer_Create(OHCI_FrameBoundaryWrapper, this, 100); - DbgPrintf("%s: Operational mode event\n", LOG_STR_OHCI); + DbgPrintf("%s Operational mode event\n", LOG_STR_OHCI); // SOF event OHCI_SOF(true); @@ -942,16 +929,13 @@ void OHCI::OHCI_BusStop() // Delete existing EOF timer Timer_Exit(m_pEOFtimer); } - m_pEOFtimer = nullptr; - TestOut("Bus stop\n"); + m_pEOFtimer = nullptr; } void OHCI::OHCI_SOF(bool bCreate) { // set current SOF time - m_SOFtime = GetTime_NS(m_pEOFtimer); - - TestOut("OHCI_SOF -> m_SOFtime is 0x%X\n", m_SOFtime); + m_SOFtime = GetTime_NS(m_pEOFtimer); // make timer expire at SOF + 1 virtual ms from now if (bCreate) { @@ -965,9 +949,7 @@ void OHCI::OHCI_ChangeState(uint32_t Value) { uint32_t OldState = m_Registers.HcControl & OHCI_CTL_HCFS; m_Registers.HcControl = Value; - uint32_t NewState = m_Registers.HcControl & OHCI_CTL_HCFS; - - TestOut("OldState 0x%X\n", OldState); + uint32_t NewState = m_Registers.HcControl & OHCI_CTL_HCFS; // no state change if (OldState == NewState) { @@ -977,28 +959,24 @@ void OHCI::OHCI_ChangeState(uint32_t Value) switch (NewState) { case Operational: - OHCI_BusStart(); - TestOut("NewState Operational\n"); + OHCI_BusStart(); break; case Suspend: OHCI_BusStop(); - DbgPrintf("%s: Suspend mode event\n", LOG_STR_OHCI); - TestOut("NewState Suspend\n"); + DbgPrintf("%s Suspend mode event\n", LOG_STR_OHCI); break; case Resume: - DbgPrintf("%s: Resume mode event\n", LOG_STR_OHCI); - TestOut("NewState Resume\n"); + DbgPrintf("%s Resume mode event\n", LOG_STR_OHCI); break; case Reset: - OHCI_StateReset(); - TestOut("NewState Reset\n"); + OHCI_StateReset(); break; default: - EmuWarning("%s: Unknown USB mode!", LOG_STR_OHCI); + EmuWarning("%s Unknown USB mode!", LOG_STR_OHCI); } } @@ -1017,136 +995,112 @@ uint32_t OHCI::OHCI_ReadRegister(xbaddr Addr) if (Addr & 3) { // The standard allows only aligned reads to the registers - DbgPrintf("%s: Unaligned read. Ignoring.\n", LOG_STR_OHCI); + DbgPrintf("%s Unaligned read. Ignoring.\n", LOG_STR_OHCI); return ret; } else { switch (Addr >> 2) // read the register { case 0: // HcRevision - ret = m_Registers.HcRevision; - TestOut("m_Registers.HcRevision: 0x%X\n", m_Registers.HcRevision); + ret = m_Registers.HcRevision; break; case 1: // HcControl - ret = m_Registers.HcControl; - TestOut("m_Registers.HcControl: 0x%X\n", m_Registers.HcControl); + ret = m_Registers.HcControl; break; case 2: // HcCommandStatus - ret = m_Registers.HcCommandStatus; - TestOut("m_Registers.HcCommandStatus: 0x%X\n", m_Registers.HcCommandStatus); + ret = m_Registers.HcCommandStatus; break; case 3: // HcInterruptStatus - ret = m_Registers.HcInterruptStatus; - TestOut("m_Registers.HcInterruptStatus: 0x%X\n", m_Registers.HcInterruptStatus); + ret = m_Registers.HcInterruptStatus; break; case 4: // HcInterruptEnable case 5: // HcInterruptDisable - ret = m_Registers.HcInterrupt; - TestOut("m_Registers.HcInterrupt: 0x%X\n", m_Registers.HcInterrupt); + ret = m_Registers.HcInterrupt; break; case 6: // HcHCCA - ret = m_Registers.HcHCCA; - TestOut("m_Registers.HcHCCA: 0x%X\n", m_Registers.HcHCCA); + ret = m_Registers.HcHCCA; break; case 7: // HcPeriodCurrentED - ret = m_Registers.HcPeriodCurrentED; - TestOut("m_Registers.HcPeriodCurrentED: 0x%X\n", m_Registers.HcPeriodCurrentED); + ret = m_Registers.HcPeriodCurrentED; break; case 8: // HcControlHeadED - ret = m_Registers.HcControlHeadED; - TestOut("m_Registers.HcControlHeadED: 0x%X\n", m_Registers.HcControlHeadED); + ret = m_Registers.HcControlHeadED; break; case 9: // HcControlCurrentED - ret = m_Registers.HcControlCurrentED; - TestOut("m_Registers.HcControlCurrentED: 0x%X\n", m_Registers.HcControlCurrentED); + ret = m_Registers.HcControlCurrentED; break; case 10: // HcBulkHeadED - ret = m_Registers.HcBulkHeadED; - TestOut("m_Registers.HcBulkHeadED: 0x%X\n", m_Registers.HcBulkHeadED); + ret = m_Registers.HcBulkHeadED; break; case 11: // HcBulkCurrentED - ret = m_Registers.HcBulkCurrentED; - TestOut("m_Registers.HcBulkCurrentED: 0x%X\n", m_Registers.HcBulkCurrentED); + ret = m_Registers.HcBulkCurrentED; break; case 12: // HcDoneHead - ret = m_Registers.HcDoneHead; - TestOut("m_Registers.HcDoneHead: 0x%X\n", m_Registers.HcDoneHead); + ret = m_Registers.HcDoneHead; break; case 13: // HcFmInterval - ret = m_Registers.HcFmInterval; - TestOut("m_Registers.HcFmInterval: 0x%X\n", m_Registers.HcFmInterval); + ret = m_Registers.HcFmInterval; break; case 14: // HcFmRemaining - ret = OHCI_GetFrameRemaining(); - TestOut("m_Registers.HcFmRemaining: 0x%X\n", m_Registers.HcFmRemaining); + ret = OHCI_GetFrameRemaining(); break; case 15: // HcFmNumber - ret = m_Registers.HcFmNumber; - TestOut("m_Registers.HcFmNumber: 0x%X\n", m_Registers.HcFmNumber); + ret = m_Registers.HcFmNumber; break; case 16: // HcPeriodicStart - ret = m_Registers.HcPeriodicStart; - TestOut("m_Registers.HcPeriodicStart: 0x%X\n", m_Registers.HcPeriodicStart); + ret = m_Registers.HcPeriodicStart; break; case 17: // HcLSThreshold - ret = m_Registers.HcLSThreshold; - TestOut("m_Registers.HcLSThreshold: 0x%X\n", m_Registers.HcLSThreshold); + ret = m_Registers.HcLSThreshold; break; case 18: // HcRhDescriptorA - ret = m_Registers.HcRhDescriptorA; - TestOut("m_Registers.HcRhDescriptorA: 0x%X\n", m_Registers.HcRhDescriptorA); + ret = m_Registers.HcRhDescriptorA; break; case 19: // HcRhDescriptorB - ret = m_Registers.HcRhDescriptorB; - TestOut("m_Registers.HcRhDescriptorB: 0x%X\n", m_Registers.HcRhDescriptorB); + ret = m_Registers.HcRhDescriptorB; break; case 20: // HcRhStatus - ret = m_Registers.HcRhStatus; - TestOut("m_Registers.HcRhStatus: 0x%X\n", m_Registers.HcRhStatus); + ret = m_Registers.HcRhStatus; break; // Always report that the port power is on since the Xbox cannot switch off the electrical current to it case 21: // RhPort 0 - ret = m_Registers.RhPort[0].HcRhPortStatus | OHCI_PORT_PPS; - TestOut("m_Registers.RhPort[0].HcRhPortStatus: 0x%X\n", ret); + ret = m_Registers.RhPort[0].HcRhPortStatus | OHCI_PORT_PPS; break; case 22: // RhPort 1 - ret = m_Registers.RhPort[1].HcRhPortStatus | OHCI_PORT_PPS; - TestOut("m_Registers.RhPort[1].HcRhPortStatus: 0x%X\n", ret); + ret = m_Registers.RhPort[1].HcRhPortStatus | OHCI_PORT_PPS; break; case 23: ret = m_Registers.RhPort[2].HcRhPortStatus | OHCI_PORT_PPS; - TestOut("m_Registers.RhPort[2].HcRhPortStatus: 0x%X\n", ret); break; case 24: ret = m_Registers.RhPort[3].HcRhPortStatus | OHCI_PORT_PPS; - TestOut("m_Registers.RhPort[3].HcRhPortStatus: 0x%X\n", ret); break; default: - EmuWarning("%s: Read register operation with bad offset %u. Ignoring.", LOG_STR_OHCI, Addr >> 2); + EmuWarning("%s Read register operation with bad offset %u. Ignoring.", LOG_STR_OHCI, Addr >> 2); } return ret; } @@ -1156,27 +1110,23 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value) { if (Addr & 3) { // The standard allows only aligned writes to the registers - DbgPrintf("%s: Unaligned write. Ignoring.\n", LOG_STR_OHCI); + DbgPrintf("%s Unaligned write. Ignoring.\n", LOG_STR_OHCI); return; } else { switch (Addr >> 2) { case 0: // HcRevision - // This register is read-only - TestOut("W m_Registers.HcRevision: 0x%X\n", Value); + // This register is read-only break; - case 1: // HcControl - TestOut("W m_Registers.HcControl: 0x%X\n", Value); - OHCI_ChangeState(Value); - TestOut("W m_Registers.HcControl: 0x%X\n", m_Registers.HcControl); + case 1: // HcControl + OHCI_ChangeState(Value); break; case 2: // HcCommandStatus { - // SOC is read-only - TestOut("W m_Registers.HcCommandStatus: 0x%X\n", Value); + // SOC is read-only Value &= ~OHCI_STATUS_SOC; // From the standard: "The Host Controller must ensure that bits written as 1 become set @@ -1186,150 +1136,110 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value) if (m_Registers.HcCommandStatus & OHCI_STATUS_HCR) { // Do a hardware reset OHCI_StateReset(); - } - TestOut("W m_Registers.HcCommandStatus: 0x%X\n", m_Registers.HcCommandStatus); + } } break; - case 3: // HcInterruptStatus - TestOut("W m_Registers.HcInterruptStatus: 0x%X\n", Value); + case 3: // HcInterruptStatus m_Registers.HcInterruptStatus &= ~Value; - OHCI_UpdateInterrupt(); - TestOut("W m_Registers.HcInterruptStatus: 0x%X\n", m_Registers.HcInterruptStatus); + OHCI_UpdateInterrupt(); break; - case 4: // HcInterruptEnable - TestOut("W m_Registers.HcInterruptEnable: 0x%X\n", Value); + case 4: // HcInterruptEnable m_Registers.HcInterrupt |= Value; - OHCI_UpdateInterrupt(); - TestOut("W m_Registers.HcInterruptEnable: 0x%X\n", m_Registers.HcInterrupt); + OHCI_UpdateInterrupt(); break; - case 5: // HcInterruptDisable - TestOut("W m_Registers.HcInterruptDisable: 0x%X\n", Value); + case 5: // HcInterruptDisable m_Registers.HcInterrupt &= ~Value; - OHCI_UpdateInterrupt(); - TestOut("W m_Registers.HcInterruptDisable: 0x%X\n", m_Registers.HcInterrupt); + OHCI_UpdateInterrupt(); break; case 6: // HcHCCA - // The standard says the minimum alignment is 256 bytes and so bits 0 through 7 are always zero - TestOut("W m_Registers.HcHCCA: 0x%X\n", Value); - m_Registers.HcHCCA = Value & OHCI_HCCA_MASK; - TestOut("W m_Registers.HcHCCA: 0x%X\n", m_Registers.HcHCCA); + // The standard says the minimum alignment is 256 bytes and so bits 0 through 7 are always zero + m_Registers.HcHCCA = Value & OHCI_HCCA_MASK; break; case 7: // HcPeriodCurrentED - // This register is read-only - TestOut("W m_Registers.HcPeriodCurrentED: 0x%X\n", Value); + // This register is read-only break; - case 8: // HcControlHeadED - TestOut("W m_Registers.HcControlHeadED: 0x%X\n", Value); - m_Registers.HcControlHeadED = Value & OHCI_DPTR_MASK; - TestOut("W m_Registers.HcControlHeadED: 0x%X\n", m_Registers.HcControlHeadED); + case 8: // HcControlHeadED + m_Registers.HcControlHeadED = Value & OHCI_DPTR_MASK; break; - case 9: // HcControlCurrentED - TestOut("W m_Registers.HcControlCurrentED: 0x%X\n", Value); - m_Registers.HcControlCurrentED = Value & OHCI_DPTR_MASK; - TestOut("W m_Registers.HcControlCurrentED: 0x%X\n", m_Registers.HcControlCurrentED); + case 9: // HcControlCurrentED + m_Registers.HcControlCurrentED = Value & OHCI_DPTR_MASK; break; - case 10: // HcBulkHeadED - TestOut("W m_Registers.HcBulkHeadED: 0x%X\n", Value); - m_Registers.HcBulkHeadED = Value & OHCI_DPTR_MASK; - TestOut("W m_Registers.HcBulkHeadED: 0x%X\n", m_Registers.HcBulkHeadED); + case 10: // HcBulkHeadED + m_Registers.HcBulkHeadED = Value & OHCI_DPTR_MASK; break; - case 11: // HcBulkCurrentED - TestOut("W m_Registers.HcBulkCurrentED: 0x%X\n", Value); - m_Registers.HcBulkCurrentED = Value & OHCI_DPTR_MASK; - TestOut("W m_Registers.HcBulkCurrentED: 0x%X\n", m_Registers.HcBulkCurrentED); + case 11: // HcBulkCurrentED + m_Registers.HcBulkCurrentED = Value & OHCI_DPTR_MASK; break; - case 12: // HcDoneHead - TestOut("W m_Registers.HcDoneHead: 0x%X\n", Value); + case 12: // HcDoneHead // This register is read-only break; case 13: // HcFmInterval - { - TestOut("W m_Registers.HcFmInterval: 0x%X\n", Value); + { if ((Value & OHCI_FMI_FI) != (m_Registers.HcFmInterval & OHCI_FMI_FI)) { - DbgPrintf("%s: Changing frame interval duration. New value is %u\n", LOG_STR_OHCI, Value & OHCI_FMI_FI); + DbgPrintf("%s Changing frame interval duration. New value is %u\n", LOG_STR_OHCI, Value & OHCI_FMI_FI); } - m_Registers.HcFmInterval = Value & ~0xC000; - TestOut("W m_Registers.HcFmInterval: 0x%X\n", m_Registers.HcFmInterval); + m_Registers.HcFmInterval = Value & ~0xC000; } break; case 14: // HcFmRemaining - // This register is read-only - TestOut("W m_Registers.HcFmRemaining: 0x%X\n", Value); + // This register is read-only break; case 15: // HcFmNumber - // This register is read-only - TestOut("W m_Registers.HcFmNumber: 0x%X\n", Value); + // This register is read-only break; - case 16: // HcPeriodicStart - TestOut("W m_Registers.HcPeriodicStart: 0x%X\n", Value); - m_Registers.HcPeriodicStart = Value & 0x3FFF; - TestOut("W m_Registers.HcPeriodicStart: 0x%X\n", m_Registers.HcPeriodicStart); + case 16: // HcPeriodicStart + m_Registers.HcPeriodicStart = Value & 0x3FFF; break; - case 17: // HcLSThreshold - TestOut("W m_Registers.HcLSThreshold: 0x%X\n", Value); - m_Registers.HcLSThreshold = Value & 0xFFF; - TestOut("W m_Registers.HcLSThreshold: 0x%X\n", m_Registers.HcLSThreshold); + case 17: // HcLSThreshold + m_Registers.HcLSThreshold = Value & 0xFFF; break; - case 18: // HcRhDescriptorA - TestOut("W m_Registers.HcRhDescriptorA: 0x%X\n", Value); + case 18: // HcRhDescriptorA m_Registers.HcRhDescriptorA &= ~OHCI_RHA_RW_MASK; - m_Registers.HcRhDescriptorA |= Value & OHCI_RHA_RW_MASK; // ?? - TestOut("W m_Registers.HcRhDescriptorA: 0x%X\n", m_Registers.HcRhDescriptorA); + m_Registers.HcRhDescriptorA |= Value & OHCI_RHA_RW_MASK; // ?? break; - case 19: // HcRhDescriptorB - TestOut("W m_Registers.HcRhDescriptorB: 0x%X\n", Value); + case 19: // HcRhDescriptorB // Don't do anything, the attached devices are all removable and PowerSwitchingMode is always 0 break; - case 20: // HcRhStatus - TestOut("W m_Registers.HcRhStatus: 0x%X\n", Value); - OHCI_SetHubStatus(Value); - TestOut("W m_Registers.HcRhStatus: 0x%X\n", m_Registers.HcRhStatus); + case 20: // HcRhStatus + OHCI_SetHubStatus(Value); break; - case 21: // RhPort 0 - TestOut("W m_Registers.RhPort 0: 0x%X\n", Value); - OHCI_PortSetStatus(0, Value); - TestOut("W m_Registers.RhPort 0: 0x%X\n", m_Registers.RhPort[0].HcRhPortStatus); + case 21: // RhPort 0 + OHCI_PortSetStatus(0, Value); break; - case 22: // RhPort 1 - TestOut("W m_Registers.RhPort 1: 0x%X\n", Value); - OHCI_PortSetStatus(1, Value); - TestOut("W m_Registers.RhPort 1: 0x%X\n", m_Registers.RhPort[1].HcRhPortStatus); + case 22: // RhPort 1 + OHCI_PortSetStatus(1, Value); break; - case 23: // RhPort 2 - TestOut("W m_Registers.RhPort 2: 0x%X\n", Value); + case 23: // RhPort 2 OHCI_PortSetStatus(2, Value); - TestOut("W m_Registers.RhPort 2: 0x%X\n", m_Registers.RhPort[2].HcRhPortStatus); break; - case 24: // RhPort 3 - TestOut("W m_Registers.RhPort 3: 0x%X\n", Value); + case 24: // RhPort 3 OHCI_PortSetStatus(3, Value); - TestOut("W m_Registers.RhPort 3: 0x%X\n", m_Registers.RhPort[3].HcRhPortStatus); break; default: - EmuWarning("%s: Write register operation with bad offset %u. Ignoring.", LOG_STR_OHCI, Addr >> 2); + EmuWarning("%s Write register operation with bad offset %u. Ignoring.", LOG_STR_OHCI, Addr >> 2); } } } @@ -1338,8 +1248,7 @@ void OHCI::OHCI_UpdateInterrupt() { if ((m_Registers.HcInterrupt & OHCI_INTR_MIE) && (m_Registers.HcInterruptStatus & m_Registers.HcInterrupt)) { HalSystemInterrupts[1].Assert(false); - HalSystemInterrupts[1].Assert(true); - TestOut("Fired interrupt -> m_Registers.HcInterruptStatus is 0x%X\n", m_Registers.HcInterruptStatus); + HalSystemInterrupts[1].Assert(true); } } @@ -1406,7 +1315,7 @@ void OHCI::OHCI_SetHubStatus(uint32_t Value) for (i = 0; i < 4; i++) { OHCI_PortPower(i, 0); } - DbgPrintf("%s: powered down all ports\n", LOG_STR_OHCI); + DbgPrintf("%s powered down all ports\n", LOG_STR_OHCI); } if (Value & OHCI_RHS_LPSC) { @@ -1415,7 +1324,7 @@ void OHCI::OHCI_SetHubStatus(uint32_t Value) for (i = 0; i < 4; i++) { OHCI_PortPower(i, 1); } - DbgPrintf("%s: powered up all ports\n", LOG_STR_OHCI); + DbgPrintf("%s powered up all ports\n", LOG_STR_OHCI); } if (Value & OHCI_RHS_DRWE) { @@ -1464,11 +1373,11 @@ void OHCI::OHCI_PortSetStatus(int PortNum, uint32_t Value) OHCI_PortSetIfConnected(PortNum, Value & OHCI_PORT_PES); if (OHCI_PortSetIfConnected(PortNum, Value & OHCI_PORT_PSS)) { - DbgPrintf("%s: port %d: SUSPEND\n", LOG_STR_OHCI, PortNum); + DbgPrintf("%s port %d: SUSPEND\n", LOG_STR_OHCI, PortNum); } if (OHCI_PortSetIfConnected(PortNum, Value & OHCI_PORT_PRS)) { - DbgPrintf("%s: port %d: RESET\n", LOG_STR_OHCI, PortNum); + DbgPrintf("%s port %d: RESET\n", LOG_STR_OHCI, PortNum); m_UsbDevice->USB_DeviceReset(port->UsbPort.Dev); port->HcRhPortStatus &= ~OHCI_PORT_PRS; // ??? Should this also set OHCI_PORT_PESC @@ -1520,9 +1429,7 @@ int OHCI::OHCI_PortSetIfConnected(int i, uint32_t Value) void OHCI::OHCI_Detach(USBPort* Port) { OHCIPort* port = &m_Registers.RhPort[Port->PortIndex]; - uint32_t old_state = port->HcRhPortStatus; - - TestOut("OHCI_Detach\n"); + uint32_t old_state = port->HcRhPortStatus; OHCI_AsyncCancelDevice(Port->Dev); @@ -1538,7 +1445,7 @@ void OHCI::OHCI_Detach(USBPort* Port) port->HcRhPortStatus |= OHCI_PORT_PESC; } - DbgPrintf("%s: Detached port %d\n", LOG_STR_OHCI, Port->PortIndex); + DbgPrintf("%s Detached port %d\n", LOG_STR_OHCI, Port->PortIndex); if (old_state != port->HcRhPortStatus) { OHCI_SetInterrupt(OHCI_INTR_RHSC); @@ -1548,9 +1455,7 @@ void OHCI::OHCI_Detach(USBPort* Port) void OHCI::OHCI_Attach(USBPort* Port) { OHCIPort* port = &m_Registers.RhPort[Port->PortIndex]; - uint32_t old_state = port->HcRhPortStatus; - - TestOut("OHCI_Attach\n"); + uint32_t old_state = port->HcRhPortStatus; // set connect status port->HcRhPortStatus |= OHCI_PORT_CCS | OHCI_PORT_CSC; @@ -1568,7 +1473,7 @@ void OHCI::OHCI_Attach(USBPort* Port) OHCI_SetInterrupt(OHCI_INTR_RD); } - DbgPrintf("%s: Attached port %d\n", LOG_STR_OHCI, Port->PortIndex); + DbgPrintf("%s Attached port %d\n", LOG_STR_OHCI, Port->PortIndex); if (old_state != port->HcRhPortStatus) { OHCI_SetInterrupt(OHCI_INTR_RHSC); @@ -1576,25 +1481,23 @@ void OHCI::OHCI_Attach(USBPort* Port) } void OHCI::OHCI_ChildDetach(XboxDeviceState* child) -{ - TestOut("OHCI_ChildDetach\n"); +{ OHCI_AsyncCancelDevice(child); } void OHCI::OHCI_Wakeup(USBPort* port1) { - TestOut("OHCI_Wakeup\n"); OHCIPort* port = &m_Registers.RhPort[port1->PortIndex]; uint32_t intr = 0; if (port->HcRhPortStatus & OHCI_PORT_PSS) { - DbgPrintf("%s: port %d: wakeup\n", LOG_STR_OHCI, port1->PortIndex); + DbgPrintf("%s port %d: wakeup\n", LOG_STR_OHCI, port1->PortIndex); port->HcRhPortStatus |= OHCI_PORT_PSSC; port->HcRhPortStatus &= ~OHCI_PORT_PSS; intr = OHCI_INTR_RHSC; } // Note that the controller can be suspended even if this port is not if ((m_Registers.HcControl & OHCI_CTL_HCFS) == Suspend) { - DbgPrintf("%s: remote-wakeup: SUSPEND->RESUME\n", LOG_STR_OHCI); + DbgPrintf("%s remote-wakeup: SUSPEND->RESUME\n", LOG_STR_OHCI); // From the standard: "The only interrupts possible in the USBSUSPEND state are ResumeDetected (the // Host Controller will have changed the HostControllerFunctionalState to the USBRESUME state) // and OwnershipChange." @@ -1629,7 +1532,7 @@ void OHCI::OHCI_ProcessLists(int completion) // Only process the control list if it is enabled (HcControl) and has available TD's (HcCommandStatus) if ((m_Registers.HcControl & OHCI_CTL_CLE) && (m_Registers.HcCommandStatus & OHCI_STATUS_CLF)) { if (m_Registers.HcControlCurrentED && m_Registers.HcControlCurrentED != m_Registers.HcControlHeadED) { - DbgPrintf("%s: head 0x%X, current 0x%X\n", + DbgPrintf("%s head 0x%X, current 0x%X\n", LOG_STR_OHCI, m_Registers.HcControlHeadED, m_Registers.HcControlCurrentED); } if (!OHCI_ServiceEDlist(m_Registers.HcControlHeadED, completion)) { @@ -1670,7 +1573,7 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion) addr = ed->HeadP & OHCI_DPTR_MASK; if (OHCI_ReadIsoTD(addr, &iso_td)) { - DbgPrintf("%s: ISO_TD read error at physical address 0x%X\n", LOG_STR_OHCI, addr); + DbgPrintf("%s ISO_TD read error at physical address 0x%X\n", LOG_STR_OHCI, addr); OHCI_FatalError(); return 0; } @@ -1701,13 +1604,13 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion) if (relative_frame_number < 0) { // From the standard: "If the relative frame number is negative, then the current frame is earlier than the 0th frame // of the Isochronous TD and the Host Controller advances to the next ED." - DbgPrintf("%s: ISO_TD R=%d < 0\n", LOG_STR_OHCI, relative_frame_number); + DbgPrintf("%s ISO_TD R=%d < 0\n", LOG_STR_OHCI, relative_frame_number); return 1; } else if (relative_frame_number > frame_count) { // From the standard: "If the relative frame number is greater than // FrameCount, then the Isochronous TD has expired and a error condition exists." - DbgPrintf("%s: ISO_TD R=%d > FC=%d\n", LOG_STR_OHCI, relative_frame_number, frame_count); + DbgPrintf("%s ISO_TD R=%d > FC=%d\n", LOG_STR_OHCI, relative_frame_number, frame_count); OHCI_SET_BM(iso_td.Flags, TD_CC, OHCI_CC_DATAOVERRUN); ed->HeadP &= ~OHCI_DPTR_MASK; ed->HeadP |= (iso_td.NextTD & OHCI_DPTR_MASK); @@ -1748,12 +1651,12 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion) pid = USB_TOKEN_SETUP; break; default: - EmuWarning("%s: Bad direction %d", LOG_STR_OHCI, dir); + EmuWarning("%s Bad direction %d", LOG_STR_OHCI, dir); return 1; } if (!iso_td.BufferPage0 || !iso_td.BufferEnd) { - DbgPrintf("%s: ISO_TD bp 0x%.8X be 0x%.8X\n", LOG_STR_OHCI, iso_td.BufferPage0, iso_td.BufferEnd); + DbgPrintf("%s ISO_TD bp 0x%.8X be 0x%.8X\n", LOG_STR_OHCI, iso_td.BufferPage0, iso_td.BufferEnd); return 1; } @@ -1771,12 +1674,12 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion) if (!(OHCI_BM(start_offset, TD_PSW_CC) & 0xE) || ((relative_frame_number < frame_count) && !(OHCI_BM(next_offset, TD_PSW_CC) & 0xE))) { - DbgPrintf("%s: ISO_TD cc != not accessed 0x%.8x 0x%.8x\n", LOG_STR_OHCI, start_offset, next_offset); + DbgPrintf("%s ISO_TD cc != not accessed 0x%.8x 0x%.8x\n", LOG_STR_OHCI, start_offset, next_offset); return 1; } if ((relative_frame_number < frame_count) && (start_offset > next_offset)) { - printf("%s: ISO_TD start_offset=0x%.8x > next_offset=0x%.8x\n", LOG_STR_OHCI, start_offset, next_offset); + printf("%s ISO_TD start_offset=0x%.8x > next_offset=0x%.8x\n", LOG_STR_OHCI, start_offset, next_offset); return 1; } @@ -1874,12 +1777,12 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion) else { // Handle the error condition if (ret > static_cast(len)) { // Sequence Error - DbgPrintf("%s: DataOverrun %d > %zu\n", LOG_STR_OHCI, ret, len); + DbgPrintf("%s DataOverrun %d > %zu\n", LOG_STR_OHCI, ret, len); OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_CC, OHCI_CC_DATAOVERRUN); OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_SIZE, len); } else if (ret >= 0) { // Sequence Error - DbgPrintf("%s: DataUnderrun %d\n", LOG_STR_OHCI, ret); + DbgPrintf("%s DataUnderrun %d\n", LOG_STR_OHCI, ret); OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_CC, OHCI_CC_DATAUNDERRUN); } else { @@ -1891,12 +1794,12 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion) break; case USB_RET_NAK: // NAK and STALL case USB_RET_STALL: - DbgPrintf("%s: got NAK/STALL %d\n", LOG_STR_OHCI, ret); + DbgPrintf("%s got NAK/STALL %d\n", LOG_STR_OHCI, ret); OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_CC, OHCI_CC_STALL); OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_SIZE, 0); break; default: // Unknown Error - DbgPrintf("%s: Bad device response %d\n", LOG_STR_OHCI, ret); + DbgPrintf("%s Bad device response %d\n", LOG_STR_OHCI, ret); OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_CC, OHCI_CC_UNDEXPETEDPID); break; } diff --git a/src/devices/usb/OHCI.h b/src/devices/usb/OHCI.h index 1734df856..22ea569fd 100644 --- a/src/devices/usb/OHCI.h +++ b/src/devices/usb/OHCI.h @@ -178,8 +178,8 @@ class OHCI int m_DoneCount; // the address of the pending TD xbaddr m_AsyncTD = xbnull; - // ergo720: I think it signals that a TD has been processed completely - bool m_AsyncComplete = 0; + // indicates if there is s a pending asynchronous packet to process + int m_AsyncComplete = 0; // EOF callback wrapper static void OHCI_FrameBoundaryWrapper(void* pVoid); diff --git a/src/devices/usb/USBDevice.cpp b/src/devices/usb/USBDevice.cpp index 91da0c401..37958332a 100644 --- a/src/devices/usb/USBDevice.cpp +++ b/src/devices/usb/USBDevice.cpp @@ -55,6 +55,9 @@ namespace xboxkrnl #define SETUP_STATE_ACK 3 #define SETUP_STATE_PARAM 4 + +// Acknowledgment: XQEMU (GPLv2) + void USBDevice::Init(unsigned int address) { @@ -203,10 +206,9 @@ void USBDevice::USB_PacketSetup(USBPacket* p, int Pid, USBEndpoint* Ep, unsigned p->Stream = Stream; p->Status = USB_RET_SUCCESS; p->ActualLength = 0; - p->Parameter = 0; + p->Parameter = 0ULL; p->ShortNotOK = ShortNotOK; p->IntReq = IntReq; - p->Combined = nullptr; IoVecReset(&p->IoVec); p->State = USB_PACKET_SETUP; } @@ -505,7 +507,7 @@ void USBDevice::DoTokenOut(XboxDeviceState* s, USBPacket* p) void USBDevice::USB_PacketCopy(USBPacket* p, void* ptr, size_t bytes) { - IOVector* iov = p->Combined ? &p->Combined->IoVec : &p->IoVec; + IOVector* iov = &p->IoVec; assert(p->ActualLength >= 0); assert(p->ActualLength + bytes <= iov->Size); diff --git a/src/devices/usb/UsbCommon.h b/src/devices/usb/UsbCommon.h index 3efe6135e..d9c1eb295 100644 --- a/src/devices/usb/UsbCommon.h +++ b/src/devices/usb/UsbCommon.h @@ -205,7 +205,7 @@ struct USBDescIface { uint8_t ndesc; // number of device-specific class descriptors (if any) USBDescOther* descs; // pointer to the extra class descriptors - const USBDescEndpoint* eps; // endpoints supported by this interface + const USBDescEndpoint* eps; // endpoints supported by this interface }; /* @@ -415,12 +415,6 @@ struct XboxDeviceState { const USBDescIface* Ifaces[USB_MAX_INTERFACES]; // interface in use }; -struct USBCombinedPacket { - USBPacket* First; - QTAILQ_HEAD(packets_head, USBPacket) Packets; - IOVector IoVec; -}; - /* Structure used to hold information about an active USB packet */ struct USBPacket { int Pid; // Packet ID (used to identify the type of packet that is being sent) @@ -435,9 +429,7 @@ struct USBPacket { int ActualLength; // number of bytes actually written to DataBuffer // Internal use by the USB layer USBPacketState State; - USBCombinedPacket* Combined; QTAILQ_ENTRY(USBPacket) Queue; - QTAILQ_ENTRY(USBPacket) CombinedEntry; }; struct USBPortOps { diff --git a/src/devices/usb/XidGamepad.cpp b/src/devices/usb/XidGamepad.cpp index 9ca3292fe..0ce592a28 100644 --- a/src/devices/usb/XidGamepad.cpp +++ b/src/devices/usb/XidGamepad.cpp @@ -56,7 +56,11 @@ namespace xboxkrnl #define HID_GET_REPORT 0x01 #define HID_SET_REPORT 0x09 -#define XID_GET_CAPABILITIES 0x01 +#define XID_GET_CAPABILITIES 0x01 + + +// Acknowledgment: XQEMU (GPLv2) + // To avoid including Xbox.h extern USBDevice* g_USB0; @@ -351,6 +355,7 @@ void XidGamepad::UsbXid_HandleControl(XboxDeviceState* dev, USBPacket* p, // If the buffer has the correct length the full input data is transferred." if (value == 0x0100) { if (length <= m_XidState->in_state.bLength) { +#if 0 // Reenable this when LLE USB actually works SDL2Devices* controller = g_InputDeviceManager->FindDeviceFromXboxPort(m_Port); if (controller != nullptr) { controller->ReadButtonState(&m_XidState->in_state.wButtons, m_XidState->in_state.bAnalogButtons, @@ -363,6 +368,7 @@ void XidGamepad::UsbXid_HandleControl(XboxDeviceState* dev, USBPacket* p, p->Status = USB_RET_STALL; assert(0); } +#endif std::memcpy(data, &m_XidState->in_state, m_XidState->in_state.bLength); p->ActualLength = length; } @@ -478,6 +484,7 @@ void XidGamepad::UsbXid_HandleData(XboxDeviceState* dev, USBPacket* p) switch (p->Pid) { case USB_TOKEN_IN: { if (p->Endpoint->Num == 2) { +#if 0 // Reenable this when LLE USB actually works SDL2Devices* controller = g_InputDeviceManager->FindDeviceFromXboxPort(m_Port); if (controller != nullptr) { bool ret; @@ -488,8 +495,10 @@ void XidGamepad::UsbXid_HandleData(XboxDeviceState* dev, USBPacket* p) m_UsbDev->USB_PacketCopy(p, &m_XidState->in_state, m_XidState->in_state.bLength); } else { +#endif p->Status = USB_RET_NAK; } +#if 0 // Reenable this when LLE USB actually works } else { p->Status = USB_RET_STALL; @@ -499,6 +508,7 @@ void XidGamepad::UsbXid_HandleData(XboxDeviceState* dev, USBPacket* p) else { assert(0); } +#endif break; }