| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/inf2cat-expand.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/inf2cat-expand.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/inf2cat-expand.5916.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/inf2cat.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/pcicc32 Package.log |
|---|
| 0,0 → 1,25 |
| Build started 10.2.2014 7:32:23. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" on node 2 (Rebuild target(s)). |
| 1>Inf2Cat: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\inf2cat.exe /os:6_3_x86 /driver:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Debug\pcicc32 Package\\" |
| ......................... |
| Signability test complete. |
| Errors: |
| None |
| Warnings: |
| None |
| Catalog generation complete. |
| C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Debug\pcicc32 Package\pcicc32.cat |
| DriverTestSign: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\signtool.exe sign /ph /sha1 "582A29F728D647902CAA175FC6F560D6BB7011DD" |
| Done Adding Additional Store |
| Successfully signed: C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Debug\pcicc32 Package\pcicc32.cat |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.36 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/inf2cat-expand.5100.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/inf2cat-expand.5916.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/inf2cat.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/inf2cat-expand.5100.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/pcicc32 Package.tlog/pcicc32 Package.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win8.1 Debug|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/signtool.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/signtool.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/signtool.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug |
|---|
| Property changes: |
| Added: svn:global-ignores |
| +*.tlog |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/pcicc32 Package.vcxproj.filters |
|---|
| 0,0 → 1,9 |
| <?xml version="1.0" encoding="utf-8"?> |
| <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| <ItemGroup> |
| <Filter Include="Driver Files"> |
| <UniqueIdentifier>{8E41214B-6785-4CFE-B992-037D68949A14}</UniqueIdentifier> |
| <Extensions>inf;inv;inx;mof;mc;</Extensions> |
| </Filter> |
| </ItemGroup> |
| </Project> |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/inf2cat-expand.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/inf2cat-expand.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/inf2cat-expand.2792.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/inf2cat-expand.2792.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/inf2cat.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/pcicc32 Package.log |
|---|
| 0,0 → 1,20 |
| Build started 10.2.2014 7:32:23. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" on node 2 (Rebuild target(s)). |
| 1>Inf2Cat: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\inf2cat.exe /os:7_x86 /driver:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Release\pcicc32 Package\\" |
| ......................... |
| Signability test complete. |
| Errors: |
| None |
| Warnings: |
| None |
| Catalog generation complete. |
| C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Release\pcicc32 Package\pcicc32.cat |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.32 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/inf2cat-expand.4468.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/inf2cat.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/inf2cat-expand.4468.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/Inf2Cat.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Release/pcicc32 Package.tlog/pcicc32 Package.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win7 Release|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/inf2cat-expand.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/inf2cat-expand.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/inf2cat.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/pcicc32 Package.log |
|---|
| 0,0 → 1,20 |
| Build started 10.2.2014 7:32:22. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" on node 2 (Rebuild target(s)). |
| 1>Inf2Cat: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\inf2cat.exe /os:6_3_x86 /driver:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Release\pcicc32 Package\\" |
| ......................... |
| Signability test complete. |
| Errors: |
| None |
| Warnings: |
| None |
| Catalog generation complete. |
| C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Release\pcicc32 Package\pcicc32.cat |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.29 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/inf2cat.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/Inf2Cat.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/pcicc32 Package.tlog/pcicc32 Package.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win8.1 Release|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/inf2cat-expand.1920.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/inf2cat-expand.1920.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/inf2cat-expand.4048.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Release/inf2cat-expand.4048.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/inf2cat-expand.728.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/inf2cat-expand.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/inf2cat-expand.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/inf2cat.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/pcicc32 Package.log |
|---|
| 0,0 → 1,20 |
| Build started 10.2.2014 7:32:22. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" on node 2 (Rebuild target(s)). |
| 1>Inf2Cat: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\inf2cat.exe /os:8_x86 /driver:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Release\pcicc32 Package\\" |
| ......................... |
| Signability test complete. |
| Errors: |
| None |
| Warnings: |
| None |
| Catalog generation complete. |
| C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Release\pcicc32 Package\pcicc32.cat |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.32 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/inf2cat.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/Inf2Cat.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/pcicc32 Package.tlog/pcicc32 Package.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win8 Release|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/inf2cat-expand.3652.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/inf2cat-expand.3652.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Release/inf2cat-expand.728.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/inf2cat-expand.684.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/inf2cat-expand.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/inf2cat-expand.4492.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/inf2cat-expand.684.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/inf2cat-expand.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/inf2cat-expand.4492.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/inf2cat.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/pcicc32 Package.log |
|---|
| 0,0 → 1,25 |
| Build started 10.2.2014 7:32:24. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" on node 2 (Rebuild target(s)). |
| 1>Inf2Cat: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\inf2cat.exe /os:7_x86 /driver:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Debug\pcicc32 Package\\" |
| ......................... |
| Signability test complete. |
| Errors: |
| None |
| Warnings: |
| None |
| Catalog generation complete. |
| C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Debug\pcicc32 Package\pcicc32.cat |
| DriverTestSign: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\signtool.exe sign /ph /sha1 "582A29F728D647902CAA175FC6F560D6BB7011DD" |
| Done Adding Additional Store |
| Successfully signed: C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Debug\pcicc32 Package\pcicc32.cat |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.35 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/inf2cat.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/Inf2Cat.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/pcicc32 Package.tlog/pcicc32 Package.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win7 Debug|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/signtool.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/signtool.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win7Debug/signtool.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/inf2cat-expand.2780.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/inf2cat-expand.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/inf2cat-expand.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/inf2cat.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/pcicc32 Package.log |
|---|
| 0,0 → 1,25 |
| Build started 10.2.2014 7:32:24. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" on node 2 (Rebuild target(s)). |
| 1>Inf2Cat: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\inf2cat.exe /os:8_x86 /driver:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Debug\pcicc32 Package\\" |
| ......................... |
| Signability test complete. |
| Errors: |
| None |
| Warnings: |
| None |
| Catalog generation complete. |
| C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Debug\pcicc32 Package\pcicc32.cat |
| DriverTestSign: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\signtool.exe sign /ph /sha1 "582A29F728D647902CAA175FC6F560D6BB7011DD" |
| Done Adding Additional Store |
| Successfully signed: C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Debug\pcicc32 Package\pcicc32.cat |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32 Package\pcicc32 Package.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.78 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/inf2cat.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/Inf2Cat.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/pcicc32 Package.tlog/pcicc32 Package.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win8 Debug|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/signtool.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/inf2cat-expand.4172.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/signtool.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/inf2cat-expand.4172.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/inf2cat-expand.2780.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/Win8Debug/signtool.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32 Package/pcicc32 Package.vcxproj |
|---|
| 0,0 → 1,334 |
| <?xml version="1.0" encoding="utf-8"?> |
| <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| <ItemGroup Label="ProjectConfigurations"> |
| <ProjectConfiguration Include="Win8.1 Debug|Win32"> |
| <Configuration>Win8.1 Debug</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8.1 Release|Win32"> |
| <Configuration>Win8.1 Release</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8 Debug|Win32"> |
| <Configuration>Win8 Debug</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8 Release|Win32"> |
| <Configuration>Win8 Release</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win7 Debug|Win32"> |
| <Configuration>Win7 Debug</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win7 Release|Win32"> |
| <Configuration>Win7 Release</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8.1 Debug|x64"> |
| <Configuration>Win8.1 Debug</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8.1 Release|x64"> |
| <Configuration>Win8.1 Release</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8 Debug|x64"> |
| <Configuration>Win8 Debug</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8 Release|x64"> |
| <Configuration>Win8 Release</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win7 Debug|x64"> |
| <Configuration>Win7 Debug</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win7 Release|x64"> |
| <Configuration>Win7 Release</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| </ItemGroup> |
| <PropertyGroup Label="Globals"> |
| <ProjectGuid>{E52219C0-0B63-42B6-BBBD-5718FDE46FDB}</ProjectGuid> |
| <TemplateGuid>{4605da2c-74a5-4865-98e1-152ef136825f}</TemplateGuid> |
| <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> |
| <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion> |
| <Configuration>Win8.1 Debug</Configuration> |
| <Platform Condition="'$(Platform)' == ''">Win32</Platform> |
| <RootNamespace>pcicc32_Package</RootNamespace> |
| </PropertyGroup> |
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'" Label="Configuration"> |
| <TargetVersion>WindowsV6.3</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'" Label="Configuration"> |
| <TargetVersion>WindowsV6.3</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'" Label="Configuration"> |
| <TargetVersion>Windows8</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'" Label="Configuration"> |
| <TargetVersion>Windows8</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|Win32'" Label="Configuration"> |
| <TargetVersion>Windows7</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|Win32'" Label="Configuration"> |
| <TargetVersion>Windows7</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|x64'" Label="Configuration"> |
| <TargetVersion>WindowsV6.3</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|x64'" Label="Configuration"> |
| <TargetVersion>WindowsV6.3</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'" Label="Configuration"> |
| <TargetVersion>Windows8</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|x64'" Label="Configuration"> |
| <TargetVersion>Windows8</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'" Label="Configuration"> |
| <TargetVersion>Windows7</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|x64'" Label="Configuration"> |
| <TargetVersion>Windows7</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Utility</ConfigurationType> |
| <DriverType>Package</DriverType> |
| <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> |
| </PropertyGroup> |
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
| <ImportGroup Label="ExtensionSettings"> |
| </ImportGroup> |
| <ImportGroup Label="PropertySheets"> |
| <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| </ImportGroup> |
| <PropertyGroup Label="UserMacros" /> |
| <PropertyGroup /> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| <EnableDeployment>False</EnableDeployment> |
| <RemoveDriver>True</RemoveDriver> |
| <HardwareIdString /> |
| <CommandLine /> |
| <DeployFiles /> |
| <EnableVerifier>False</EnableVerifier> |
| <AllDrivers>False</AllDrivers> |
| <VerifyProjectOutput>True</VerifyProjectOutput> |
| <VerifyDrivers /> |
| <VerifyFlags>133563</VerifyFlags> |
| </PropertyGroup> |
| <ItemGroup> |
| <FilesToPackage Include="@(Inf->'%(CopyOutput)')" Condition="'@(Inf)'!=''" /> |
| </ItemGroup> |
| <ItemGroup> |
| <ProjectReference Include="..\pcicc32\pcicc32.vcxproj"> |
| <Project>{e355652a-faa5-429d-8308-afea65c58b53}</Project> |
| </ProjectReference> |
| </ItemGroup> |
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
| <ImportGroup Label="ExtensionTargets"> |
| </ImportGroup> |
| </Project> |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/vc120.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.18.506 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/stampinf.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32_v.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32.log |
|---|
| 0,0 → 1,23 |
| Build started 10.2.2014 7:32:18. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" on node 2 (Rebuild target(s)). |
| 1>StampInf: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\stampinf.exe -d "*" -a "x86" -v "*" -k "1.11" -u "1.11.0" -f Win8Release\pcicc32.inf |
| Stamping Win8Release\pcicc32.inf [Version] section with DriverVer=02/10/2014,7.32.18.506 |
| ClCompile: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\CL.exe /c /IWin8Release\ /Zi /nologo /W4 /WX /Ox /Os /Oy- /D _X86_=1 /D i386=1 /D STD_CALL /D _WIN32_WINNT=0x0602 /D WINVER=0x0602 /D WINNT=1 /D NTDDI_VERSION=0x06020000 /D KMDF_VERSION_MAJOR=1 /D KMDF_VERSION_MINOR=11 /GF /Gm- /Zp8 /GS /Gy /fp:precise /Zc:wchar_t- /Zc:forScope- /GR- /Fo"Win8Release\\" /Fd"Win8Release\vc120.pdb" /Gz /wd4603 /wd4627 /wd4986 /wd4987 /wd4996 /FI"C:\Program Files (x86)\Windows Kits\8.1\Include\Shared\warning.h" /analyze- /errorReport:prompt /kernel -cbstring /d1nodatetime /d1import_no_registry /d2AllowCompatibleILVersions /d2Zi+ pcicc32_drv.c pcicc32_i.c pcicc32_io.c pcicc32_v.c |
| pcicc32_drv.c |
| pcicc32_i.c |
| pcicc32_io.c |
| pcicc32_v.c |
| Generating Code... |
| Link: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Release\pcicc32.sys" /VERSION:"6.3" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:\Program Files (x86)\Windows Kits\8.1\lib\win8\KM\x86\BufferOverflowFastFailK.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win8\KM\x86\ntoskrnl.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win8\KM\x86\hal.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win8\KM\x86\wmilib.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfLdr.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfDriverEntry.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Release\pcicc32.pdb" /SUBSYSTEM:NATIVE,"6.02" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Release\pcicc32.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /SAFESEH /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:6.3 /pdbcompress /debugtype:pdata Win8Release\pcicc32_drv.obj |
| Win8Release\pcicc32_i.obj |
| Win8Release\pcicc32_io.obj |
| Win8Release\pcicc32_v.obj |
| pcicc32.vcxproj -> C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Release\pcicc32.sys |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.65 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32_io.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32.tlog/link.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32.tlog/pcicc32.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win8 Release|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32.tlog/CL.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32.tlog/link.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32.tlog/CL.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32.tlog/link.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32.tlog/cl.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/pcicc32_drv.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/stampinf.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release/stampinf.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Release |
|---|
| Property changes: |
| Added: svn:global-ignores |
| +*.obj |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32_i.c |
|---|
| 0,0 → 1,275 |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany -------- |
| // all around irq handling |
| // |
| // (c) 1999-2002 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 01.08.1999 |
| // first release 1.0 AR 17.10.1999 |
| // IoConnectInterrupt, share vector now true AR 04.03.2000 |
| // globalInterruptEnabledStatus() added AR 24.02.2001 |
| // added IRQ handling AR 24.02.2001 |
| // added WITH_IRQS switch to switsch off irqs AR 04.10.2001 |
| // changed making procedure (only VCC > 6.0) AR 30.05.2002 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #define WITH_IRQS // comment out for interrupt handling excludes |
| // ACHTUNG TEST |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <pcicc32_drv.h> |
| #include <pcicc32_i.h> |
| #include <pcicc32.h> |
| #include <pcicc32_local.h> |
| //------------------------------------------------------------------------ |
| // DEFINES |
| // |
| #ifndef DWORD |
| #define DWORD ULONG |
| #endif |
| #ifndef WORD |
| #define WORD USHORT |
| #endif |
| //------------------------------------------------------------------------ |
| // GLOBALS |
| // |
| //------------------------------------------------------------------------ |
| // FUNCTIONS |
| // |
| //------------------------------------------------------------------------ |
| // enable and disable of interrupts |
| // |
| void globalInterruptEnable(PCIADA *pciada) |
| { |
| #ifdef WITH_IRQS |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, ENABLE_PCIADA_IRQS); |
| #endif |
| } |
| void globalInterruptDisable(PCIADA *pciada) |
| { |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, DISABLE_PCIADA_IRQS); |
| } |
| unsigned short globalInterruptEnabledStatus(PCIADA *pciada) |
| { |
| unsigned short wStatus; |
| wStatus = READ_REGISTER_USHORT(pciada->pwIntCSR); |
| if ((wStatus & ENABLE_PCIADA_IRQS) == ENABLE_PCIADA_IRQS) |
| return 1; |
| return 0; |
| } |
| //------------------------------------------------------------------------ |
| // determine which interrupt and evaluates status if appropriate |
| // |
| static int evaluateIrqStatus(PCIADA *pciada, ULONG *dwIrqStatus) |
| { |
| volatile USHORT wCntrl; |
| int result = 0; |
| wCntrl = READ_REGISTER_USHORT(pciada->pwCntrl); |
| if (wCntrl & 0x100) // pciada switched on ? |
| { |
| volatile USHORT wIntCSR = READ_REGISTER_USHORT(pciada->pwIntCSR); |
| if (wIntCSR & 0x0040) // are the interrupts enabled? |
| { |
| if (wIntCSR & 0x20) |
| { |
| // it's the pci interrupt # 2 |
| globalInterruptDisable(pciada); // disable following interrupts |
| // get current Cntrl - and clear interrupt |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, (USHORT)(wCntrl & ~0x0100)); // disable |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, wCntrl); // enable again |
| *dwIrqStatus = CONNECTION_TIMEOUT; |
| result = 1; |
| } |
| if (wIntCSR & 0x04) |
| { |
| globalInterruptDisable(pciada); // disable following interrupts |
| *dwIrqStatus = READ_REGISTER_ULONG(_DWORD_NAF(pciada->pvVirtIfr, 28, 2, 0)); |
| // clear pending interrupt - LAM-FF |
| WRITE_REGISTER_USHORT(_WORD_NAF(pciada->pvVirtIfr, 28, 0, 16), 0); |
| result = 1; |
| } |
| } |
| } |
| return result; |
| } |
| //------------------------------------------------------------------------ |
| // main interrupt handler function |
| // |
| static BOOLEAN irq_service(PKINTERRUPT Interrupt, PVOID ServiceContext) |
| { |
| PCIADA *pciada = (PCIADA *)ServiceContext; |
| UNREFERENCED_PARAMETER(Interrupt); |
| #ifndef WITH_IRQS |
| return FALSE; |
| #endif |
| if (!evaluateIrqStatus(pciada, &pciada->dwIrqStatus)) |
| { |
| // KdPrint(("Not my irq.\n")); |
| return FALSE; |
| } |
| // fire custom deffered procedure call |
| KeInsertQueueDpc(&pciada->kDPCobj, (PVOID)pciada, (PVOID)&pciada->dwIrqStatus); |
| KdPrint(("irq_service(0x%08x)\n", pciada->dwIrqStatus)); |
| return TRUE; |
| } |
| //------------------------------------------------------------------------ |
| // translate interrupt resources for PCIADAs to hardware independent ones |
| // |
| NTSTATUS PCICC32TranslateInterrupt(PDEVICE_OBJECT device_Obj) |
| { |
| int i; |
| NTSTATUS result = STATUS_SUCCESS; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32TranslateInterrupt()\n")); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| KdPrint(("In - Bus:%d, IrqLine:%d\n", pciada->Bus, pciada->Irql)); |
| if (pciada->Irql) |
| { |
| pciada->Vector = HalGetInterruptVector(PCIBus, pciada->Bus, |
| pciada->Irql, pciada->Vector, |
| &pciada->Irql, &pciada->Affinity); |
| KdPrint(("Out - Irql:%d, Vector: %d, Affinity:%d\n", pciada->Irql, pciada->Vector, pciada->Affinity)); |
| } |
| else |
| result = STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT; |
| } |
| return result; |
| } |
| //------------------------------------------------------------------------ |
| // connect service routines to all PCIADA interrupts |
| // |
| NTSTATUS PCICC32ConnectInterrupt(PDEVICE_OBJECT device_Obj) |
| { |
| #ifdef WITH_IRQS |
| int i; |
| NTSTATUS result = STATUS_SUCCESS; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32ConnectInterrupt()\n")); |
| // connect the interrupts to service routines |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| pciada->InterruptObject = NULL; |
| if (pciada->Vector) |
| result = IoConnectInterrupt(&pciada->InterruptObject, |
| irq_service, |
| (PVOID)pciada, |
| NULL, |
| pciada->Vector, |
| pciada->Irql, |
| pciada->Irql, |
| LevelSensitive, |
| TRUE, |
| pciada->Affinity, |
| FALSE); |
| KdPrint(("irq_service:%p, VirtVect:%d, Irql:%d, hIrql:%d, Aff:0x%08x, Status:0x%08x\n", |
| irq_service, pciada->Vector, pciada->Irql, |
| pciada->Irql, pciada->Affinity, result)); |
| if (result != STATUS_SUCCESS) |
| break; |
| } |
| if (result == STATUS_SUCCESS) |
| { |
| KdPrint(("PCICC32ConnectInterrupt() OK.\n")); |
| } |
| return result; |
| #else |
| return STATUS_SUCCESS; |
| #endif |
| } |
| //------------------------------------------------------------------------ |
| // dis-connect service routines to all PCIADA interrupts |
| // |
| NTSTATUS PCICC32DisConnectInterrupt(PDEVICE_OBJECT device_Obj) |
| { |
| #ifdef WITH_IRQS |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("DisConnectInterrupt()\n")); |
| // dis connect the interrupts to service routines |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| KdPrint(("IrqObj:0x%08x\n", pciada->InterruptObject)); |
| if (pciada->InterruptObject) |
| { |
| IoDisconnectInterrupt(pciada->InterruptObject); |
| pciada->InterruptObject = 0; |
| } |
| } |
| #endif |
| return STATUS_SUCCESS; |
| } |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32.vcxproj |
|---|
| 0,0 → 1,300 |
| <?xml version="1.0" encoding="utf-8"?> |
| <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| <ItemGroup Label="ProjectConfigurations"> |
| <ProjectConfiguration Include="Win8.1 Debug|Win32"> |
| <Configuration>Win8.1 Debug</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8.1 Release|Win32"> |
| <Configuration>Win8.1 Release</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8 Debug|Win32"> |
| <Configuration>Win8 Debug</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8 Release|Win32"> |
| <Configuration>Win8 Release</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win7 Debug|Win32"> |
| <Configuration>Win7 Debug</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win7 Release|Win32"> |
| <Configuration>Win7 Release</Configuration> |
| <Platform>Win32</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8.1 Debug|x64"> |
| <Configuration>Win8.1 Debug</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8.1 Release|x64"> |
| <Configuration>Win8.1 Release</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8 Debug|x64"> |
| <Configuration>Win8 Debug</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win8 Release|x64"> |
| <Configuration>Win8 Release</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win7 Debug|x64"> |
| <Configuration>Win7 Debug</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| <ProjectConfiguration Include="Win7 Release|x64"> |
| <Configuration>Win7 Release</Configuration> |
| <Platform>x64</Platform> |
| </ProjectConfiguration> |
| </ItemGroup> |
| <PropertyGroup Label="Globals"> |
| <ProjectGuid>{E355652A-FAA5-429D-8308-AFEA65C58B53}</ProjectGuid> |
| <TemplateGuid>{1bc93793-694f-48fe-9372-81e2b05556fd}</TemplateGuid> |
| <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> |
| <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion> |
| <Configuration>Win8.1 Debug</Configuration> |
| <Platform Condition="'$(Platform)' == ''">Win32</Platform> |
| <RootNamespace>pcicc32</RootNamespace> |
| </PropertyGroup> |
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'" Label="Configuration"> |
| <TargetVersion>WindowsV6.3</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'" Label="Configuration"> |
| <TargetVersion>WindowsV6.3</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'" Label="Configuration"> |
| <TargetVersion>Windows8</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'" Label="Configuration"> |
| <TargetVersion>Windows8</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|Win32'" Label="Configuration"> |
| <TargetVersion>Windows7</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|Win32'" Label="Configuration"> |
| <TargetVersion>Windows7</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|x64'" Label="Configuration"> |
| <TargetVersion>WindowsV6.3</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|x64'" Label="Configuration"> |
| <TargetVersion>WindowsV6.3</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'" Label="Configuration"> |
| <TargetVersion>Windows8</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|x64'" Label="Configuration"> |
| <TargetVersion>Windows8</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'" Label="Configuration"> |
| <TargetVersion>Windows7</TargetVersion> |
| <UseDebugLibraries>true</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|x64'" Label="Configuration"> |
| <TargetVersion>Windows7</TargetVersion> |
| <UseDebugLibraries>false</UseDebugLibraries> |
| <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> |
| <ConfigurationType>Driver</ConfigurationType> |
| <DriverType>KMDF</DriverType> |
| </PropertyGroup> |
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
| <ImportGroup Label="ExtensionSettings"> |
| </ImportGroup> |
| <ImportGroup Label="PropertySheets"> |
| <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
| </ImportGroup> |
| <PropertyGroup Label="UserMacros" /> |
| <PropertyGroup /> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|Win32'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|x64'"> |
| <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> |
| </PropertyGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'"> |
| <ClCompile> |
| <WppEnabled>false</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'"> |
| <ClCompile> |
| <WppEnabled>false</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'"> |
| <ClCompile> |
| <WppEnabled>false</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'"> |
| <ClCompile> |
| <WppEnabled>false</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|Win32'"> |
| <ClCompile> |
| <WppEnabled>false</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|Win32'"> |
| <ClCompile> |
| <WppEnabled>false</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|x64'"> |
| <ClCompile> |
| <WppEnabled>true</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|x64'"> |
| <ClCompile> |
| <WppEnabled>true</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'"> |
| <ClCompile> |
| <WppEnabled>true</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|x64'"> |
| <ClCompile> |
| <WppEnabled>true</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'"> |
| <ClCompile> |
| <WppEnabled>true</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|x64'"> |
| <ClCompile> |
| <WppEnabled>true</WppEnabled> |
| <WppScanConfigurationData Condition="'%(ClCompile. ScanConfigurationData)' == ''">trace.h</WppScanConfigurationData> |
| <WppKernelMode>true</WppKernelMode> |
| </ClCompile> |
| </ItemDefinitionGroup> |
| <ItemGroup> |
| <Inf Include="pcicc32.inf" /> |
| </ItemGroup> |
| <ItemGroup> |
| <FilesToPackage Include="$(TargetPath)" /> |
| <FilesToPackage Include="@(Inf->'%(CopyOutput)')" Condition="'@(Inf)'!=''" /> |
| </ItemGroup> |
| <ItemGroup> |
| <ClInclude Include="guid.h" /> |
| <ClInclude Include="pcicc32.h" /> |
| <ClInclude Include="pcicc32_drv.h" /> |
| <ClInclude Include="pcicc32_i.h" /> |
| <ClInclude Include="pcicc32_io.h" /> |
| <ClInclude Include="pcicc32_local.h" /> |
| <ClInclude Include="pcicc32_v.h" /> |
| </ItemGroup> |
| <ItemGroup> |
| <ClCompile Include="pcicc32_drv.c" /> |
| <ClCompile Include="pcicc32_i.c" /> |
| <ClCompile Include="pcicc32_io.c" /> |
| <ClCompile Include="pcicc32_v.c" /> |
| </ItemGroup> |
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
| <ImportGroup Label="ExtensionTargets"> |
| </ImportGroup> |
| </Project> |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32_drv.c |
|---|
| 0,0 → 1,1063 |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 (CAMAC) interface of ARW Elektronik, Germany -- |
| // the main body of the driver |
| // |
| // (c) 2000-2002 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistribute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started out of pcivme sources AR 25.03.2000 |
| // added IRQ handling AR 24.02.2001 |
| // Added AUTOREAD functionality AR 17.03.2001 |
| // Added LCR_READ AR 31.03.2001 |
| // resource allocation registers idle entries too AR 25.11.2001 |
| // changed making procedure (only VCC > 6.0) AR 30.05.2002 |
| // totally rearanged resource alloc for WIN2000 AR 01.06.2002 |
| // version 2.14 eleminates PLXBUG in WIN2000 AR 05.06.2002 |
| // added KeSynchronizeExecution for interrupt sync AR 16.06.2002 |
| // |
| //------------------------------------------------------------------------ |
| // DEFINES |
| // |
| #ifndef DWORD |
| #define DWORD ULONG |
| #endif |
| #ifndef WORD |
| #define WORD USHORT |
| #endif |
| #define CTL_INDEX(x) ((x >> 2) & 0xFF) // get user control code as index |
| #define RESOURCE_ENTRY_COUNT 6 // WIN2000 forces to claim all entries |
| #define DOS_DEVICE_NAME L"\\DosDevices\\PCICC32:" |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <devioctl.h> |
| // #include <wdm.h> |
| #include <pcicc32_drv.h> |
| #include <pcicc32.h> |
| #include <pcicc32_v.h> |
| #include <pcicc32_i.h> |
| #include <pcicc32_io.h> |
| //------------------------------------------------------------------------ |
| // TYPEDEFS |
| // |
| typedef struct |
| { |
| FILE_OBJ *file_obj; |
| PCIADA *pciada; |
| PVOID pOutputBuffer; |
| PVOID pInputBuffer; |
| ULONG Address; |
| DWORD Length; |
| } SYNC_CONTEXT; |
| //------------------------------------------------------------------------ |
| // GLOBALS |
| // |
| //------------------------------------------------------------------------ |
| // FUNCTIONS |
| // |
| //------------------------------------------------------------------------ |
| // for debug only - print interrupt line |
| // |
| #if DBG |
| void PrintInterruptLine(int Bus, int Slot) |
| { |
| PCI_COMMON_CONFIG pci_config; |
| HalGetBusData( PCIConfiguration, // Bustype |
| Bus, // PCI-Busnumber |
| Slot, // Slotnumber |
| (PVOID) &(pci_config), // Pointer for the PCI-Information |
| sizeof(PCI_COMMON_CONFIG)); |
| KdPrint(("Irql: %d\n", pci_config.u.type0.InterruptLine)); |
| } |
| #endif |
| //------------------------------------------------------------------------ |
| // get the cc32 number out of the filename |
| // |
| NTSTATUS InterpreteFileName(PCHAR name, int *nCC32) |
| { |
| char *ptr = name; |
| char *n = "cc32_"; |
| int h = -1; // high part |
| int l = -1; // low part |
| if (*ptr == '\\') ptr++; // jump over leading ... |
| while (*n) // compare the basename |
| if (*n == tolower(*ptr)) |
| { |
| n++; |
| ptr++; |
| } |
| else |
| return STATUS_NO_SUCH_FILE; |
| h = *ptr - '0'; // get the number |
| ptr++; |
| l = *ptr - '0'; |
| if (*ptr == 0) // still over the end ?? |
| { |
| l = h; |
| h = 0; |
| } |
| else |
| ptr++; |
| if ((h < 0) || (l < 0) || (*ptr != 0)) // anything wrong ?? |
| return STATUS_NO_SUCH_FILE; |
| *nCC32 = (h * 10) + l; // calculate number |
| if (*nCC32 >= PCICC32_MAX_CC32) // out of range ?? |
| return STATUS_NO_SUCH_FILE; |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // the ultimate driver unload |
| VOID PCICC32Unload(PDRIVER_OBJECT driverObj) |
| { |
| int i; |
| UNICODE_STRING symbol_name; |
| DEVICE_EXT *ext = (DEVICE_EXT*)(driverObj->DeviceObject->DeviceExtension); |
| int nPCIADAs = ext->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32Unload()\n")); |
| switch (ext->nInitState) |
| { |
| case 8: |
| case 7: |
| case 6: |
| // stop interrupts and shut off |
| PCICC32DeInitPCIADAs(driverObj->DeviceObject); |
| PCICC32DisConnectInterrupt(driverObj->DeviceObject); |
| case 5: |
| // KeInitializeDpc has no counterpart |
| case 4: |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &ext->pciada[i]; |
| if (pciada->pvVirtLcr != NULL) |
| MmUnmapIoSpace(pciada->pvVirtLcr, LCR_SPACE); |
| if (pciada->pvVirtIfr != NULL) |
| MmUnmapIoSpace(pciada->pvVirtIfr, IFR_SPACE); |
| } |
| case 3: |
| // HalGetInterruptVector has no counterpart |
| case 2: |
| // HalTranslateBusAddress has no counterpart |
| case 1: |
| PCICC32FreeResources(driverObj->DeviceObject); |
| default: |
| case 0: |
| RtlInitUnicodeString(&symbol_name, DOS_DEVICE_NAME); |
| // delete the symbolicLink in the registry |
| IoDeleteSymbolicLink( &symbol_name); |
| // delete the deviceObject |
| IoDeleteDevice(driverObj->DeviceObject); |
| } |
| KdPrint(("PCICC32Unload() OK.\n")); |
| } |
| //------------------------------------------------------------------------ |
| // called at CreateFile() |
| NTSTATUS PCICC32Open(PDEVICE_OBJECT deviceObj, PIRP Irp) |
| { |
| NTSTATUS result = STATUS_SUCCESS; |
| ANSI_STRING name; |
| int nCC32; |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(deviceObj->DeviceExtension); |
| PCIADA *pciada; |
| FILE_OBJ *file_obj; |
| name.Buffer = NULL; |
| name.MaximumLength = 80; |
| result = RtlUnicodeStringToAnsiString(&name, &(Irp->Tail.Overlay.OriginalFileObject->FileName), TRUE); |
| if (result != STATUS_SUCCESS) goto fin; |
| KdPrint(("PCICC32Open(%s)\n", name.Buffer)); |
| result = InterpreteFileName(name.Buffer, &nCC32); |
| if (result != STATUS_SUCCESS) goto fin; |
| KdPrint(("PCICC32Open(%d)\n", nCC32)); |
| RtlFreeAnsiString(&name); |
| file_obj = (FILE_OBJ *)ExAllocatePool(NonPagedPool, sizeof(FILE_OBJ)); |
| if (file_obj == (FILE_OBJ *)NULL) |
| { |
| result = STATUS_NO_MEMORY; |
| goto fin; |
| } |
| file_obj->uwAssociatedCC32 = (USHORT) nCC32; |
| Irp->Tail.Overlay.OriginalFileObject->FsContext = (PVOID)file_obj; |
| result = PCICC32ScanCC32(deviceObj); |
| if (result != STATUS_SUCCESS) goto fin; |
| for (i = 0; i < pDevExt->nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| if (pciada->wModuleNumber == nCC32) |
| { |
| pDevExt->cc32[nCC32] = pciada; // create association |
| pciada->dwLinkCount++; |
| enableCC32(pciada); |
| break; |
| } |
| } |
| if (i >= pDevExt->nPCIADAs) |
| { |
| result = STATUS_NO_SUCH_FILE; |
| goto fin; |
| } |
| fin: |
| Irp->IoStatus.Status = result; |
| Irp->IoStatus.Information = 0; |
| IoCompleteRequest(Irp, IO_NO_INCREMENT); |
| return result; |
| } |
| //------------------------------------------------------------------------ |
| // called at close() |
| NTSTATUS PCICC32Close(PDEVICE_OBJECT deviceObj, PIRP Irp) |
| { |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(deviceObj->DeviceExtension); |
| FILE_OBJ *file_obj = (FILE_OBJ *)NULL; |
| PCIADA *pciada; |
| file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| KdPrint(("PCICC32Close(%d)\n", file_obj->uwAssociatedCC32)); |
| if (file_obj != (FILE_OBJ *)NULL) |
| { |
| pciada = pDevExt->cc32[file_obj->uwAssociatedCC32]; |
| pciada->dwLinkCount--; |
| // disable interrupts when closing |
| if (pciada->pIrqControlFile == file_obj) |
| { |
| pciada->pIrqControlFile = (FILE_OBJ *)NULL; |
| globalInterruptDisable(pciada); |
| } |
| // cancel any blocking Irp origin from this file |
| if (file_obj->blockingIrp != (PIRP)NULL) |
| file_obj->blockingIrp = (PIRP)NULL; |
| if (pciada->pBlockingIrp == &file_obj->blockingIrp) |
| pciada->pBlockingIrp = (PIRP *)NULL; |
| if (!pciada->dwLinkCount) |
| disableCC32(pciada); |
| ExFreePool(file_obj); |
| Irp->Tail.Overlay.OriginalFileObject->FsContext = (FILE_OBJ *)NULL; |
| } |
| KdPrint(("PCICC32Close OK\n")); |
| Irp->IoStatus.Status = STATUS_SUCCESS; |
| Irp->IoStatus.Information = 0; |
| IoCompleteRequest(Irp, IO_NO_INCREMENT); |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // called at |
| NTSTATUS PCICC32Shutdown(PDEVICE_OBJECT deviceObj, PIRP irp) |
| { |
| UNREFERENCED_PARAMETER(irp); |
| KdPrint(("PCICC32Shutdown()\n")); |
| // deinit interfaces and interrupts |
| PCICC32DeInitPCIADAs(deviceObj); |
| KdPrint(("PCICC32Shutdown() OK\n")); |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // called at ioctl() |
| NTSTATUS PCICC32DeviceControl(PDEVICE_OBJECT deviceObj, PIRP Irp) |
| { |
| PIO_STACK_LOCATION IrpStack; |
| int nIndex; |
| IrpStack = IoGetCurrentIrpStackLocation(Irp); |
| nIndex = CTL_INDEX(IrpStack->Parameters.DeviceIoControl.IoControlCode); |
| KdPrint(("PCICC32DeviceControl(%d / 0x%08x)\n", nIndex, Irp->Tail.Overlay.OriginalFileObject)); |
| if (nIndex > CTL_INDEX(PCICC32_LAST_CTL_CODE)) |
| { |
| KdPrint(("LastIndex(%d)\n", CTL_INDEX(PCICC32_LAST_CTL_CODE))); |
| Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; |
| Irp->IoStatus.Information = 0; |
| IoCompleteRequest(Irp,IO_NO_INCREMENT); |
| KdPrint(("PCICC32DeviceControl() FAIL.\n")); |
| return STATUS_UNSUCCESSFUL; |
| } |
| return ioctl[nIndex](deviceObj, Irp, IrpStack); |
| } |
| //------------------------------------------------------------------------ |
| // called at read() |
| static BOOLEAN PCICC32Read_kernel(PVOID pvContext) |
| { |
| register SYNC_CONTEXT *context = (SYNC_CONTEXT *)pvContext; |
| register ULONG i = 0; |
| USHORT wCntrl; |
| wCntrl = READ_REGISTER_USHORT(context->pciada->pwCntrl); |
| if (context->file_obj->wBlockTransfer & AUTOREAD) |
| { |
| wCntrl &= ~0x0004; // enable autoread - set bit to 0 |
| WRITE_REGISTER_USHORT(context->pciada->pwCntrl, wCntrl); |
| } |
| // do the read --- |
| if (context->file_obj->wBlockTransfer & UNTIL_NOT_Q) |
| { |
| // read first time to get Q information |
| register ULONG tempBuffer = READ_REGISTER_ULONG((ULONG *)context->Address); |
| if (context->file_obj->wAccessType == WORD_ACCESS) |
| { |
| PUSHORT pwBuffer = (PUSHORT)context->pOutputBuffer; |
| PUSHORT pwBufEnd = (PUSHORT)((PUCHAR)context->pOutputBuffer + context->Length); |
| while ((tempBuffer & 0x80000000) && (pwBuffer < pwBufEnd)) |
| { |
| *pwBuffer++ = (USHORT)tempBuffer; |
| tempBuffer = READ_REGISTER_ULONG((ULONG *)context->Address); // read the same address multiple times as long to get Q |
| i++; |
| } |
| } |
| else |
| { |
| // LONG_ACCESS |
| PULONG pdwBuffer = (PULONG)context->pOutputBuffer; |
| PULONG pdwBufEnd = (PULONG)((PUCHAR)context->pOutputBuffer + context->Length); |
| while ((tempBuffer & 0x80000000) && (pdwBuffer < pdwBufEnd)) |
| { |
| *pdwBuffer++ = tempBuffer; |
| tempBuffer = READ_REGISTER_ULONG((ULONG *)context->Address); // read the same address multiple times as long to get Q |
| i++; |
| } |
| } |
| i *= context->file_obj->wAccessType; |
| KdPrint(("UNTIL_NOT_Q, 0x%08x bytes read\n", i)); |
| } |
| else // no UNTIL_NOT_Q |
| { |
| while (i < context->Length) |
| { |
| context->file_obj->fRead((void *)((PUCHAR)context->pOutputBuffer + i), (void *)context->Address); // read the same address multiple times |
| i += context->file_obj->wAccessType; |
| } |
| } |
| // disable autoread unconditionally - set bit to 1 |
| wCntrl |= 0x0004; |
| WRITE_REGISTER_USHORT(context->pciada->pwCntrl, wCntrl); |
| context->Length = i; |
| return TRUE; |
| } |
| NTSTATUS PCICC32Read(PDEVICE_OBJECT device_Obj, PIRP Irp) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp); |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| SYNC_CONTEXT context; |
| context.file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| context.pciada = pDevExt->cc32[context.file_obj->uwAssociatedCC32]; |
| context.pOutputBuffer = ((void *)(MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority))); |
| context.Address = IrpStack->Parameters.Read.ByteOffset.LowPart; |
| context.Length = 0; |
| KdPrint(("PCICC32Read(%d)\n", context.file_obj->uwAssociatedCC32)); |
| if (context.Address > IFR_SPACE) |
| Status = STATUS_ACCESS_VIOLATION; |
| else |
| { |
| // do here in between what has to be done ----------------- |
| context.Length = IrpStack->Parameters.Read.Length; |
| KdPrint(("Address = 0x%08x, Length = 0x%08x\n", context.Address, context.Length)); |
| context.Address = (ULONG)context.pciada->pvVirtIfr + context.Address; |
| KeSynchronizeExecution(context.pciada->InterruptObject, PCICC32Read_kernel, &context); |
| // do here in between what has to be done end ------------- |
| } |
| Irp->IoStatus.Status = Status; |
| Irp->IoStatus.Information = context.Length; |
| IoCompleteRequest(Irp,IO_NO_INCREMENT); |
| KdPrint(("PCICC32Read(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // called at write() |
| static BOOLEAN PCICC32Write_kernel(PVOID pvContext) |
| { |
| register SYNC_CONTEXT *context = (SYNC_CONTEXT *)pvContext; |
| register ULONG i = 0; |
| // do the write --- |
| while (i < context->Length) |
| { |
| context->file_obj->fWrite((void *)context->Address, (void *)((PUCHAR)context->pInputBuffer + i)); // write the same address multiple times |
| i += context->file_obj->wAccessType; |
| } |
| context->Length = i; |
| return TRUE; |
| } |
| NTSTATUS PCICC32Write(PDEVICE_OBJECT device_Obj, PIRP Irp) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp); |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| SYNC_CONTEXT context; |
| context.file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| context.pciada = pDevExt->cc32[context.file_obj->uwAssociatedCC32]; |
| context.pInputBuffer = ((void *)(MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority))); |
| context.Address = IrpStack->Parameters.Read.ByteOffset.LowPart; |
| context.Length = 0; |
| KdPrint(("PCICC32Write(%d)\n", context.file_obj->uwAssociatedCC32)); |
| if (context.Address > IFR_SPACE) |
| Status = STATUS_ACCESS_VIOLATION; |
| else |
| { |
| // register ULONG i = 0; |
| // do here in between what has to be done ----------------- |
| context.Length = IrpStack->Parameters.Read.Length; |
| KdPrint(("Address = 0x%08x, Length = 0x%08x\n", context.Address, context.Length)); |
| context.Address = (ULONG)context.pciada->pvVirtIfr + context.Address; |
| KeSynchronizeExecution(context.pciada->InterruptObject, PCICC32Write_kernel, &context); |
| // do here in between what has to be done end ------------- |
| } |
| Irp->IoStatus.Status = Status; |
| Irp->IoStatus.Information = context.Length; |
| IoCompleteRequest(Irp,IO_NO_INCREMENT); |
| KdPrint(("PCICC32Write(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // search for pciada's |
| // |
| NTSTATUS SearchDevices(PDEVICE_OBJECT device_Obj) |
| { |
| PCI_SLOT_NUMBER SlotNumber; |
| PCI_COMMON_CONFIG pci_config; |
| PCIADA *pciada; |
| ULONG length; |
| int *found; |
| int i,j,k; |
| KdPrint(("SearchDevices()\n")); |
| // prepare structures ---------------------------------------- |
| found = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->nPCIADAs; |
| *found = 0; |
| for (i = 0; i < PCICC32_MAX_PCIADA; i++) |
| { |
| pciada = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->pciada[i]; |
| pciada->Bus = -1; |
| pciada->Slot.u.AsULONG = 0xFFFFFFFF; |
| } |
| // search for pciada's --------------------------------------- |
| SlotNumber.u.bits.Reserved = 0; |
| for (j = 0; j < PCI_MAX_BUSES; j++) |
| { |
| for (i = 0; i < PCI_MAX_DEVICES; i++) |
| { |
| SlotNumber.u.bits.DeviceNumber = i; |
| for (k = 0; k < PCI_MAX_FUNCTION; k++) |
| { |
| SlotNumber.u.bits.FunctionNumber = k; |
| length = HalGetBusData( PCIConfiguration, // Bustype |
| j, // PCI-Busnumber |
| SlotNumber.u.AsULONG, // Slotnumber |
| (PVOID) &(pci_config), // Pointer for the PCI-Information |
| sizeof(PCI_COMMON_CONFIG) ); |
| if ((pci_config.VendorID == PCICC32_VENDOR_ID) && |
| (pci_config.DeviceID == PCICC32_DEVICE_ID) && |
| (pci_config.u.type0.SubSystemID == PCICC32_SUBSYS_ID) && |
| (pci_config.u.type0.SubVendorID == PCICC32_SUBVEN_ID) && |
| (pci_config.u.type0.BaseAddresses[3])) |
| { |
| pciada = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->pciada[*found]; |
| memcpy(&pciada->PCIDevice, &pci_config, sizeof(pci_config)); |
| pciada->Slot = SlotNumber; |
| pciada->Bus = j; |
| KdPrint(("PCIADA found @ Bus/Slot %d/%d.\n", pciada->Bus, pciada->Slot.u.AsULONG)); |
| (*found)++; |
| if (*found >= PCICC32_MAX_PCIADA) return STATUS_SUCCESS; |
| } |
| } |
| } |
| } |
| return STATUS_SUCCESS; |
| } |
| //--------------------------------------------------------------- |
| // function to call for bug fix of PLX9050 build in bug |
| // |
| NTSTATUS PLX9050BugFix(PDEVICE_OBJECT device_Obj) |
| { |
| DEVICE_EXT *DeviceExtension = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int i; |
| ULONG dwData; |
| PCIADA *pciada; |
| KdPrint(("PLX9050BugFix()\n")); |
| for (i = 0; i < DeviceExtension->nPCIADAs; i++) |
| { |
| pciada = &DeviceExtension->pciada[i]; |
| if ((dwData = pciada->PCIDevice.u.type0.BaseAddresses[0]) & 0x80) |
| { |
| KdPrint(("Changing address 0:0x%p with 4:0x%p\n", |
| pciada->PCIDevice.u.type0.BaseAddresses[0], |
| pciada->PCIDevice.u.type0.BaseAddresses[4])); |
| pciada->PCIDevice.u.type0.BaseAddresses[0] = // exchange |
| pciada->PCIDevice.u.type0.BaseAddresses[4]; |
| pciada->PCIDevice.u.type0.BaseAddresses[4] = dwData; |
| if (HalSetBusDataByOffset(PCIConfiguration, pciada->Bus, |
| pciada->Slot.u.AsULONG, |
| (PVOID)&pciada->PCIDevice.u.type0.BaseAddresses[0], |
| 0x10, 4) != 4) |
| return STATUS_UNSUCCESSFUL; |
| if (HalSetBusDataByOffset(PCIConfiguration, pciada->Bus, |
| pciada->Slot.u.AsULONG, |
| (PVOID)&pciada->PCIDevice.u.type0.BaseAddresses[4], |
| 0x20, 4) != 4) |
| return STATUS_UNSUCCESSFUL; |
| } |
| if ((dwData = pciada->PCIDevice.u.type0.BaseAddresses[1]) & 0x80) |
| { |
| KdPrint(("Changing address 1:0x%p with 5:0x%p\n", |
| pciada->PCIDevice.u.type0.BaseAddresses[1], |
| pciada->PCIDevice.u.type0.BaseAddresses[5])); |
| pciada->PCIDevice.u.type0.BaseAddresses[1] = // exchange |
| pciada->PCIDevice.u.type0.BaseAddresses[5]; |
| pciada->PCIDevice.u.type0.BaseAddresses[5] = dwData; |
| if (HalSetBusDataByOffset(PCIConfiguration, pciada->Bus, |
| pciada->Slot.u.AsULONG, |
| (PVOID)&pciada->PCIDevice.u.type0.BaseAddresses[1], |
| 0x14, 4) != 4) |
| return STATUS_UNSUCCESSFUL; |
| if (HalSetBusDataByOffset(PCIConfiguration, pciada->Bus, |
| pciada->Slot.u.AsULONG, |
| (PVOID)&pciada->PCIDevice.u.type0.BaseAddresses[5], |
| 0x24, 4) != 4) |
| return STATUS_UNSUCCESSFUL; |
| } |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // reserve resources for PCIADAs |
| // |
| NTSTATUS PCICC32ExtractResources(PCIADA *pciada, PCM_RESOURCE_LIST pList) |
| { |
| PCM_RESOURCE_LIST pResourceList; |
| PCM_FULL_RESOURCE_DESCRIPTOR pFullDescriptor; |
| PCM_PARTIAL_RESOURCE_LIST pPartialList; |
| PCM_PARTIAL_RESOURCE_DESCRIPTOR pPartialDescriptor; |
| int i; |
| int bug = 0; |
| KdPrint(("PCICC32ExtractResources()\n")); |
| pResourceList = pList; |
| pFullDescriptor = pResourceList->List; |
| pPartialList = &pFullDescriptor->PartialResourceList; |
| for (i=0; i<(int)pPartialList->Count; i++) |
| { |
| pPartialDescriptor = &pPartialList->PartialDescriptors[i]; |
| switch (pPartialDescriptor->Type) |
| { |
| case CmResourceTypeInterrupt: |
| pciada->Irql = (KIRQL)pPartialDescriptor->u.Interrupt.Level; |
| pciada->Vector = pPartialDescriptor->u.Interrupt.Vector; |
| pciada->Affinity = pPartialDescriptor->u.Interrupt.Affinity; |
| KdPrint(("Irq : Irql: %d, Vector: %d, Affinity: %d\n", |
| pciada->Irql, pciada->Vector, pciada->Affinity)); |
| break; |
| case CmResourceTypeDma: |
| KdPrint(("Dma : \n")); |
| break; |
| case CmResourceTypePort: |
| KdPrint(("Port : 0x%p\n", pPartialDescriptor->u.Port.Start)); |
| break; |
| case CmResourceTypeMemory: |
| // special handling of PLXBUG here because of WIN2000 |
| // WIN2000 doesn't recognize late address changes |
| if (!bug) |
| { |
| if (i == 0) |
| { |
| pciada->pvPhysLcr = pPartialDescriptor->u.Memory.Start; |
| if (pciada->pvPhysLcr.LowPart & 0x80) |
| bug = 1; |
| } |
| } |
| else |
| { |
| if (i == 3) |
| pciada->pvPhysLcr = pPartialDescriptor->u.Memory.Start; |
| } |
| if (i == 2) |
| pciada->pvPhysIfr = pPartialDescriptor->u.Memory.Start; |
| KdPrint(("Memory : 0x%p\n", (PUCHAR)pPartialDescriptor->u.Memory.Start.LowPart)); |
| break; |
| } |
| } |
| if (pciada->Irql == 0) |
| return STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT; |
| KdPrint(("PCICC32ExtractResources() OK.\n")); |
| return STATUS_SUCCESS; |
| } |
| NTSTATUS PCICC32ReserveResources(PDEVICE_OBJECT device_Obj) |
| { |
| PCM_RESOURCE_LIST pList = NULL; |
| NTSTATUS result = STATUS_SUCCESS; |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)(device_Obj->DeviceExtension); |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| UNICODE_STRING DriverClassName; |
| KdPrint(("PCICC32ReserveResources()\n")); |
| // prepare resource claiming |
| RtlInitUnicodeString(&DriverClassName, L"PCICC32"); |
| // cycle through all busses and slots assigned to PCIADAs |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| result = HalAssignSlotResources(NULL, &DriverClassName, device_Obj->DriverObject, device_Obj, |
| PCIBus, pciada->Bus, pciada->Slot.u.AsULONG, &pList); |
| if (result != STATUS_SUCCESS) |
| break; |
| result = PCICC32ExtractResources(pciada, pList); |
| if (result != STATUS_SUCCESS) |
| break; |
| } |
| // its my part to free allocated resources |
| ExFreePool(pList); |
| KdPrint(("PCICC32ReserveResources(0x%08x)\n", result)); |
| return result; |
| }; |
| //------------------------------------------------------------------------ |
| // free resources from PCIADAs |
| // |
| NTSTATUS PCICC32FreeResources(PDEVICE_OBJECT device_Obj) |
| { |
| CM_RESOURCE_LIST ResList; |
| BOOLEAN bConflict; |
| UNICODE_STRING DriverClassName; |
| KdPrint(("PCICC32FreeResources()\n")); |
| RtlInitUnicodeString(&DriverClassName, L"PCICC32"); |
| ResList.Count = 0; |
| IoReportResourceUsage(&DriverClassName, device_Obj->DriverObject, |
| &ResList, sizeof(ResList), device_Obj, |
| NULL, 0, FALSE, &bConflict); |
| return STATUS_SUCCESS; |
| }; |
| //------------------------------------------------------------------------ |
| // translate memory resources to neutral for PCIADAs |
| // |
| NTSTATUS PCICC32TranslateBusAddresses(PDEVICE_OBJECT device_Obj) |
| { |
| int i; |
| NTSTATUS result = STATUS_SUCCESS; |
| int nPCIADAs = ((DEVICE_EXT*)(device_Obj->DeviceExtension))->nPCIADAs; |
| ULONG memType0, memType2; |
| PCIADA *pciada; |
| KdPrint(("TranslateBusAddresseses()\n")); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->pciada[i]; |
| memType0 = memType2 = 0; |
| if (!(HalTranslateBusAddress(PCIBus, pciada->Bus, pciada->pvPhysLcr, &memType0, |
| &pciada->pvPhysLcr)) || |
| !(HalTranslateBusAddress(PCIBus, pciada->Bus, pciada->pvPhysIfr, &memType2, |
| &pciada->pvPhysIfr))) |
| { |
| result = STATUS_UNSUCCESSFUL; |
| break; |
| } |
| if ((memType0) || (memType2)) |
| { |
| result = STATUS_UNSUCCESSFUL; |
| break; |
| } |
| } |
| return result; |
| } |
| //------------------------------------------------------------------------ |
| // map address spaces to virtual addresses |
| // |
| NTSTATUS PCICC32MapIOspaces(PDEVICE_OBJECT device_Obj) |
| { |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32MapIOspaces()\n")); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| if ((pciada->pvVirtLcr = MmMapIoSpace(pciada->pvPhysLcr, LCR_SPACE, FALSE)) == NULL) |
| return STATUS_UNSUCCESSFUL; |
| if ((pciada->pvVirtIfr = MmMapIoSpace(pciada->pvPhysIfr, IFR_SPACE, FALSE)) == NULL) |
| return STATUS_UNSUCCESSFUL; |
| KdPrint(("PCIADA %d: LCR 0x%08x IFR 0x%08x\n", i, pciada->pvVirtLcr, pciada->pvVirtIfr)); |
| pciada->pwIntCSR = (PUSHORT)((PUCHAR)pciada->pvVirtLcr + 0x4C); |
| pciada->pwCntrl = (PUSHORT)((PUCHAR)pciada->pvVirtLcr + 0x50); |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // initializes and registers a DPC routine for each pciada |
| // |
| NTSTATUS InitializeCustomDPCObjects(PDEVICE_OBJECT device_object) |
| { |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)(device_object->DeviceExtension); |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("InitializeCustomDPCObject()\n")); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| KeInitializeDpc(&pciada->kDPCobj, fMyDefferedRoutine, (PVOID)device_object); |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // init structures a.s.o. |
| // |
| VOID PCICC32SoftInit(PDEVICE_OBJECT device_Obj) |
| { |
| int i; |
| PCIADA *pciada; |
| for (i = 0; i < PCICC32_MAX_PCIADA; i++) |
| { |
| pciada = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->pciada[i]; |
| pciada->pvPhysLcr.QuadPart = pciada->pvPhysIfr.QuadPart = 0; |
| pciada->pvVirtLcr = pciada->pvVirtIfr = NULL; |
| pciada->bConnected = FALSE; // connection still not verified |
| pciada->wModuleNumber = 0xFFFF; |
| pciada->wFPGAVersion = 0xFFFF; |
| pciada->wModuleType = 1; // always CC32 |
| pciada->InterruptObject = NULL; |
| pciada->Irql = 0; |
| pciada->Vector = 0; |
| pciada->Affinity = 0; |
| pciada->dwLinkCount = 0; |
| pciada->dwIrqStatus = 0; |
| pciada->pBlockingIrp = (PIRP *)NULL; |
| pciada->pIrqControlFile = (FILE_OBJ *)NULL; |
| } |
| // no CC32 associated to any PCIADA |
| for (i = 0; i < PCICC32_MAX_CC32; i++) |
| ((DEVICE_EXT*)(device_Obj->DeviceExtension))->cc32[i] = NULL; |
| } |
| //------------------------------------------------------------------------ |
| // the ultimate starting point of a driver |
| NTSTATUS DriverEntry(PDRIVER_OBJECT driverObj, PUNICODE_STRING regPath) |
| { |
| int i; |
| PDEVICE_OBJECT device_object; // pointer to the device object |
| UNICODE_STRING device_name; |
| UNICODE_STRING symbol_name; |
| NTSTATUS result = STATUS_SUCCESS; |
| PCIADA *pciada; // pointer to a PCIADA |
| int nPCIADAs; // count of PCIADAs |
| DEVICE_EXT *DeviceExtension = NULL; |
| UNREFERENCED_PARAMETER(regPath); |
| KdPrint(("DriverEntry() ----%d.%d-------------------------\n", (DRIVER_VERSION >> 16) & 0xFFFF, DRIVER_VERSION & 0xFFFF)); |
| driverObj->DriverUnload = PCICC32Unload; |
| driverObj->MajorFunction[IRP_MJ_CREATE] = PCICC32Open; |
| driverObj->MajorFunction[IRP_MJ_CLOSE] = PCICC32Close; |
| driverObj->MajorFunction[IRP_MJ_READ] = PCICC32Read; |
| driverObj->MajorFunction[IRP_MJ_WRITE] = PCICC32Write; |
| driverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = PCICC32DeviceControl; |
| driverObj->MajorFunction[IRP_MJ_SHUTDOWN] = PCICC32Shutdown; |
| RtlInitUnicodeString(&device_name, L"\\Device\\CC32"); |
| /* DeviceObject durch IO-Manager erzeugen */ |
| result = IoCreateDevice( driverObj, // DriverObject received by the DriverEntry Call |
| sizeof(DEVICE_EXT), // required Memory for the DeviceExtension |
| &device_name, // Name of the device in the device-Directory |
| FILE_DEVICE_UNKNOWN, // Device-ID |
| 0, // Device-Characteristics normal 0 |
| FALSE, // TRUE : one Thread can open the driver |
| &device_object); // DeviceObject returned from the IO-Manager |
| // defines how the data are handled between user / kernel Adress-Space |
| device_object->Flags |= DO_DIRECT_IO; |
| // anounce driver as symbolic device --------------------------------- |
| if (result == STATUS_SUCCESS) |
| { |
| /* now the symbolic Link is created. If there is no S.L. a program cannot connect to the driver */ |
| RtlInitUnicodeString(&symbol_name, DOS_DEVICE_NAME); |
| result = IoCreateSymbolicLink(&symbol_name,&device_name); |
| if (result != STATUS_SUCCESS) |
| { |
| IoDeleteDevice(device_object); |
| return result; |
| } |
| } |
| else |
| return result; |
| DeviceExtension = (DEVICE_EXT*)device_object->DeviceExtension; |
| DeviceExtension->actualIrp = NULL; |
| DeviceExtension->nInitState = 0; |
| // init pciada structures ------------------------------------ |
| PCICC32SoftInit(device_object); |
| // search for PCIADAs ---------------------------------------- |
| result = SearchDevices(device_object); |
| nPCIADAs = DeviceExtension->nPCIADAs; |
| if ((result != STATUS_SUCCESS) || !(nPCIADAs)) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| // request exclusive ownership of .. --------------------------------- |
| if ((result = PCICC32ReserveResources(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return result; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // fix PLX9050 Bug ------------------------------------------- |
| if ((result = PLX9050BugFix(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return result; |
| } |
| // translate BUS relative addresses ---------------------------------- |
| if ((result = PCICC32TranslateBusAddresses(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // translate Interrupt Resources used -------------------------------- |
| if ((result = PCICC32TranslateInterrupt(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // map address spaces to virtual addresses --------------------------- |
| if ((result = PCICC32MapIOspaces(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // initialze my custom DPC objects ----------------------------------- |
| if ((result = InitializeCustomDPCObjects(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return result; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // disable all interrupts -------------------------------------------- |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &DeviceExtension->pciada[i]; |
| globalInterruptDisable(pciada); |
| } |
| // connect interrupts to service routines ---------------------------- |
| if ((result = PCICC32ConnectInterrupt(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // scan all connected CC32 for info and later use ------------------- |
| if ((result = PCICC32ScanCC32(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| device_object->Flags &= ~DO_DEVICE_INITIALIZING; |
| KdPrint(("DriverEntry() OK.\n")); |
| return result; |
| } |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32_i.h |
|---|
| 0,0 → 1,55 |
| #ifndef __PCICC33_I_H__ |
| #define __PCICC32_I_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany --------- |
| // the header file to pcicc32_i.c - all around interrupt handling |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 15.06.1999 |
| // added globalInterruptEnabledStatus() AR 24.02.2001 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <pcicc32_drv.h> |
| //------------------------------------------------------------------------ |
| // DEFINES |
| // |
| //------------------------------------------------------------------------ |
| // PROTOTYPES |
| // |
| void globalInterruptEnable(PCIADA *pciada); |
| void globalInterruptDisable(PCIADA *pciada); |
| unsigned short globalInterruptEnabledStatus(PCIADA *pciada); |
| NTSTATUS PCICC32TranslateInterrupt(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32ConnectInterrupt(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32DisConnectInterrupt(PDEVICE_OBJECT device_Obj); |
| /* release all this procedures after init of the driver */ |
| #ifdef ALLOC_PRAGMA |
| #pragma alloc_text (init, PCICC32ConnectInterrupt) |
| #pragma alloc_text (init, PCICC32TranslateInterrupt) |
| #endif |
| /* put all this procedures in the paged memory-pool, all called at passiv Level */ |
| #ifdef ALLOC_PRAGMA |
| #pragma alloc_text (page, PCICC32DisConnectInterrupt) |
| #endif |
| #endif //__PCICC32_I_H__ |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/vc120.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.20.51 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/stampinf.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32_v.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32.log |
|---|
| 0,0 → 1,23 |
| Build started 10.2.2014 7:32:20. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" on node 2 (Rebuild target(s)). |
| 1>StampInf: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\stampinf.exe -d "*" -a "x86" -v "*" -k "1.11" -u "1.11.0" -f Win7Release\pcicc32.inf |
| Stamping Win7Release\pcicc32.inf [Version] section with DriverVer=02/10/2014,7.32.20.51 |
| ClCompile: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\CL.exe /c /IWin7Release\ /Zi /nologo /W4 /WX /Ox /Os /Oy- /D _X86_=1 /D i386=1 /D STD_CALL /D _WIN32_WINNT=0x0601 /D WINVER=0x0601 /D WINNT=1 /D NTDDI_VERSION=0x06010000 /D KMDF_VERSION_MAJOR=1 /D KMDF_VERSION_MINOR=11 /GF /Gm- /Zp8 /GS /Gy /fp:precise /Zc:wchar_t- /Zc:forScope- /GR- /Fo"Win7Release\\" /Fd"Win7Release\vc120.pdb" /Gz /wd4603 /wd4627 /wd4986 /wd4987 /wd4996 /FI"C:\Program Files (x86)\Windows Kits\8.1\Include\Shared\warning.h" /analyze- /errorReport:prompt /kernel -cbstring /d1nodatetime /d1import_no_registry /d2AllowCompatibleILVersions /d2Zi+ pcicc32_drv.c pcicc32_i.c pcicc32_io.c pcicc32_v.c |
| pcicc32_drv.c |
| pcicc32_i.c |
| pcicc32_io.c |
| pcicc32_v.c |
| Generating Code... |
| Link: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Release\pcicc32.sys" /VERSION:"6.3" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\memcmp.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\BufferOverflowK.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\ntoskrnl.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\hal.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\wmilib.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfLdr.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfDriverEntry.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Release\pcicc32.pdb" /SUBSYSTEM:NATIVE,"6.01" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Release\pcicc32.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /SAFESEH /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:6.3 /pdbcompress /debugtype:pdata Win7Release\pcicc32_drv.obj |
| Win7Release\pcicc32_i.obj |
| Win7Release\pcicc32_io.obj |
| Win7Release\pcicc32_v.obj |
| pcicc32.vcxproj -> C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Release\pcicc32.sys |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.67 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32_io.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32_i.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32.tlog/link.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32.tlog/pcicc32.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win7 Release|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32.tlog/CL.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32.tlog/link.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32.tlog/CL.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32.tlog/link.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32.tlog/cl.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/pcicc32_drv.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/stampinf.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Release/stampinf.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/vc120.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.17.794 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/stampinf.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32_v.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32.log |
|---|
| 0,0 → 1,23 |
| Build started 10.2.2014 7:32:17. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" on node 2 (Rebuild target(s)). |
| 1>StampInf: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\stampinf.exe -d "*" -a "x86" -v "*" -k "1.11" -u "1.11.0" -f Win8.1Release\pcicc32.inf |
| Stamping Win8.1Release\pcicc32.inf [Version] section with DriverVer=02/10/2014,7.32.17.794 |
| ClCompile: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\CL.exe /c /IWin8.1Release\ /Zi /nologo /W4 /WX /Ox /Os /Oy- /D _X86_=1 /D i386=1 /D STD_CALL /D _WIN32_WINNT=0x0603 /D WINVER=0x0603 /D WINNT=1 /D NTDDI_VERSION=0x06030000 /D KMDF_VERSION_MAJOR=1 /D KMDF_VERSION_MINOR=11 /GF /Gm- /Zp8 /GS /Gy /fp:precise /Zc:wchar_t- /Zc:forScope- /GR- /Fo"Win8.1Release\\" /Fd"Win8.1Release\vc120.pdb" /Gz /wd4603 /wd4627 /wd4986 /wd4987 /wd4996 /FI"C:\Program Files (x86)\Windows Kits\8.1\Include\Shared\warning.h" /analyze- /errorReport:prompt /kernel -cbstring /d1nodatetime /d1import_no_registry /d2AllowCompatibleILVersions /d2Zi+ pcicc32_drv.c pcicc32_i.c pcicc32_io.c pcicc32_v.c |
| pcicc32_drv.c |
| pcicc32_i.c |
| pcicc32_io.c |
| pcicc32_v.c |
| Generating Code... |
| Link: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Release\pcicc32.sys" /VERSION:"6.3" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:\Program Files (x86)\Windows Kits\8.1\lib\winV6.3\KM\x86\BufferOverflowFastFailK.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\winV6.3\KM\x86\ntoskrnl.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\winV6.3\KM\x86\hal.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\winV6.3\KM\x86\wmilib.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfLdr.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfDriverEntry.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Release\pcicc32.pdb" /SUBSYSTEM:NATIVE,"6.03" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Release\pcicc32.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /SAFESEH /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:6.3 /pdbcompress /debugtype:pdata Win8.1Release\pcicc32_drv.obj |
| Win8.1Release\pcicc32_i.obj |
| Win8.1Release\pcicc32_io.obj |
| Win8.1Release\pcicc32_v.obj |
| pcicc32.vcxproj -> C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Release\pcicc32.sys |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.68 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32_io.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32_i.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32.tlog/link.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32.tlog/pcicc32.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win8.1 Release|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32.tlog/CL.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32.tlog/link.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32.tlog/CL.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32.tlog/link.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32.tlog/cl.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/pcicc32_drv.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/stampinf.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Release/stampinf.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32_local.h |
|---|
| 0,0 → 1,36 |
| #ifndef _PCICC32_LOCAL_H__ |
| #define _PCICC32_LOCAL_H__ |
| //----------------------------------------------------------------------- |
| // Address definitions and constants for PCIADA of PCICC32 interface |
| // designed by A.Rausch |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // first parts derived from PCIVME AR 10.03.2000 |
| // added initialisation for AUTOREAD AR 17.03.2001 |
| // |
| /*-----------------------------------------------------------------------*/ |
| /* all addresses relative to PCI-Window */ |
| /*--------- some masks in CSR -------------------------------------------*/ |
| #define MASK_MODNR (WORD)0x00F0 /* the mask to get the module No */ |
| #define MASK_FPGA (WORD)0x0F00 /* the mask to get the FPGA rev. */ |
| #define MASK_MODTYPE (WORD)0xF000 /* the mask to get type of module*/ |
| /*---------- release und inhibit into 0x50 of PLX ------------------------*/ |
| #define RELEASE_CC32 (WORD)0x4186 /* write this to release access ..*/ |
| #define INHIBIT_CC32 (WORD)0x4086 /* write this to inhibit access ..*/ |
| #define ENABLE_PCIADA_IRQS (WORD)0x0049 /* enable PCIADA IRQs */ |
| #define DISABLE_PCIADA_IRQS (WORD)0x0009 /* disable PCIADA IRQs */ |
| #endif // _PCICC32_LOCAL_H__ |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32.vcxproj.filters |
|---|
| 0,0 → 1,26 |
| <?xml version="1.0" encoding="utf-8"?> |
| <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
| <ItemGroup> |
| <Filter Include="Source Files"> |
| <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> |
| <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> |
| </Filter> |
| <Filter Include="Header Files"> |
| <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> |
| <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> |
| </Filter> |
| <Filter Include="Resource Files"> |
| <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> |
| <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> |
| </Filter> |
| <Filter Include="Driver Files"> |
| <UniqueIdentifier>{8E41214B-6785-4CFE-B992-037D68949A14}</UniqueIdentifier> |
| <Extensions>inf;inv;inx;mof;mc;</Extensions> |
| </Filter> |
| </ItemGroup> |
| <ItemGroup> |
| <Inf Include="pcicc32.inf"> |
| <Filter>Driver Files</Filter> |
| </Inf> |
| </ItemGroup> |
| </Project> |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32_drv.h |
|---|
| 0,0 → 1,172 |
| #ifndef __PCICC32_DRV_H__ |
| #define __PCICC32_DRV_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany --------- |
| // the main header file of the driver |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistribute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 10.03.2000 |
| // dwIrqStatus added, version 2 AR 24.02.2001 |
| // with AUTOREAD, version 2.01 AR 17.03.2001 |
| // with support for LCR_READ, version 2.02 AR 31.03.2001 |
| // changed to VisualStudio 6.0 AR 30.09.2001 |
| // compiled with DDK 1/2001 AR 20.11.2001 |
| // removed alloc_text cause of WIN2000 problems AR 25.11.2001 |
| // version 2.7 released AR 25.11.2001 |
| // version 2.8 still experimental AR 26.05.2002 |
| // version 2.16 eliminates PLXBUG in WIN2000 AR 05.06.2002 |
| // version 2.17 added KeSynchronizeExecution AR 16.06.2002 |
| // version 2.18 improved snchronisation AR 18.06.2002 |
| // |
| //------------------------------------------------------------------------- |
| #define DRIVER_VERSION ((2 << 16) | 18) // the only place for version info |
| #define DRIVER_VARIANT 0 // mark customisation here |
| //------------------------------------------------------------------------- |
| //------------------------------------------------------------------------- |
| // precautions for debug compile |
| #define PCICC32_DEBUG |
| #ifndef PCICC32_DEBUG |
| #ifdef KdPrint |
| #undef KdPrint |
| #define KdPrint(x) /* x */ |
| #endif |
| #endif |
| //------------------------------------------------------------------------- |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #define PCI_MAX_BUSES 4 // buses to search for pciada |
| #define PCICC32_MAX_PCIADA 4 // maximum of PCIADA to search for |
| #define PCICC32_MAX_CC32 16 // maximum number of CC32 modules connected |
| //------------------------------------------------------------------------- |
| // DEFINES |
| // |
| #define PCICC32_VENDOR_ID 0x10B5 |
| #define PCICC32_DEVICE_ID 0x2258 |
| #define PCICC32_SUBSYS_ID 0x2258 |
| #define PCICC32_SUBVEN_ID 0x9050 |
| #define LCR_SPACE 256 // space in bytes of LCR |
| #define IFR_SPACE 32768 // space in bytes of IFR |
| //---------------------------------------------------------------------------------------- |
| // macros for simple address calculation |
| // |
| #define _WORD_NAF(base, n, a, f) ((USHORT *)((ULONG)base + (n << 10) + (a << 6) + ((f & 0xf) << 2))) |
| #define _DWORD_NAF(base, n, a, f) ((ULONG *)((ULONG)base + (n << 10) + (a << 6) + ((f & 0xf) << 2))) |
| //------------------------------------------------------------------------- |
| // TYPEDEFS |
| // |
| typedef struct _FILE_OBJ |
| { |
| USHORT uwAssociatedCC32; // which CC32 number it belongs |
| USHORT wAccessType; // WORD or LONGWORD |
| USHORT wBlockTransfer; // != 0 for block transfer |
| void (*fRead)(void *to, void *from); // resulting read |
| void (*fWrite)(void *to, void *from); // resulting write |
| PIRP blockingIrp; // if != 0 then a blocking IRP is waiting |
| } FILE_OBJ, *PFILE_OBJ; |
| typedef struct |
| { |
| int Bus; // bus number of pciada |
| PCI_SLOT_NUMBER Slot; // slot + function number encoded |
| PCI_COMMON_CONFIG PCIDevice; // content of pcr, only for direct HW related functions |
| PHYSICAL_ADDRESS pvPhysLcr; // local config register, unmapped and mapped |
| PHYSICAL_ADDRESS pvPhysIfr; // interface registers, unmapped and mapped |
| PVOID pvVirtLcr; // virtual LCR space |
| PVOID pvVirtIfr; // virtual IFR space |
| PKINTERRUPT InterruptObject; // points to the associated interrupt obj |
| KIRQL Irql; // virtual Irq level, unmapped and mapped |
| ULONG Vector; // mapped system vector, unmapped and mapped |
| KAFFINITY Affinity; // which processor uses this irq, unmapped and mapped |
| PUSHORT pwCntrl; // LCR Cntrl Offset @ LCR + 0x50 |
| PUSHORT pwIntCSR; // LCR IntCSR Offset @ LCR + 0x4C |
| ULONG dwLinkCount; // how often this interface is requested |
| BOOLEAN bConnected; // CC32 is connected and powered |
| USHORT wModuleNumber; // Number (Jumper) of CC32 |
| USHORT wFPGAVersion; // Revision of (CC32) FPGA |
| USHORT wModuleType; // Type of (CC32) module |
| KDPC kDPCobj; // custom DPC object for irq tunneling |
| ULONG dwIrqStatus; // the last unrequested status of a interrupt |
| PIRP *pBlockingIrp; // points to File or == NULL when no blocking in progress |
| FILE_OBJ *pIrqControlFile; // this file controls the global enable / disable IRQ |
| } PCIADA; |
| typedef struct _DEVICE_EXT |
| { |
| PDEVICE_OBJECT DeviceObject; // points to myself and carries the pointer to DriverObject |
| PIRP actualIrp; // points to .. |
| int nPCIADAs; // how many PCIADAs are found |
| PCIADA pciada[PCICC32_MAX_PCIADA]; // for each PCIADA a descriptor |
| PCIADA *cc32[PCICC32_MAX_CC32]; // points to PCIADA to which it belongs |
| int nInitState; // tracks the state of initialisation |
| } DEVICE_EXT; |
| // Prototypes to support following pragmas |
| NTSTATUS DriverEntry(PDRIVER_OBJECT driverObj, PUNICODE_STRING regPath); |
| NTSTATUS PCICC32Open(PDEVICE_OBJECT deviceObj, PIRP irp); |
| NTSTATUS PCICC32Close(PDEVICE_OBJECT deviceObj, PIRP irp); |
| VOID PCICC32Unload(PDRIVER_OBJECT driverObj); |
| NTSTATUS SearchDevices(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PLX9050BugFix(PDEVICE_OBJECT deviceObj); |
| NTSTATUS PCICC32ReserveResources(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32ExtractResources(PCIADA *pciada, PCM_RESOURCE_LIST pList); |
| NTSTATUS PCICC32FreeResources(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32TranslateBusAddress(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32MapIOspace(PDEVICE_OBJECT device_object); |
| VOID PCICC32SoftInit(PDEVICE_OBJECT device_Obj); |
| NTSTATUS InitializeCustomDPCObjects(PDEVICE_OBJECT device_object); |
| /* release all this procedures after init of the driver */ |
| #ifdef ALLOC_PRAGMA |
| #pragma alloc_text (init, DriverEntry) |
| #pragma alloc_text (init, SearchDevices) |
| #pragma alloc_text (init, PLX9050BugFix) |
| #pragma alloc_text (init, PCICC32ReserveResources) |
| #pragma alloc_text (init, PCICC32ExtractResources) |
| #pragma alloc_text (init, PCICC32TranslateBusAddress) |
| #pragma alloc_text (init, PCICC32MapIOspace) |
| #pragma alloc_text (init, PCICC32SoftInit) |
| #pragma alloc_text (init, InitializeCustomDPCObjects) |
| #endif |
| /* put all this procedures in the paged memory-pool, all called at passiv Level */ |
| #ifdef ALLOC_PRAGMA |
| #pragma alloc_text (page, PCICC32Open) |
| #pragma alloc_text (page, PCICC32Close) |
| #pragma alloc_text (page, PCICC32Unload) |
| #pragma alloc_text (page, PCICC32FreeResources) |
| #endif |
| #endif // __PCICC32_DRV_H__ |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/vc120.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.20.773 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/stampinf.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32_v.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32.log |
|---|
| 0,0 → 1,28 |
| Build started 10.2.2014 7:32:20. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" on node 2 (Rebuild target(s)). |
| 1>StampInf: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\stampinf.exe -d "*" -a "x86" -v "*" -k "1.11" -u "1.11.0" -f Win7Debug\pcicc32.inf |
| Stamping Win7Debug\pcicc32.inf [Version] section with DriverVer=02/10/2014,7.32.20.773 |
| ClCompile: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\CL.exe /c /IWin7Debug\ /Zi /nologo /W4 /WX /Od /Oi /Oy- /D _X86_=1 /D i386=1 /D STD_CALL /D DEPRECATE_DDK_FUNCTIONS=1 /D MSC_NOOPT /D _WIN32_WINNT=0x0601 /D WINVER=0x0601 /D WINNT=1 /D NTDDI_VERSION=0x06010000 /D DBG=1 /D KMDF_VERSION_MAJOR=1 /D KMDF_VERSION_MINOR=11 /GF /Gm- /Zp8 /GS /Gy /fp:precise /Zc:wchar_t- /Zc:forScope- /GR- /Fo"Win7Debug\\" /Fd"Win7Debug\vc120.pdb" /Gz /wd4748 /wd4603 /wd4627 /wd4986 /wd4987 /wd4996 /FI"C:\Program Files (x86)\Windows Kits\8.1\Include\Shared\warning.h" /analyze- /errorReport:prompt /kernel -cbstring /d1import_no_registry /d2AllowCompatibleILVersions /d2Zi+ pcicc32_drv.c pcicc32_i.c pcicc32_io.c pcicc32_v.c |
| pcicc32_drv.c |
| pcicc32_i.c |
| pcicc32_io.c |
| pcicc32_v.c |
| Generating Code... |
| Link: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Debug\pcicc32.sys" /VERSION:"6.3" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\memcmp.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\BufferOverflowK.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\ntoskrnl.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\hal.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win7\KM\x86\wmilib.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfLdr.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfDriverEntry.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Debug\pcicc32.pdb" /SUBSYSTEM:NATIVE,"6.01" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Debug\pcicc32.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:6.3 /pdbcompress /debugtype:pdata Win7Debug\pcicc32_drv.obj |
| Win7Debug\pcicc32_i.obj |
| Win7Debug\pcicc32_io.obj |
| Win7Debug\pcicc32_v.obj |
| pcicc32.vcxproj -> C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Debug\pcicc32.sys |
| DriverTestSign: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\signtool.exe sign /ph /sha1 "582A29F728D647902CAA175FC6F560D6BB7011DD" |
| Done Adding Additional Store |
| Successfully signed: C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win7Debug\pcicc32.sys |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.76 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32_io.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32_i.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32.tlog/link.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32.tlog/pcicc32.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win7 Debug|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32.tlog/CL.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32.tlog/link.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32.tlog/CL.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32.tlog/link.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32.tlog/cl.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/pcicc32_drv.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/signtool.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/signtool.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/stampinf.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/signtool.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win7Debug/stampinf.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/vc120.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.19.198 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/stampinf.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32_v.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32.log |
|---|
| 0,0 → 1,28 |
| Build started 10.2.2014 7:32:19. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" on node 2 (Rebuild target(s)). |
| 1>StampInf: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\stampinf.exe -d "*" -a "x86" -v "*" -k "1.11" -u "1.11.0" -f Win8.1Debug\pcicc32.inf |
| Stamping Win8.1Debug\pcicc32.inf [Version] section with DriverVer=02/10/2014,7.32.19.198 |
| ClCompile: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\CL.exe /c /IWin8.1Debug\ /Zi /nologo /W4 /WX /Od /Oi /Oy- /D _X86_=1 /D i386=1 /D STD_CALL /D DEPRECATE_DDK_FUNCTIONS=1 /D MSC_NOOPT /D _WIN32_WINNT=0x0603 /D WINVER=0x0603 /D WINNT=1 /D NTDDI_VERSION=0x06030000 /D DBG=1 /D KMDF_VERSION_MAJOR=1 /D KMDF_VERSION_MINOR=11 /GF /Gm- /Zp8 /GS /Gy /fp:precise /Zc:wchar_t- /Zc:forScope- /GR- /Fo"Win8.1Debug\\" /Fd"Win8.1Debug\vc120.pdb" /Gz /wd4748 /wd4603 /wd4627 /wd4986 /wd4987 /wd4996 /FI"C:\Program Files (x86)\Windows Kits\8.1\Include\Shared\warning.h" /analyze- /errorReport:prompt /kernel -cbstring /d1import_no_registry /d2AllowCompatibleILVersions /d2Zi+ pcicc32_drv.c pcicc32_i.c pcicc32_io.c pcicc32_v.c |
| pcicc32_drv.c |
| pcicc32_i.c |
| pcicc32_io.c |
| pcicc32_v.c |
| Generating Code... |
| Link: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Debug\pcicc32.sys" /VERSION:"6.3" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:\Program Files (x86)\Windows Kits\8.1\lib\winV6.3\KM\x86\BufferOverflowFastFailK.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\winV6.3\KM\x86\ntoskrnl.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\winV6.3\KM\x86\hal.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\winV6.3\KM\x86\wmilib.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfLdr.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfDriverEntry.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Debug\pcicc32.pdb" /SUBSYSTEM:NATIVE,"6.03" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Debug\pcicc32.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:6.3 /pdbcompress /debugtype:pdata Win8.1Debug\pcicc32_drv.obj |
| Win8.1Debug\pcicc32_i.obj |
| Win8.1Debug\pcicc32_io.obj |
| Win8.1Debug\pcicc32_v.obj |
| pcicc32.vcxproj -> C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Debug\pcicc32.sys |
| DriverTestSign: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\signtool.exe sign /ph /sha1 "582A29F728D647902CAA175FC6F560D6BB7011DD" |
| Done Adding Additional Store |
| Successfully signed: C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8.1Debug\pcicc32.sys |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:00.81 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32_io.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32_i.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32.tlog/link.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32.tlog/pcicc32.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win8.1 Debug|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32.tlog/CL.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32.tlog/link.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32.tlog/CL.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32.tlog/link.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32.tlog/cl.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/pcicc32_drv.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/signtool.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/signtool.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/stampinf.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/signtool.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8.1Debug/stampinf.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32_v.c |
|---|
| 0,0 → 1,196 |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany -------- |
| // all around recognition and basic services of VMEMM |
| // |
| // (c) 2000-2002 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started from pcivme_v.c AR 02.07.2000 |
| // changed making procedure (only VCC > 6.0) AR 30.05.2002 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <pcicc32_drv.h> |
| #include <pcicc32_v.h> |
| #include <pcicc32_local.h> // all around the pciada interface |
| #ifndef WORD // don't touch include files of WIN95 driver |
| #define WORD USHORT |
| #endif |
| #ifndef DWORD |
| #define DWORD ULONG |
| #endif |
| //------------------------------------------------------------------------ |
| // PROTOTYPES |
| // |
| //------------------------------------------------------------------------ |
| // GLOBALS |
| // |
| //------------------------------------------------------------------------ |
| // FUNCTIONS |
| // |
| //------------------------------------------------------------------------ |
| // test connection to VMEMM devices without disturbing anything |
| // |
| //--------------------------------------------------------------------- |
| // checks a connection with a small test pattern |
| // |
| NTSTATUS TestConnection(PCIADA *pciada) |
| { |
| USHORT *pwADRH = (USHORT *)_WORD_NAF(pciada->pvVirtIfr, 30, 1, 0); |
| USHORT *pwADRL = (USHORT *)_WORD_NAF(pciada->pvVirtIfr, 30, 0, 0); |
| int i; |
| USHORT wRet; |
| USHORT wADRHContent; |
| USHORT wADRLContent; |
| KdPrint(("TestConnection()\n")); |
| wADRHContent = READ_REGISTER_USHORT(pwADRH); // save previous content |
| wADRLContent = READ_REGISTER_USHORT(pwADRL); |
| for (i = 0; i < 10000; i++) |
| { |
| WRITE_REGISTER_USHORT(pwADRH, 0x5555); |
| WRITE_REGISTER_USHORT(pwADRL, 0xAAAA); |
| wRet = READ_REGISTER_USHORT(pwADRH); |
| if (wRet != 0x5555) return STATUS_UNSUCCESSFUL; |
| WRITE_REGISTER_USHORT(pwADRH, 0xAAAA); |
| WRITE_REGISTER_USHORT(pwADRL, 0x5555); |
| wRet = READ_REGISTER_USHORT(pwADRH); |
| if (wRet != 0xAAAA) return STATUS_UNSUCCESSFUL; |
| WRITE_REGISTER_USHORT(pwADRH, 0x0000); |
| WRITE_REGISTER_USHORT(pwADRL, 0xFFFF); |
| wRet = READ_REGISTER_USHORT(pwADRH); |
| if (wRet != 0x0000) return STATUS_UNSUCCESSFUL; |
| WRITE_REGISTER_USHORT(pwADRH, 0xFFFF); |
| WRITE_REGISTER_USHORT(pwADRL, 0x0000); |
| wRet = READ_REGISTER_USHORT(pwADRH); |
| if (wRet != 0xFFFF) return STATUS_UNSUCCESSFUL; |
| } |
| WRITE_REGISTER_USHORT(pwADRH, wADRHContent); // restore previous content |
| WRITE_REGISTER_USHORT(pwADRL, wADRLContent); |
| KdPrint(("TestConnection() OK.\n")); |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // scan VMEMM devices without disturbing anything |
| // |
| NTSTATUS PCICC32ScanCC32(PDEVICE_OBJECT deviceObj) |
| { |
| int i; |
| int nPCIADAs = ((DEVICE_EXT*)(deviceObj->DeviceExtension))->nPCIADAs; |
| PCIADA *pciada; |
| USHORT wCntrl; |
| USHORT wIntCSR; |
| USHORT wModuleStatus; |
| KdPrint(("PCICC32ScanCC32(nPCIADAs = %d)\n", nPCIADAs)); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &((DEVICE_EXT*)(deviceObj->DeviceExtension))->pciada[i]; |
| wCntrl = READ_REGISTER_USHORT(pciada->pwCntrl); // save it for later use |
| wIntCSR = READ_REGISTER_USHORT(pciada->pwIntCSR); |
| KdPrint(("wCntrl = 0x%04x, wIntCSR = 0x%04x\n", wCntrl, wIntCSR)); |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, INHIBIT_CC32); // switch off before open |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, DISABLE_PCIADA_IRQS); |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, RELEASE_CC32); // open it for test |
| if (wCntrl & 0x0800) |
| { |
| if (TestConnection(pciada) == STATUS_SUCCESS) |
| { |
| wModuleStatus = READ_REGISTER_USHORT(pciada->pvVirtIfr); |
| pciada->bConnected = TRUE; |
| // interpret the content |
| pciada->wModuleNumber = (wModuleStatus & MASK_MODNR) >> 4; |
| pciada->wFPGAVersion = (wModuleStatus & MASK_FPGA) >> 8; |
| pciada->wModuleType = (wModuleStatus & MASK_MODTYPE) >> 12; |
| KdPrint(("PCIADA %d <-> CC32 %d\n", i, pciada->wModuleNumber)); |
| } |
| else |
| pciada->wModuleNumber = 0xFFFF; // not recognized, take it out |
| } |
| else |
| pciada->wModuleNumber = 0xFFFF; // not recognized, take it out |
| if (pciada->wModuleNumber != 0xFFFF) |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, wCntrl); // restore state |
| else |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, INHIBIT_CC32); |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, wIntCSR); // restore interrupt masks |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // deinit all PCIADAs in a passive state |
| // |
| NTSTATUS PCICC32DeInitPCIADAs(PDEVICE_OBJECT deviceObj) |
| { |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)deviceObj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32DeInitPCIADAs()\n")); |
| // dis connect the interrupts to service routines |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, INHIBIT_CC32); |
| // this is the same as globalInterruptDisable(pciada); |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, DISABLE_PCIADA_IRQS); |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // switches pciada on or off |
| // |
| void enableCC32(PCIADA *pciada) |
| { |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, RELEASE_CC32); |
| } |
| void disableCC32(PCIADA *pciada) |
| { |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, INHIBIT_CC32); |
| } |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/vc120.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.21.688 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/stampinf.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32_v.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32.log |
|---|
| 0,0 → 1,28 |
| Build started 10.2.2014 7:32:21. |
| 1>Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" on node 2 (Rebuild target(s)). |
| 1>StampInf: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\stampinf.exe -d "*" -a "x86" -v "*" -k "1.11" -u "1.11.0" -f Win8Debug\pcicc32.inf |
| Stamping Win8Debug\pcicc32.inf [Version] section with DriverVer=02/10/2014,7.32.21.688 |
| ClCompile: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\CL.exe /c /IWin8Debug\ /Zi /nologo /W4 /WX /Od /Oi /Oy- /D _X86_=1 /D i386=1 /D STD_CALL /D DEPRECATE_DDK_FUNCTIONS=1 /D MSC_NOOPT /D _WIN32_WINNT=0x0602 /D WINVER=0x0602 /D WINNT=1 /D NTDDI_VERSION=0x06020000 /D DBG=1 /D KMDF_VERSION_MAJOR=1 /D KMDF_VERSION_MINOR=11 /GF /Gm- /Zp8 /GS /Gy /fp:precise /Zc:wchar_t- /Zc:forScope- /GR- /Fo"Win8Debug\\" /Fd"Win8Debug\vc120.pdb" /Gz /wd4748 /wd4603 /wd4627 /wd4986 /wd4987 /wd4996 /FI"C:\Program Files (x86)\Windows Kits\8.1\Include\Shared\warning.h" /analyze- /errorReport:prompt /kernel -cbstring /d1import_no_registry /d2AllowCompatibleILVersions /d2Zi+ pcicc32_drv.c pcicc32_i.c pcicc32_io.c pcicc32_v.c |
| pcicc32_drv.c |
| pcicc32_i.c |
| pcicc32_io.c |
| pcicc32_v.c |
| Generating Code... |
| Link: |
| C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Debug\pcicc32.sys" /VERSION:"6.3" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:\Program Files (x86)\Windows Kits\8.1\lib\win8\KM\x86\BufferOverflowFastFailK.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win8\KM\x86\ntoskrnl.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win8\KM\x86\hal.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\win8\KM\x86\wmilib.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfLdr.lib" "C:\Program Files (x86)\Windows Kits\8.1\lib\wdf\kmdf\x86\1.11\WdfDriverEntry.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Debug\pcicc32.pdb" /SUBSYSTEM:NATIVE,"6.02" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Debug\pcicc32.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:6.3 /pdbcompress /debugtype:pdata Win8Debug\pcicc32_drv.obj |
| Win8Debug\pcicc32_i.obj |
| Win8Debug\pcicc32_io.obj |
| Win8Debug\pcicc32_v.obj |
| pcicc32.vcxproj -> C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Debug\pcicc32.sys |
| DriverTestSign: |
| C:\Program Files (x86)\Windows Kits\8.1\bin\x86\signtool.exe sign /ph /sha1 "582A29F728D647902CAA175FC6F560D6BB7011DD" |
| Done Adding Additional Store |
| Successfully signed: C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\Win8Debug\pcicc32.sys |
| 1>Done Building Project "C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\pcicc32\pcicc32.vcxproj" (Rebuild target(s)). |
| Build succeeded. |
| Time Elapsed 00:00:01.03 |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32_io.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32_i.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32.tlog/link.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32.tlog/pcicc32.lastbuildstate |
|---|
| 0,0 → 1,2 |
| #TargetFrameworkVersion=v4.5:PlatformToolSet=WindowsKernelModeDriver8.1:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit |
| Win8 Debug|Win32|C:\Users\f9daq\rok\wienerpciada\PciCamac\WIN2000-XP\DRIVER\pcicc32\| |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32.tlog/CL.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32.tlog/link.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32.tlog/CL.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32.tlog/link.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32.tlog/cl.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/pcicc32_drv.obj |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/signtool.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/signtool.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/stampinf.write.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/signtool.command.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/Win8Debug/stampinf.read.1.tlog |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32_io.c |
|---|
| 0,0 → 1,770 |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany --------- |
| // the ioctl functions |
| // |
| // (c) 1999-2002 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 03.07.1999 |
| // first release 1.0 AR 17.10.1999 |
| // added access to PLX LC-Register AR 30.03.2001 |
| // changed making procedure (only VCC > 6.0) AR 30.05.2002 |
| // multiple interrupt enable allowed AR 01.06.2002 |
| // added KeSynchronizeExecution for interrupt sync AR 16.06.2002 |
| // extended ioctl_irq_status_kernel AR 18.06.2002 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <devioctl.h> |
| #include <pcicc32_drv.h> |
| #include <pcicc32.h> |
| #include <pcicc32_v.h> |
| #include <pcicc32_io.h> |
| #include <pcicc32_local.h> |
| #include <pcicc32_i.h> |
| //------------------------------------------------------------------------ |
| // DEFINES |
| // |
| // buffers usage must match the corresponding ioctl code! |
| #define SET_BUFFERS_METHOD_OUT_DIRECT \ |
| {\ |
| InputLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength;\ |
| OutputLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;\ |
| pInputBuffer = ((void *)(Irp->AssociatedIrp.SystemBuffer));\ |
| pOutputBuffer = ((void *)(MmGetSystemAddressForMdl(Irp->MdlAddress)));\ |
| } |
| #define SET_BUFFERS_METHOD_IN_DIRECT \ |
| {\ |
| InputLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength;\ |
| OutputLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;\ |
| pInputBuffer = ((void *)(MmGetSystemAddressForMdl(Irp->MdlAddress)));\ |
| pOutputBuffer = ((void *)(Irp->AssociatedIrp.SystemBuffer));\ |
| } |
| #define SET_BUFFERS_METHOD_BUFFERED \ |
| {\ |
| InputLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength;\ |
| OutputLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;\ |
| pInputBuffer = pOutputBuffer = ((void *)(Irp->AssociatedIrp.SystemBuffer));\ |
| } |
| #define COMPLETE_REQUEST \ |
| {\ |
| if (Status != STATUS_PENDING)\ |
| {\ |
| Irp->IoStatus.Status = Status; \ |
| Irp->IoStatus.Information = irp_info; \ |
| IoCompleteRequest(Irp,IO_NO_INCREMENT); \ |
| }\ |
| } |
| // compatibilty issues to WIN95 driver calls |
| #ifndef WORD |
| #define WORD USHORT |
| #endif |
| #ifndef DWORD |
| #define DWORD ULONG |
| #endif |
| #ifndef BYTE |
| #define BYTE UCHAR |
| #endif |
| #ifndef BOOL |
| #define BOOL BOOLEAN |
| #endif |
| //------------------------------------------------------------------------- |
| // TYPEDEFS |
| // |
| typedef struct |
| { |
| FILE_OBJ *file_obj; |
| PCIADA *pciada; |
| PCICC32_IRQ_RESPONSE *pIrqStatus; |
| PIRP *Irp; |
| ULONG *irp_info; |
| NTSTATUS *Status; |
| } IOCTL_IRQ_STATUS_CONTEXT; |
| //-------------------------------------------------------------------------- |
| // LOCAL FUNCTIONS |
| // |
| //-------------------------------------------------------------------------- |
| // fast read or write functions - portable - |
| static void readWord(void *to, void *from) |
| { |
| *(PUSHORT)to = READ_REGISTER_USHORT((PUSHORT)from); |
| } |
| static void readLong(void *to, void *from) |
| { |
| *(PULONG)to = READ_REGISTER_ULONG((PULONG)from); |
| } |
| static void writeWord(void *to, void *from) |
| { |
| WRITE_REGISTER_USHORT((PUSHORT)to, *(PUSHORT)from); |
| } |
| static void writeLong(void *to, void *from) |
| { |
| WRITE_REGISTER_ULONG((PULONG)to, *(PULONG)from); |
| } |
| //------------------------------------------------------------------------ |
| // init the interface with build in and user supplied constants |
| static BOOLEAN InitInterface(PVOID pvLcr, PVOID pvIfr) |
| { |
| UNREFERENCED_PARAMETER(pvLcr); |
| UNREFERENCED_PARAMETER(pvIfr); |
| return TRUE; |
| } |
| // deinit the interface with user supplied and build in constants |
| static BOOLEAN DeInitInterface(PVOID pvLcr, PVOID pvIfr) |
| { |
| UNREFERENCED_PARAMETER(pvLcr); |
| UNREFERENCED_PARAMETER(pvIfr); |
| return TRUE; |
| } |
| //------------------------------------------------------------------------ |
| // the default cancel routine for an queued Irp |
| // |
| void CancelRequest(PDEVICE_OBJECT device_Obj, PIRP Irp) |
| { |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| PCIADA *pciada = pDevExt->cc32[file_obj->uwAssociatedCC32]; |
| if (pciada->pBlockingIrp == (PIRP *)NULL) |
| { |
| IoReleaseCancelSpinLock(Irp->CancelIrql); |
| KdPrint(("Nothing to do: CancelRequest(0x%08x)\n", Irp)); |
| return; |
| } |
| else |
| { |
| // release control of interrupt |
| if (pciada->pIrqControlFile == file_obj) |
| { |
| pciada->pIrqControlFile = (FILE_OBJ *)NULL; |
| globalInterruptDisable(pciada); |
| } |
| // cancel any blocking Irp origin from this file |
| if (file_obj->blockingIrp != (PIRP)NULL) |
| file_obj->blockingIrp = (PIRP)NULL; |
| if (pciada->pBlockingIrp == &file_obj->blockingIrp) |
| pciada->pBlockingIrp = (PIRP *)NULL; |
| IoReleaseCancelSpinLock(Irp->CancelIrql); |
| KdPrint(("Done: CancelRequest(0x%08x)\n", Irp)); |
| Irp->IoStatus.Status = STATUS_CANCELLED; |
| Irp->IoStatus.Information = 0; |
| IoCompleteRequest(Irp, IO_NO_INCREMENT); |
| } |
| } |
| //------------------------------------------------------------------------ |
| // the custom deffered routine to finish blocking io on irq_block |
| void fMyDefferedRoutine(PKDPC Dpc, PVOID pvDevice_object, PVOID pvPciada, PVOID pdwIrqStatus) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = sizeof(PCICC32_IRQ_RESPONSE); |
| PIRP Irp = (PIRP)NULL; |
| PCIADA *pciada = (PCIADA *)pvPciada; |
| KIRQL oldIrqlCancel; |
| UNREFERENCED_PARAMETER(Dpc); |
| UNREFERENCED_PARAMETER(pdwIrqStatus); |
| UNREFERENCED_PARAMETER(pvDevice_object); |
| KdPrint(("fMyDefferedRoutine(0x%08x)\n", pciada->dwIrqStatus)); |
| // beware off damage due to intercept at cancel of thread |
| IoAcquireCancelSpinLock(&oldIrqlCancel); |
| // get my associated packet |
| if (pciada->pBlockingIrp != (PIRP *)NULL) |
| { |
| Irp = *pciada->pBlockingIrp; |
| if (Irp != (PIRP)NULL) // then a blcoking Irp is waiting |
| { |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| PCICC32_IRQ_RESPONSE *pIrqStatus = (PCICC32_IRQ_RESPONSE *)(Irp->AssociatedIrp.SystemBuffer); |
| // fill the response structure |
| pIrqStatus->dwInterruptFlags = pciada->dwIrqStatus; |
| pciada->dwIrqStatus = 0; // to prevent a following direct return |
| pIrqStatus->dwInterface = file_obj->uwAssociatedCC32; |
| // release the cancel routine from this Irp |
| IoSetCancelRoutine(Irp, NULL); |
| COMPLETE_REQUEST; |
| file_obj->blockingIrp = (PIRP)NULL; |
| } |
| pciada->pBlockingIrp = (PIRP *)NULL; |
| } |
| // release the spin locks |
| IoReleaseCancelSpinLock(oldIrqlCancel); |
| } |
| //------------------------------------------------------------------------ |
| // if the interrupt is disabled for a blocking path, cancel the block |
| static void ReleaseBlockingIrp(PDEVICE_OBJECT device_Obj, PCIADA *pciada, PFILE_OBJ pFile_obj) |
| { |
| NTSTATUS Status = STATUS_CANCELLED; |
| ULONG irp_info = sizeof(PCICC32_IRQ_RESPONSE); |
| PIRP Irp = (PIRP)NULL; |
| KIRQL oldIrqlCancel; |
| UNREFERENCED_PARAMETER(device_Obj); |
| UNREFERENCED_PARAMETER(pFile_obj); |
| UNREFERENCED_PARAMETER(irp_info); |
| KdPrint(("ReleaseBlockingIrp()\n")); |
| // beware off damage due to intercept with cancel of thread |
| IoAcquireCancelSpinLock(&oldIrqlCancel); |
| if (pciada->pBlockingIrp != (PIRP *)NULL) |
| { |
| // get my associated packet |
| Irp = *pciada->pBlockingIrp; |
| if (Irp != (PIRP)NULL) |
| { |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| PCICC32_IRQ_RESPONSE *pIrqStatus = (PCICC32_IRQ_RESPONSE *)(Irp->AssociatedIrp.SystemBuffer); |
| ULONG irp_info = sizeof(PCICC32_IRQ_RESPONSE); |
| pIrqStatus->dwInterruptFlags = pciada->dwIrqStatus; |
| pIrqStatus->dwInterface = file_obj->uwAssociatedCC32; |
| // release the cancel routine from this Irp |
| IoSetCancelRoutine(Irp, NULL); |
| COMPLETE_REQUEST; |
| file_obj->blockingIrp = (PIRP)NULL; |
| } |
| pciada->pBlockingIrp = (PIRP *)NULL; // mark the storage for blocking Irp free |
| } |
| // release the spin locks |
| IoReleaseCancelSpinLock(oldIrqlCancel); |
| } |
| //------------------------------------------------------------------------ |
| // all functions called from ioctl jump table |
| // |
| //------------------------------------------------------------------------ |
| // a dummy entry because of compatibiltiy (near) WIN95 driver |
| static NTSTATUS ioctl_dummy(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| char *pCommand; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| #ifndef _DEBUG |
| UNREFERENCED_PARAMETER(file_obj); |
| #endif |
| SET_BUFFERS_METHOD_BUFFERED; |
| UNREFERENCED_PARAMETER(device_Obj); |
| pCommand = (char *)pInputBuffer; |
| KdPrint(("ioctl_dummy(%d)\n", file_obj->uwAssociatedCC32)); |
| // do what must be here in between ----------- |
| // do what must be here in between --- end --- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_dummy(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // requests status |
| static NTSTATUS ioctl_get_status(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = sizeof(PCICC32_STATUS); |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| PCIADA *pciada; |
| DEVICE_EXT *pDevExt; |
| PCICC32_STATUS *pStatus; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| // do what must be here in between ----------- |
| pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_get_status(%d)\n", wModuleNumber)); |
| // do what must be here in between ----------- |
| if (OutputLength >= sizeof(PCICC32_STATUS)) |
| { |
| USHORT temp; |
| pStatus = (PCICC32_STATUS *)pOutputBuffer; |
| pciada = pDevExt->cc32[wModuleNumber]; |
| pStatus->dwInterface = wModuleNumber; |
| temp = READ_REGISTER_USHORT(pciada->pwIntCSR); |
| pStatus->bTimeout = (temp & 0x0020) ? 1 : 0; |
| pStatus->bInterrupt = (temp & 0x0004) ? 1 : 0; |
| } |
| else |
| Status = STATUS_BUFFER_TOO_SMALL; |
| // do what must be here in between --- end --- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_get_status(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // clears status |
| static BOOLEAN ioctl_clear_status_kernel(PVOID pvContext) |
| { |
| PCIADA *pciada = (PCIADA *)pvContext; |
| USHORT wCntrl; |
| // get current Cntrl - and clear interrupt |
| wCntrl = READ_REGISTER_USHORT(pciada->pwCntrl); |
| wCntrl &= ~0x0100; // disable |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, wCntrl); |
| wCntrl |= 0x0100; // enable again |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, wCntrl); |
| return TRUE; |
| } |
| static NTSTATUS ioctl_clear_status(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| PCIADA *pciada; |
| DEVICE_EXT *pDevExt; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| // do what must be here in between ----------- |
| pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_clear_status(%d)\n", wModuleNumber)); |
| // do what must be here in between ----------- |
| pciada = pDevExt->cc32[wModuleNumber]; |
| KeSynchronizeExecution(pciada->InterruptObject, ioctl_clear_status_kernel, pciada); |
| // do what must be here in between --- end --- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_clear_status() OK\n")); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // set parameter for this path for future access to CC32 |
| static NTSTATUS ioctl_access_para(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| PCICC32_ACCESS_COMMAND *pAccessPara; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| PCIADA *pciada = pDevExt->cc32[wModuleNumber]; |
| UNREFERENCED_PARAMETER(pciada); |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_access_para(%d)\n", wModuleNumber)); |
| pAccessPara = (PCICC32_ACCESS_COMMAND *)pInputBuffer; |
| // do here in between what has to be done ----------------- |
| file_obj->wAccessType = pAccessPara->wAccessType; |
| file_obj->wBlockTransfer = pAccessPara->wBlockTransfer; |
| pAccessPara->dwInterface = wModuleNumber; |
| switch (pAccessPara->wAccessType) |
| { |
| case WORD_ACCESS: file_obj->fRead = readWord; |
| file_obj->fWrite = writeWord; |
| break; |
| case LONG_ACCESS: file_obj->fRead = readLong; |
| file_obj->fWrite = writeLong; |
| break; |
| default: Status = STATUS_UNSUCCESSFUL; |
| break; |
| } |
| // do here in between what has to be done end ------------- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_access_para(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // allow or inhibit interrupt requests from either CC32 or thru local timeout |
| static NTSTATUS ioctl_control_interrupts(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| PCICC32_IRQ_CONTROL *pIrqControlIn, *pIrqControlOut; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| PCIADA *pciada = pDevExt->cc32[wModuleNumber]; |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_control_interrupts(%d)\n", wModuleNumber)); |
| pIrqControlIn = (PCICC32_IRQ_CONTROL *)pInputBuffer; |
| pIrqControlOut = (PCICC32_IRQ_CONTROL *)pOutputBuffer; |
| // do here in between what has to be done ----------------- |
| if (pIrqControlIn->wEnable) |
| { |
| // reserve the controlling of interrupts for this path |
| if ((pciada->pIrqControlFile == (FILE_OBJ *)NULL) || |
| (pciada->pIrqControlFile == file_obj)) |
| { |
| pciada->pIrqControlFile = file_obj; |
| globalInterruptEnable(pciada); |
| } |
| else |
| Status = STATUS_DEVICE_BUSY; |
| } |
| else |
| { |
| // nobody else is allowed to disable interrupts |
| if (pciada->pIrqControlFile == file_obj) |
| { |
| pciada->pIrqControlFile = (FILE_OBJ *)NULL; |
| globalInterruptDisable(pciada); |
| } |
| else |
| Status = STATUS_DEVICE_BUSY; |
| } |
| // give back if the user grants space |
| if (OutputLength >= sizeof(PCICC32_IRQ_CONTROL)) |
| { |
| pIrqControlOut->dwInterface = wModuleNumber; |
| pIrqControlOut->wEnable = globalInterruptEnabledStatus(pciada); |
| } |
| // do here in between what has to be done end ------------- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_control_interrupts(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // implements a blocking io-call to get irq status. |
| static BOOLEAN ioctl_irq_status_kernel(PVOID pvContext) |
| { |
| IOCTL_IRQ_STATUS_CONTEXT *context = (IOCTL_IRQ_STATUS_CONTEXT *)pvContext; |
| KIRQL oldIrql; |
| if (context->pciada->dwIrqStatus) |
| { |
| // there is a pending interrupt - return immediately |
| KdPrint(("ioctl_irq_status(), direct return (0x%08x)\n", context->pciada->dwIrqStatus)); |
| context->pIrqStatus->dwInterruptFlags = context->pciada->dwIrqStatus; |
| context->pciada->dwIrqStatus = 0; // release pending status |
| *context->irp_info = sizeof(PCICC32_IRQ_RESPONSE); |
| } |
| else |
| { |
| // make the request blocking |
| IoAcquireCancelSpinLock(&oldIrql); |
| if ((*context->Irp)->Cancel) // cancel while doing |
| { |
| KdPrint(("ioctl_irq_status(), canceled return\n")); |
| *context->Status = STATUS_CANCELLED; |
| } |
| else |
| { |
| KdPrint(("ioctl_irq_status(), blocking\n")); |
| if (context->pciada->pBlockingIrp != (PIRP *)NULL) |
| { |
| // a Irp is still waiting |
| *context->Status = STATUS_DEVICE_BUSY; |
| } |
| else |
| { |
| context->file_obj->blockingIrp = *context->Irp; |
| context->pciada->pBlockingIrp = &context->file_obj->blockingIrp; |
| *context->Status = STATUS_PENDING; |
| // mark irp as pending and return |
| IoMarkIrpPending(*context->Irp); |
| IoSetCancelRoutine(*context->Irp, CancelRequest); |
| } |
| } // if (Irp->Cancel) ... |
| } |
| return TRUE; |
| } |
| static NTSTATUS ioctl_irq_status(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| USHORT wModuleNumber; |
| IOCTL_IRQ_STATUS_CONTEXT context; |
| SET_BUFFERS_METHOD_BUFFERED; |
| context.file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| wModuleNumber = context.file_obj->uwAssociatedCC32; |
| context.pciada = pDevExt->cc32[wModuleNumber]; |
| context.pIrqStatus = (PCICC32_IRQ_RESPONSE *)pOutputBuffer; |
| context.Status = &Status; |
| context.irp_info = &irp_info; |
| context.Irp = &Irp; |
| KdPrint(("ioctl_irq_status(%d)\n", wModuleNumber)); |
| // do here in between what has to be done ----------------- |
| if (OutputLength < sizeof(PCICC32_IRQ_RESPONSE)) |
| Status = STATUS_BUFFER_TOO_SMALL; |
| else |
| { |
| context.pIrqStatus->dwInterface = wModuleNumber; |
| KeSynchronizeExecution(context.pciada->InterruptObject, ioctl_irq_status_kernel, &context); |
| } |
| // do here in between what has to be done end ------------- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_irq_status(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // for test and debug purposes: direkt access to PLX LCR space |
| static NTSTATUS ioctl_access_lcr(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| PCIADA *pciada = pDevExt->cc32[wModuleNumber]; |
| PCICC32_LCR_ACCESS *pAccessOut; |
| PCICC32_LCR_ACCESS *pAccessIn; |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_access_lcr(%d)\n", wModuleNumber)); |
| pAccessOut = (PCICC32_LCR_ACCESS *)pOutputBuffer; |
| pAccessIn = (PCICC32_LCR_ACCESS *)pInputBuffer; |
| // do here in between what has to be done ----------------- |
| if (OutputLength < sizeof(PCICC32_LCR_ACCESS)) |
| Status = STATUS_BUFFER_TOO_SMALL; |
| else |
| { |
| *pAccessOut = *pAccessIn; |
| pAccessOut->dwInterface = wModuleNumber; |
| if (pAccessIn->wRegisterAddress <= 0x52) |
| { |
| // 1st part: long word accesses |
| if (pAccessIn->bBytesLane == LONG_ACCESS) |
| { |
| if (pAccessIn->wRegisterAddress & 0x0003) |
| Status = STATUS_INSTRUCTION_MISALIGNMENT; |
| else |
| { |
| ULONG *pdwVirtAddress; |
| ULONG dwDummy; |
| pdwVirtAddress = (ULONG *)((ULONG)pciada->pvVirtLcr + pAccessIn->wRegisterAddress); |
| switch (pAccessIn->bAccessMode) |
| { |
| case LCR_WRITE: |
| WRITE_REGISTER_ULONG(pdwVirtAddress, pAccessIn->dwContent); |
| pAccessOut->dwContent = READ_REGISTER_ULONG(pdwVirtAddress); |
| break; |
| case LCR_OR: |
| dwDummy = READ_REGISTER_ULONG(pdwVirtAddress); |
| dwDummy |= pAccessIn->dwContent; |
| WRITE_REGISTER_ULONG(pdwVirtAddress, dwDummy); |
| pAccessOut->dwContent = READ_REGISTER_ULONG(pdwVirtAddress); |
| break; |
| case LCR_AND: |
| dwDummy = READ_REGISTER_ULONG(pdwVirtAddress); |
| dwDummy &= pAccessIn->dwContent; |
| WRITE_REGISTER_ULONG(pdwVirtAddress, dwDummy); |
| pAccessOut->dwContent = READ_REGISTER_ULONG(pdwVirtAddress); |
| break; |
| case LCR_WRITE_ONLY: |
| WRITE_REGISTER_ULONG(pdwVirtAddress, pAccessIn->dwContent); |
| break; |
| case LCR_READ: |
| pAccessOut->dwContent = READ_REGISTER_ULONG(pdwVirtAddress); |
| break; |
| default: Status = STATUS_ILLEGAL_INSTRUCTION; |
| } |
| } |
| } |
| // 2nd part: short word accesses |
| if (pAccessIn->bBytesLane == WORD_ACCESS) |
| { |
| if (pAccessIn->wRegisterAddress & 0x0001) |
| Status = STATUS_INSTRUCTION_MISALIGNMENT; |
| else |
| { |
| USHORT *pwVirtAddress; |
| USHORT wDummy; |
| pwVirtAddress = (USHORT *)((ULONG)pciada->pvVirtLcr + pAccessIn->wRegisterAddress); |
| switch (pAccessIn->bAccessMode) |
| { |
| case LCR_WRITE: |
| WRITE_REGISTER_USHORT(pwVirtAddress, (USHORT)pAccessIn->dwContent); |
| pAccessOut->dwContent = READ_REGISTER_USHORT(pwVirtAddress); |
| break; |
| case LCR_OR: |
| wDummy = READ_REGISTER_USHORT(pwVirtAddress); |
| wDummy |= (USHORT)pAccessIn->dwContent; |
| WRITE_REGISTER_USHORT(pwVirtAddress, wDummy); |
| pAccessOut->dwContent = READ_REGISTER_USHORT(pwVirtAddress); |
| break; |
| case LCR_AND: |
| wDummy = READ_REGISTER_USHORT(pwVirtAddress); |
| wDummy &= (USHORT)pAccessIn->dwContent; |
| WRITE_REGISTER_USHORT(pwVirtAddress, wDummy); |
| pAccessOut->dwContent = READ_REGISTER_USHORT(pwVirtAddress); |
| break; |
| case LCR_WRITE_ONLY: |
| WRITE_REGISTER_USHORT(pwVirtAddress, (USHORT)pAccessIn->dwContent); |
| break; |
| case LCR_READ: |
| pAccessOut->dwContent = READ_REGISTER_USHORT(pwVirtAddress); |
| break; |
| default: Status = STATUS_ILLEGAL_INSTRUCTION; |
| break; |
| } |
| } |
| } |
| // 3rd part: check illegal byte lanes |
| if (!((pAccessIn->bBytesLane == LONG_ACCESS) || (pAccessIn->bBytesLane == WORD_ACCESS))) |
| Status = STATUS_ILLEGAL_INSTRUCTION; |
| } |
| else |
| Status = STATUS_ILLEGAL_INSTRUCTION; |
| } |
| // do here in between what has to be done end ------------- |
| if (Status == STATUS_SUCCESS) |
| irp_info = sizeof(PCICC32_LCR_ACCESS); |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_access_lcr(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // the ultimate jumptable for ioctl |
| // |
| NTSTATUS (*ioctl[])(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) = |
| { |
| ioctl_dummy, // 0 |
| ioctl_dummy, // 4 |
| ioctl_get_status, // 8 |
| ioctl_clear_status, // 0x0c |
| ioctl_access_para, // 0x10 |
| ioctl_control_interrupts, // 0x14 |
| ioctl_dummy, // 0x18 |
| ioctl_irq_status, // 0x1c |
| ioctl_access_lcr // 0x20 |
| }; |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer= ; TODO: set DriverVer in stampinf property pages |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NT$ARCH$ |
| [Standard.NT$ARCH$] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll |
| [SourceDisksFiles] |
| WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = $KMDFVERSION$ |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32_v.h |
|---|
| 0,0 → 1,34 |
| #ifndef __PCICC32_V_H__ |
| #define __PCICC32_V_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32terface from ARW Elektronik, Germany --------- |
| // header file belonging to pcicc32_v.c |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 02.07.2000 |
| // |
| //------------------------------------------------------------------------- |
| // DEFINES |
| // |
| #include <pcicc32_drv.h> |
| //------------------------------------------------------------------------- |
| // PROTOTYPES |
| // |
| NTSTATUS PCICC32ScanCC32(PDEVICE_OBJECT deviceObj); |
| NTSTATUS PCICC32DeInitPCIADAs(PDEVICE_OBJECT deviceObj); |
| void enableCC32(PCIADA *pciada); |
| void disableCC32(PCIADA *pciada); |
| #endif // __PCICC32_V_H__ |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32_io.h |
|---|
| 0,0 → 1,30 |
| #ifndef __PCIVME_IO_H__ |
| #define __PCIVME_IO_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCIVME interface from ARW Elektronik, Germany --------- |
| // the ioctl functions header file |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // ntddk.h must included first! |
| // |
| // what who when |
| // started AR 03.07.99 |
| // |
| //------------------------------------------------------------------------ |
| // FUNCTIONS + EXTERNALS |
| // |
| NTSTATUS (*ioctl[])(PDEVICE_OBJECT device_Obj, PIRP irp, PIO_STACK_LOCATION IrpStack); |
| void fMyDefferedRoutine(PKDPC Dpc, PVOID pvDevice_object, PVOID pvPciada, PVOID Nothing); |
| void CancelRequest(PDEVICE_OBJECT device_Obj, PIRP Irp); |
| #endif // __PCIVME_IO_H__ |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/pcicc32.h |
|---|
| 0,0 → 1,157 |
| #ifndef __PCICC32_H__ |
| #define __PCICC32_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany -------- |
| // IO definitions and common data structures between application and driver |
| // |
| // (c) 2000,2001 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 16.04.2000 |
| // added irq functionality AR 24.02.2001 |
| // added until 'not Q' read/write mode AR 03.03.2001 |
| // added AUTOREAD AR 17.03.2001 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| // #include <devioctl.h> must be declared before inclusion when used for driver |
| // #include <winioctl.h> must be declared before inclusion when used for applications |
| //------------------------------------------------------------------------- |
| // DEFINES |
| // |
| //---------------------------------------------------------------------------------------- |
| // macros for simple CAMAC NAF address calculation |
| // |
| #define NAF(n, a, f) ((ULONG)((n << 10) + (a << 6) + ((f & 0xf) << 2))) |
| // to get a compatible view to WIN95 driver |
| #define USER_CONTROL_CODE(x) (x) |
| // VPCIC32D_ATTACH_CC32 and VPCIC32D_DETACH_CC32 are incompatible to WINNT - please use read and write commands |
| // get the interrupt and timeout status from a CC32 interface (0x00220008) |
| #define PCICC32_GET_STATUS CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(2),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // clear the timeout status of a CC32 interface (0x0022000C) |
| #define PCICC32_CLEAR_STATUS CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(3),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // set the access parameter for this file (0x00220010) |
| #define PCICC32_SET_ACCESS_PARA CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(4),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // allow or inhibit CC32 interrupt requests (0x00220014) |
| #define PCICC32_CONTROL_INTERRUPTS CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(5),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // requests thru blocking io the status of a pending or a rising interrupt (0x0022001C) |
| #define PCICC32_INSTALL_IRQ_BLOCK CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(7),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // requests to access the PLX LCR for test and debug (0x00220020) |
| #define PCICC32_ACCESS_LCR CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(8),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // set to check for control-code overflow |
| #define PCICC32_LAST_CTL_CODE PCICC32_ACCESS_LCR |
| // mask bits for interrupt status |
| #define LAM_IRQ 0x00FFFFFF // there was a LAM responible for the timeout |
| #define CONNECTION_TIMEOUT 0x08000000 // irq raised through a connection timout |
| #define LAM_BUS_OR 0x10000000 // a LAM-BUS-OR is pending |
| #define LAM_NOT_OR 0x20000000 // a LAM-NOT-OR is pending |
| #define LAM_AND_OR 0x40000000 // a LAM-AND-OR is pending |
| #define LAM_FF 0x80000000 // the LAM-Flip-Flop was set |
| // switches for PCICC32_ACCESS_COMMAND.wAccessType |
| #define WORD_ACCESS (UCHAR)2 // word |
| #define LONG_ACCESS (UCHAR)4 // long |
| // define bits for PCICC32_ACCESS_COMMAND.wBlockTransfer |
| #define UNTIL_NOT_Q 0x0001 // read/write unttil 'not Q' switch |
| #define AUTOREAD 0x0002 // PCIADA data pipelining access tuner switch |
| // data lane size constants for PCICC32_ACCESS_LCR |
| #define BYTE_ACCESS (UCHAR)1 // write byte wise (illegal) |
| #define WORD_ACCESS (UCHAR)2 // word |
| #define LONG_ACCESS (UCHAR)4 // long |
| // PCICC32_ACCESS_LCR access constants |
| #define LCR_READ 0 // read only access |
| #define LCR_WRITE 1 // write and read back access |
| #define LCR_OR 2 // read, bitwise 'or' content and read back access |
| #define LCR_AND 3 // read, bitwise 'and' content and read back access |
| #define LCR_WRITE_ONLY 4 // do not read back after write |
| // this structure is output from VPCIC32_GET_STATUS call |
| typedef struct |
| { |
| ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
| USHORT bTimeout; // denotes a pending PCIADA timeout |
| USHORT bInterrupt; // denotes a pending LAM interrupt |
| } PCICC32_STATUS; |
| // this structure sets the access parameter for following reads or writes to this path |
| typedef struct |
| { |
| ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
| USHORT wAccessType; // set the current access type (WORD_ACCESS, LONG_ACCESS) |
| USHORT wBlockTransfer; // set AUTOREAD or UNTIL_NOT_Q |
| } PCICC32_ACCESS_COMMAND; |
| // this structure is used to control the interrupts |
| typedef struct |
| { |
| ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
| USHORT wEnable; // a 1 allows, a 0 inhibits interrupt requests |
| } PCICC32_IRQ_CONTROL; |
| // this structure returns from a blocking interrupt status call |
| typedef struct |
| { |
| ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
| ULONG dwInterruptFlags; // the return status at the return of the blocking call |
| } PCICC32_IRQ_RESPONSE; |
| // structure to access the local configuration space of PLX chip (test / debug only) with PCICC32_ACCESS_LCR |
| typedef struct |
| { |
| ULONG dwInterface; // here dummy 'cause of compatibility to WIN95 |
| ULONG dwContent; // content to write, and, or |
| USHORT wRegisterAddress; // address offset of LCR register |
| UCHAR bAccessMode; // LCR_READ, write, or, and |
| UCHAR bBytesLane; // the data access width |
| } PCICC32_LCR_ACCESS; |
| #endif // __PCICC32_H__ |
| /drivers/wiener_pcicc32/pcicc32/pcicc32/guid.h |
|---|
| 0,0 → 1,6 |
| INTERFACENAME = { /* c4ad1dfa-3e35-4659-bf2b-c83cda6833e1 */ |
| 0xc4ad1dfa, |
| 0x3e35, |
| 0x4659, |
| {0xbf, 0x2b, 0xc8, 0x3c, 0xda, 0x68, 0x33, 0xe1} |
| }; |
| /drivers/wiener_pcicc32/pcicc32/pcicc32.sln |
|---|
| 0,0 → 1,105 |
| |
| Microsoft Visual Studio Solution File, Format Version 12.00 |
| # Visual Studio 2013 |
| VisualStudioVersion = 12.0.30110.0 |
| MinimumVisualStudioVersion = 10.0.40219.1 |
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcicc32", "pcicc32\pcicc32.vcxproj", "{E355652A-FAA5-429D-8308-AFEA65C58B53}" |
| EndProject |
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcicc32 Package", "pcicc32 Package\pcicc32 Package.vcxproj", "{E52219C0-0B63-42B6-BBBD-5718FDE46FDB}" |
| ProjectSection(ProjectDependencies) = postProject |
| {E355652A-FAA5-429D-8308-AFEA65C58B53} = {E355652A-FAA5-429D-8308-AFEA65C58B53} |
| EndProjectSection |
| EndProject |
| Global |
| GlobalSection(SolutionConfigurationPlatforms) = preSolution |
| Win7 Debug|Win32 = Win7 Debug|Win32 |
| Win7 Debug|x64 = Win7 Debug|x64 |
| Win7 Release|Win32 = Win7 Release|Win32 |
| Win7 Release|x64 = Win7 Release|x64 |
| Win8 Debug|Win32 = Win8 Debug|Win32 |
| Win8 Debug|x64 = Win8 Debug|x64 |
| Win8 Release|Win32 = Win8 Release|Win32 |
| Win8 Release|x64 = Win8 Release|x64 |
| Win8.1 Debug|Win32 = Win8.1 Debug|Win32 |
| Win8.1 Debug|x64 = Win8.1 Debug|x64 |
| Win8.1 Release|Win32 = Win8.1 Release|Win32 |
| Win8.1 Release|x64 = Win8.1 Release|x64 |
| EndGlobalSection |
| GlobalSection(ProjectConfigurationPlatforms) = postSolution |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Debug|Win32.ActiveCfg = Win7 Debug|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Debug|Win32.Build.0 = Win7 Debug|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Debug|Win32.Deploy.0 = Win7 Debug|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Debug|x64.ActiveCfg = Win7 Debug|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Debug|x64.Build.0 = Win7 Debug|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Debug|x64.Deploy.0 = Win7 Debug|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Release|Win32.ActiveCfg = Win7 Release|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Release|Win32.Build.0 = Win7 Release|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Release|Win32.Deploy.0 = Win7 Release|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Release|x64.ActiveCfg = Win7 Release|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Release|x64.Build.0 = Win7 Release|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win7 Release|x64.Deploy.0 = Win7 Release|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Debug|Win32.ActiveCfg = Win8 Debug|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Debug|Win32.Build.0 = Win8 Debug|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Debug|Win32.Deploy.0 = Win8 Debug|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Debug|x64.ActiveCfg = Win8 Debug|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Debug|x64.Build.0 = Win8 Debug|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Debug|x64.Deploy.0 = Win8 Debug|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Release|Win32.ActiveCfg = Win8 Release|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Release|Win32.Build.0 = Win8 Release|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Release|Win32.Deploy.0 = Win8 Release|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Release|x64.ActiveCfg = Win8 Release|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Release|x64.Build.0 = Win8 Release|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8 Release|x64.Deploy.0 = Win8 Release|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Debug|Win32.ActiveCfg = Win8.1 Debug|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Debug|Win32.Build.0 = Win8.1 Debug|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Debug|Win32.Deploy.0 = Win8.1 Debug|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Debug|x64.ActiveCfg = Win8.1 Debug|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Debug|x64.Build.0 = Win8.1 Debug|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Debug|x64.Deploy.0 = Win8.1 Debug|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Release|Win32.ActiveCfg = Win8.1 Release|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Release|Win32.Build.0 = Win8.1 Release|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Release|Win32.Deploy.0 = Win8.1 Release|Win32 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Release|x64.ActiveCfg = Win8.1 Release|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Release|x64.Build.0 = Win8.1 Release|x64 |
| {E355652A-FAA5-429D-8308-AFEA65C58B53}.Win8.1 Release|x64.Deploy.0 = Win8.1 Release|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Debug|Win32.ActiveCfg = Win7 Debug|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Debug|Win32.Build.0 = Win7 Debug|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Debug|Win32.Deploy.0 = Win7 Debug|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Debug|x64.ActiveCfg = Win7 Debug|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Debug|x64.Build.0 = Win7 Debug|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Debug|x64.Deploy.0 = Win7 Debug|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Release|Win32.ActiveCfg = Win7 Release|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Release|Win32.Build.0 = Win7 Release|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Release|Win32.Deploy.0 = Win7 Release|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Release|x64.ActiveCfg = Win7 Release|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Release|x64.Build.0 = Win7 Release|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win7 Release|x64.Deploy.0 = Win7 Release|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Debug|Win32.ActiveCfg = Win8 Debug|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Debug|Win32.Build.0 = Win8 Debug|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Debug|Win32.Deploy.0 = Win8 Debug|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Debug|x64.ActiveCfg = Win8 Debug|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Debug|x64.Build.0 = Win8 Debug|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Debug|x64.Deploy.0 = Win8 Debug|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Release|Win32.ActiveCfg = Win8 Release|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Release|Win32.Build.0 = Win8 Release|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Release|Win32.Deploy.0 = Win8 Release|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Release|x64.ActiveCfg = Win8 Release|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Release|x64.Build.0 = Win8 Release|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8 Release|x64.Deploy.0 = Win8 Release|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Debug|Win32.ActiveCfg = Win8.1 Debug|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Debug|Win32.Build.0 = Win8.1 Debug|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Debug|Win32.Deploy.0 = Win8.1 Debug|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Debug|x64.ActiveCfg = Win8.1 Debug|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Debug|x64.Build.0 = Win8.1 Debug|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Debug|x64.Deploy.0 = Win8.1 Debug|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Release|Win32.ActiveCfg = Win8.1 Release|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Release|Win32.Build.0 = Win8.1 Release|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Release|Win32.Deploy.0 = Win8.1 Release|Win32 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Release|x64.ActiveCfg = Win8.1 Release|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Release|x64.Build.0 = Win8.1 Release|x64 |
| {E52219C0-0B63-42B6-BBBD-5718FDE46FDB}.Win8.1 Release|x64.Deploy.0 = Win8.1 Release|x64 |
| EndGlobalSection |
| GlobalSection(SolutionProperties) = preSolution |
| HideSolutionNode = FALSE |
| EndGlobalSection |
| EndGlobal |
| /drivers/wiener_pcicc32/pcicc32/Win7Release/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.20.51 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win7Release/pcicc32 Package/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.20.51 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win7Release/pcicc32 Package/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Release/pcicc32 Package/pcicc32.cat |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Release/pcicc32 Package/WdfCoinstaller01011.dll |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Release/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Release/pcicc32.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Release/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.17.794 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Release/pcicc32 Package/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.17.794 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Release/pcicc32 Package/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Release/pcicc32 Package/pcicc32.cat |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Release/pcicc32 Package/WdfCoinstaller01011.dll |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Release/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Release/pcicc32.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Release/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.18.506 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win8Release/pcicc32 Package/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.18.506 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win8Release/pcicc32 Package/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Release/pcicc32 Package/pcicc32.cat |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Release/pcicc32 Package/WdfCoinstaller01011.dll |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Release/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Release/pcicc32.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Debug/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.20.773 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win7Debug/pcicc32 Package/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.20.773 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win7Debug/pcicc32 Package/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Debug/pcicc32 Package/pcicc32.cat |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Debug/pcicc32 Package/WdfCoinstaller01011.dll |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Debug/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Debug/pcicc32.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Debug/pcicc32Package.cer |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win7Debug/pcicc32.cer |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Debug/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.19.198 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Debug/pcicc32 Package/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.19.198 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Debug/pcicc32 Package/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Debug/pcicc32 Package/pcicc32.cat |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Debug/pcicc32 Package/WdfCoinstaller01011.dll |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Debug/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Debug/pcicc32.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Debug/pcicc32Package.cer |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8.1Debug/pcicc32.cer |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Debug/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.21.688 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win8Debug/pcicc32 Package/pcicc32.inf |
|---|
| 0,0 → 1,91 |
| ; |
| ; pcicc32.inf |
| ; |
| [Version] |
| Signature="$WINDOWS NT$" |
| Class=Sample ; TODO: edit Class |
| ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid |
| Provider=%ManufacturerName% |
| CatalogFile=pcicc32.cat |
| DriverVer=02/10/2014,7.32.21.688 |
| [DestinationDirs] |
| DefaultDestDir = 12 |
| ; ================= Class section ===================== |
| [ClassInstall32] |
| Addreg=SampleClassReg |
| [SampleClassReg] |
| HKR,,,0,%ClassName% |
| HKR,,Icon,,-5 |
| [SourceDisksNames] |
| 1 = %DiskName%,,,"" |
| [SourceDisksFiles] |
| pcicc32.sys = 1,, |
| ;***************************************** |
| ; Install Section |
| ;***************************************** |
| [Manufacturer] |
| %ManufacturerName%=Standard,NTx86 |
| [Standard.NTx86] |
| %pcicc32.DeviceDesc%=pcicc32_Device, Root\pcicc32 ; TODO: edit hw-id |
| [pcicc32_Device.NT] |
| CopyFiles=Drivers_Dir |
| [Drivers_Dir] |
| pcicc32.sys |
| ;-------------- Service installation |
| [pcicc32_Device.NT.Services] |
| AddService = pcicc32,%SPSVCINST_ASSOCSERVICE%, pcicc32_Service_Inst |
| ; -------------- pcicc32 driver install sections |
| [pcicc32_Service_Inst] |
| DisplayName = %pcicc32.SVCDESC% |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 1 ; SERVICE_ERROR_NORMAL |
| ServiceBinary = %12%\pcicc32.sys |
| LoadOrderGroup = Extended Base |
| ; |
| ;--- pcicc32_Device Coinstaller installation ------ |
| ; |
| [DestinationDirs] |
| pcicc32_Device_CoInstaller_CopyFiles = 11 |
| [pcicc32_Device.NT.CoInstallers] |
| AddReg=pcicc32_Device_CoInstaller_AddReg |
| CopyFiles=pcicc32_Device_CoInstaller_CopyFiles |
| [pcicc32_Device_CoInstaller_AddReg] |
| HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" |
| [pcicc32_Device_CoInstaller_CopyFiles] |
| WdfCoInstaller01011.dll |
| [SourceDisksFiles] |
| WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames |
| [pcicc32_Device.NT.Wdf] |
| KmdfService = pcicc32, pcicc32_wdfsect |
| [pcicc32_wdfsect] |
| KmdfLibraryVersion = 1.11 |
| [Strings] |
| SPSVCINST_ASSOCSERVICE= 0x00000002 |
| ManufacturerName="" ; TODO: add ManufacturerName |
| ClassName="Samples" ; TODO: edit ClassName |
| DiskName = "pcicc32 Installation Disk" |
| pcicc32.DeviceDesc = "pcicc32 Device" |
| pcicc32.SVCDESC = "pcicc32 Service" |
| /drivers/wiener_pcicc32/pcicc32/Win8Debug/pcicc32 Package/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Debug/pcicc32 Package/pcicc32.cat |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Debug/pcicc32 Package/WdfCoinstaller01011.dll |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Debug/pcicc32.sys |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Debug/pcicc32.pdb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Debug/pcicc32Package.cer |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32/Win8Debug/pcicc32.cer |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/SOURCE/pcicc32_i.c |
|---|
| 0,0 → 1,275 |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany -------- |
| // all around irq handling |
| // |
| // (c) 1999-2002 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 01.08.1999 |
| // first release 1.0 AR 17.10.1999 |
| // IoConnectInterrupt, share vector now true AR 04.03.2000 |
| // globalInterruptEnabledStatus() added AR 24.02.2001 |
| // added IRQ handling AR 24.02.2001 |
| // added WITH_IRQS switch to switsch off irqs AR 04.10.2001 |
| // changed making procedure (only VCC > 6.0) AR 30.05.2002 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #define WITH_IRQS // comment out for interrupt handling excludes |
| // ACHTUNG TEST |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <pcicc32_drv.h> |
| #include <pcicc32_i.h> |
| #include <pcicc32.h> |
| #include <pcicc32_local.h> |
| //------------------------------------------------------------------------ |
| // DEFINES |
| // |
| #ifndef DWORD |
| #define DWORD ULONG |
| #endif |
| #ifndef WORD |
| #define WORD USHORT |
| #endif |
| //------------------------------------------------------------------------ |
| // GLOBALS |
| // |
| //------------------------------------------------------------------------ |
| // FUNCTIONS |
| // |
| //------------------------------------------------------------------------ |
| // enable and disable of interrupts |
| // |
| void globalInterruptEnable(PCIADA *pciada) |
| { |
| #ifdef WITH_IRQS |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, ENABLE_PCIADA_IRQS); |
| #endif |
| } |
| void globalInterruptDisable(PCIADA *pciada) |
| { |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, DISABLE_PCIADA_IRQS); |
| } |
| unsigned short globalInterruptEnabledStatus(PCIADA *pciada) |
| { |
| unsigned short wStatus; |
| wStatus = READ_REGISTER_USHORT(pciada->pwIntCSR); |
| if ((wStatus & ENABLE_PCIADA_IRQS) == ENABLE_PCIADA_IRQS) |
| return 1; |
| return 0; |
| } |
| //------------------------------------------------------------------------ |
| // determine which interrupt and evaluates status if appropriate |
| // |
| static int evaluateIrqStatus(PCIADA *pciada, ULONG *dwIrqStatus) |
| { |
| volatile USHORT wCntrl; |
| int result = 0; |
| wCntrl = READ_REGISTER_USHORT(pciada->pwCntrl); |
| if (wCntrl & 0x100) // pciada switched on ? |
| { |
| volatile USHORT wIntCSR = READ_REGISTER_USHORT(pciada->pwIntCSR); |
| if (wIntCSR & 0x0040) // are the interrupts enabled? |
| { |
| if (wIntCSR & 0x20) |
| { |
| // it's the pci interrupt # 2 |
| globalInterruptDisable(pciada); // disable following interrupts |
| // get current Cntrl - and clear interrupt |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, (USHORT)(wCntrl & ~0x0100)); // disable |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, wCntrl); // enable again |
| *dwIrqStatus = CONNECTION_TIMEOUT; |
| result = 1; |
| } |
| if (wIntCSR & 0x04) |
| { |
| globalInterruptDisable(pciada); // disable following interrupts |
| *dwIrqStatus = READ_REGISTER_ULONG(_DWORD_NAF(pciada->pvVirtIfr, 28, 2, 0)); |
| // clear pending interrupt - LAM-FF |
| WRITE_REGISTER_USHORT(_WORD_NAF(pciada->pvVirtIfr, 28, 0, 16), 0); |
| result = 1; |
| } |
| } |
| } |
| return result; |
| } |
| //------------------------------------------------------------------------ |
| // main interrupt handler function |
| // |
| static BOOLEAN irq_service(PKINTERRUPT Interrupt, PVOID ServiceContext) |
| { |
| PCIADA *pciada = (PCIADA *)ServiceContext; |
| #ifndef WITH_IRQS |
| return FALSE; |
| #endif |
| if (!evaluateIrqStatus(pciada, &pciada->dwIrqStatus)) |
| { |
| // KdPrint(("Not my irq.\n")); |
| return FALSE; |
| } |
| // fire custom deffered procedure call |
| KeInsertQueueDpc(&pciada->kDPCobj, (PVOID)pciada, (PVOID)&pciada->dwIrqStatus); |
| KdPrint(("irq_service(0x%08x)\n", pciada->dwIrqStatus)); |
| return TRUE; |
| } |
| //------------------------------------------------------------------------ |
| // translate interrupt resources for PCIADAs to hardware independent ones |
| // |
| NTSTATUS PCICC32TranslateInterrupt(PDEVICE_OBJECT device_Obj) |
| { |
| int i; |
| NTSTATUS result = STATUS_SUCCESS; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32TranslateInterrupt()\n")); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| KdPrint(("In - Bus:%d, IrqLine:%d\n", pciada->Bus, pciada->Irql)); |
| if (pciada->Irql) |
| { |
| pciada->Vector = HalGetInterruptVector(PCIBus, pciada->Bus, |
| pciada->Irql, pciada->Vector, |
| &pciada->Irql, &pciada->Affinity); |
| KdPrint(("Out - Irql:%d, Vector: %d, Affinity:%d\n", pciada->Irql, pciada->Vector, pciada->Affinity)); |
| } |
| else |
| result = STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT; |
| } |
| return result; |
| } |
| //------------------------------------------------------------------------ |
| // connect service routines to all PCIADA interrupts |
| // |
| NTSTATUS PCICC32ConnectInterrupt(PDEVICE_OBJECT device_Obj) |
| { |
| #ifdef WITH_IRQS |
| int i; |
| NTSTATUS result = STATUS_SUCCESS; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32ConnectInterrupt()\n")); |
| // connect the interrupts to service routines |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| pciada->InterruptObject = NULL; |
| if (pciada->Vector) |
| result = IoConnectInterrupt(&pciada->InterruptObject, |
| irq_service, |
| (PVOID)pciada, |
| NULL, |
| pciada->Vector, |
| pciada->Irql, |
| pciada->Irql, |
| LevelSensitive, |
| TRUE, |
| pciada->Affinity, |
| FALSE); |
| KdPrint(("irq_service:%p, VirtVect:%d, Irql:%d, hIrql:%d, Aff:0x%08x, Status:0x%08x\n", |
| irq_service, pciada->Vector, pciada->Irql, |
| pciada->Irql, pciada->Affinity, result)); |
| if (result != STATUS_SUCCESS) |
| break; |
| } |
| if (result == STATUS_SUCCESS) |
| { |
| KdPrint(("PCICC32ConnectInterrupt() OK.\n")); |
| } |
| return result; |
| #else |
| return STATUS_SUCCESS; |
| #endif |
| } |
| //------------------------------------------------------------------------ |
| // dis-connect service routines to all PCIADA interrupts |
| // |
| NTSTATUS PCICC32DisConnectInterrupt(PDEVICE_OBJECT device_Obj) |
| { |
| #ifdef WITH_IRQS |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("DisConnectInterrupt()\n")); |
| // dis connect the interrupts to service routines |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| KdPrint(("IrqObj:0x%08x\n", pciada->InterruptObject)); |
| if (pciada->InterruptObject) |
| { |
| IoDisconnectInterrupt(pciada->InterruptObject); |
| pciada->InterruptObject = 0; |
| } |
| } |
| #endif |
| return STATUS_SUCCESS; |
| } |
| /drivers/wiener_pcicc32/SOURCE/Release/pcicc32.inf |
|---|
| 0,0 → 1,104 |
| ;=========================================================== |
| ; File : pcicc32.inf |
| ; |
| ; Abstract: Windows 2000 INF for PCICC32 boards from ARW Elektronik, Germany |
| ; |
| ;=========================================================== |
| [Version] |
| Signature = $CHICAGO$ |
| Provider = %ARW% |
| Class = %PCICC32_class_name% |
| ClassGUID = {c4ad1dfa-3e35-4659-bf2b-c83cda6833e1} |
| DriverVer = 06/18/2002,2.3.0.4 |
| ;----------------------------------------------------------- |
| ; Driver information |
| ;----------------------------------------------------------- |
| [Manufacturer] |
| %ARW_MFG% = ARW.Mfg |
| [ARW.Mfg] |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050&REV_01 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050&REV_02 |
| [ClassInstall32] |
| AddReg=PCICC32_class_addreg |
| [PCICC32_class_addreg] |
| HKR,,,,%PCICC32_class_name% |
| HKR,,Icon,0,0 |
| ;----------------------------------------------------------- |
| ; General installation section |
| ;----------------------------------------------------------- |
| [CopyFiles_9050] |
| pcicc32.sys,,,2 |
| ;----------------------------------------------------------- |
| ; Windows 2000 installation section |
| ;----------------------------------------------------------- |
| [Install_PCICC32.NT] |
| AddReg = AddRegistry_NT_9050 |
| CopyFiles = CopyFiles_9050 |
| [Install_PCICC32.NT.Services] |
| AddService = pcicc32, 0x00000002, Service_Inst_9050, EventLog_Inst_9050 |
| [AddRegistry_NT_9050] |
| [Service_Inst_9050] |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 0 ; SERVICE_ERROR_IGNORE |
| ServiceBinary = %12%\pcicc32.sys |
| ;----------------------------------------------------------- |
| ; Event log registry entries |
| ;----------------------------------------------------------- |
| [EventLog_Inst_9050] |
| AddReg = EventLog_AddReg_9050 |
| [EventLog_AddReg_9050] |
| HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\Drivers\pcicc32.sys" |
| HKR,,TypesSupported,0x00010001,7 |
| ;----------------------------------------------------------- |
| ; Source file information |
| ;----------------------------------------------------------- |
| [SourceDisksNames.x86] |
| 1 = %InstallDisk%,"",1 |
| [SourceDisksFiles] |
| pcicc32.sys = 1 |
| [DestinationDirs] |
| DefaultDestDir = 12 ; drivers |
| ;----------------------------------------------------------- |
| ; String information |
| ;----------------------------------------------------------- |
| [Strings] |
| InstallDisk = "ARW Elektronik Windows Driver Installation Disk" |
| ARW_MFG = "ARW Elektronik, Germany" |
| ARW = "ARW Elektronik, Germany" |
| PCICC32_class_name = "ARW BUS Interfaces" |
| /drivers/wiener_pcicc32/SOURCE/Release/pcicc32.SYS |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/SOURCE/pcicc32.dsw |
|---|
| 0,0 → 1,29 |
| Microsoft Developer Studio Workspace File, Format Version 6.00 |
| # WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! |
| ############################################################################### |
| Project: "pcicc32"=.\pcicc32.dsp - Package Owner=<4> |
| Package=<5> |
| {{{ |
| }}} |
| Package=<4> |
| {{{ |
| }}} |
| ############################################################################### |
| Global: |
| Package=<5> |
| {{{ |
| }}} |
| Package=<3> |
| {{{ |
| }}} |
| ############################################################################### |
| /drivers/wiener_pcicc32/SOURCE/pcicc32_drv.c |
|---|
| 0,0 → 1,1062 |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 (CAMAC) interface of ARW Elektronik, Germany -- |
| // the main body of the driver |
| // |
| // (c) 2000-2002 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistribute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started out of pcivme sources AR 25.03.2000 |
| // added IRQ handling AR 24.02.2001 |
| // Added AUTOREAD functionality AR 17.03.2001 |
| // Added LCR_READ AR 31.03.2001 |
| // resource allocation registers idle entries too AR 25.11.2001 |
| // changed making procedure (only VCC > 6.0) AR 30.05.2002 |
| // totally rearanged resource alloc for WIN2000 AR 01.06.2002 |
| // version 2.14 eleminates PLXBUG in WIN2000 AR 05.06.2002 |
| // added KeSynchronizeExecution for interrupt sync AR 16.06.2002 |
| // |
| //------------------------------------------------------------------------ |
| // DEFINES |
| // |
| #ifndef DWORD |
| #define DWORD ULONG |
| #endif |
| #ifndef WORD |
| #define WORD USHORT |
| #endif |
| #define CTL_INDEX(x) ((x >> 2) & 0xFF) // get user control code as index |
| #define RESOURCE_ENTRY_COUNT 6 // WIN2000 forces to claim all entries |
| #define DOS_DEVICE_NAME L"\\DosDevices\\PCICC32:" |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <devioctl.h> |
| // #include <wdm.h> |
| #include <pcicc32_drv.h> |
| #include <pcicc32.h> |
| #include <pcicc32_v.h> |
| #include <pcicc32_i.h> |
| #include <pcicc32_io.h> |
| //------------------------------------------------------------------------ |
| // TYPEDEFS |
| // |
| typedef struct |
| { |
| FILE_OBJ *file_obj; |
| PCIADA *pciada; |
| PVOID pOutputBuffer; |
| PVOID pInputBuffer; |
| ULONG Address; |
| DWORD Length; |
| } SYNC_CONTEXT; |
| //------------------------------------------------------------------------ |
| // GLOBALS |
| // |
| //------------------------------------------------------------------------ |
| // FUNCTIONS |
| // |
| //------------------------------------------------------------------------ |
| // for debug only - print interrupt line |
| // |
| #if DBG |
| void PrintInterruptLine(int Bus, int Slot) |
| { |
| PCI_COMMON_CONFIG pci_config; |
| HalGetBusData( PCIConfiguration, // Bustype |
| Bus, // PCI-Busnumber |
| Slot, // Slotnumber |
| (PVOID) &(pci_config), // Pointer for the PCI-Information |
| sizeof(PCI_COMMON_CONFIG)); |
| KdPrint(("Irql: %d\n", pci_config.u.type0.InterruptLine)); |
| } |
| #endif |
| //------------------------------------------------------------------------ |
| // get the cc32 number out of the filename |
| // |
| NTSTATUS InterpreteFileName(PCHAR name, int *nCC32) |
| { |
| char *ptr = name; |
| char *n = "cc32_"; |
| int h = -1; // high part |
| int l = -1; // low part |
| if (*ptr == '\\') ptr++; // jump over leading ... |
| while (*n) // compare the basename |
| if (*n == tolower(*ptr)) |
| { |
| n++; |
| ptr++; |
| } |
| else |
| return STATUS_NO_SUCH_FILE; |
| h = *ptr - '0'; // get the number |
| ptr++; |
| l = *ptr - '0'; |
| if (*ptr == 0) // still over the end ?? |
| { |
| l = h; |
| h = 0; |
| } |
| else |
| ptr++; |
| if ((h < 0) || (l < 0) || (*ptr != 0)) // anything wrong ?? |
| return STATUS_NO_SUCH_FILE; |
| *nCC32 = (h * 10) + l; // calculate number |
| if (*nCC32 >= PCICC32_MAX_CC32) // out of range ?? |
| return STATUS_NO_SUCH_FILE; |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // the ultimate driver unload |
| VOID PCICC32Unload(PDRIVER_OBJECT driverObj) |
| { |
| int i; |
| UNICODE_STRING symbol_name; |
| DEVICE_EXT *ext = (DEVICE_EXT*)(driverObj->DeviceObject->DeviceExtension); |
| int nPCIADAs = ext->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32Unload()\n")); |
| switch (ext->nInitState) |
| { |
| case 8: |
| case 7: |
| case 6: |
| // stop interrupts and shut off |
| PCICC32DeInitPCIADAs(driverObj->DeviceObject); |
| PCICC32DisConnectInterrupt(driverObj->DeviceObject); |
| case 5: |
| // KeInitializeDpc has no counterpart |
| case 4: |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &ext->pciada[i]; |
| if (pciada->pvVirtLcr != NULL) |
| MmUnmapIoSpace(pciada->pvVirtLcr, LCR_SPACE); |
| if (pciada->pvVirtIfr != NULL) |
| MmUnmapIoSpace(pciada->pvVirtIfr, IFR_SPACE); |
| } |
| case 3: |
| // HalGetInterruptVector has no counterpart |
| case 2: |
| // HalTranslateBusAddress has no counterpart |
| case 1: |
| PCICC32FreeResources(driverObj->DeviceObject); |
| default: |
| case 0: |
| RtlInitUnicodeString(&symbol_name, DOS_DEVICE_NAME); |
| // delete the symbolicLink in the registry |
| IoDeleteSymbolicLink( &symbol_name); |
| // delete the deviceObject |
| IoDeleteDevice(driverObj->DeviceObject); |
| } |
| KdPrint(("PCICC32Unload() OK.\n")); |
| } |
| //------------------------------------------------------------------------ |
| // called at CreateFile() |
| NTSTATUS PCICC32Open(PDEVICE_OBJECT deviceObj, PIRP Irp) |
| { |
| NTSTATUS result = STATUS_SUCCESS; |
| ANSI_STRING name; |
| int nCC32; |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(deviceObj->DeviceExtension); |
| PCIADA *pciada; |
| FILE_OBJ *file_obj; |
| name.Buffer = NULL; |
| name.MaximumLength = 80; |
| result = RtlUnicodeStringToAnsiString(&name, &(Irp->Tail.Overlay.OriginalFileObject->FileName), TRUE); |
| if (result != STATUS_SUCCESS) goto fin; |
| KdPrint(("PCICC32Open(%s)\n", name.Buffer)); |
| result = InterpreteFileName(name.Buffer, &nCC32); |
| if (result != STATUS_SUCCESS) goto fin; |
| KdPrint(("PCICC32Open(%d)\n", nCC32)); |
| RtlFreeAnsiString(&name); |
| file_obj = (FILE_OBJ *)ExAllocatePool(NonPagedPool, sizeof(FILE_OBJ)); |
| if (file_obj == (FILE_OBJ *)NULL) |
| { |
| result = STATUS_NO_MEMORY; |
| goto fin; |
| } |
| file_obj->uwAssociatedCC32 = nCC32; |
| Irp->Tail.Overlay.OriginalFileObject->FsContext = (PVOID)file_obj; |
| result = PCICC32ScanCC32(deviceObj); |
| if (result != STATUS_SUCCESS) goto fin; |
| for (i = 0; i < pDevExt->nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| if (pciada->wModuleNumber == nCC32) |
| { |
| pDevExt->cc32[nCC32] = pciada; // create association |
| pciada->dwLinkCount++; |
| enableCC32(pciada); |
| break; |
| } |
| } |
| if (i >= pDevExt->nPCIADAs) |
| { |
| result = STATUS_NO_SUCH_FILE; |
| goto fin; |
| } |
| fin: |
| Irp->IoStatus.Status = result; |
| Irp->IoStatus.Information = 0; |
| IoCompleteRequest(Irp, IO_NO_INCREMENT); |
| return result; |
| } |
| //------------------------------------------------------------------------ |
| // called at close() |
| NTSTATUS PCICC32Close(PDEVICE_OBJECT deviceObj, PIRP Irp) |
| { |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(deviceObj->DeviceExtension); |
| FILE_OBJ *file_obj = (FILE_OBJ *)NULL; |
| PCIADA *pciada; |
| file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| KdPrint(("PCICC32Close(%d)\n", file_obj->uwAssociatedCC32)); |
| if (file_obj != (FILE_OBJ *)NULL) |
| { |
| pciada = pDevExt->cc32[file_obj->uwAssociatedCC32]; |
| pciada->dwLinkCount--; |
| // disable interrupts when closing |
| if (pciada->pIrqControlFile == file_obj) |
| { |
| pciada->pIrqControlFile = (FILE_OBJ *)NULL; |
| globalInterruptDisable(pciada); |
| } |
| // cancel any blocking Irp origin from this file |
| if (file_obj->blockingIrp != (PIRP)NULL) |
| file_obj->blockingIrp = (PIRP)NULL; |
| if (pciada->pBlockingIrp == &file_obj->blockingIrp) |
| pciada->pBlockingIrp = (PIRP *)NULL; |
| if (!pciada->dwLinkCount) |
| disableCC32(pciada); |
| ExFreePool(file_obj); |
| Irp->Tail.Overlay.OriginalFileObject->FsContext = (FILE_OBJ *)NULL; |
| } |
| KdPrint(("PCICC32Close OK\n")); |
| Irp->IoStatus.Status = STATUS_SUCCESS; |
| Irp->IoStatus.Information = 0; |
| IoCompleteRequest(Irp, IO_NO_INCREMENT); |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // called at |
| NTSTATUS PCICC32Shutdown(PDEVICE_OBJECT deviceObj, PIRP irp) |
| { |
| KdPrint(("PCICC32Shutdown()\n")); |
| // deinit interfaces and interrupts |
| PCICC32DeInitPCIADAs(deviceObj); |
| KdPrint(("PCICC32Shutdown() OK\n")); |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // called at ioctl() |
| NTSTATUS PCICC32DeviceControl(PDEVICE_OBJECT deviceObj, PIRP Irp) |
| { |
| PIO_STACK_LOCATION IrpStack; |
| int nIndex; |
| IrpStack = IoGetCurrentIrpStackLocation(Irp); |
| nIndex = CTL_INDEX(IrpStack->Parameters.DeviceIoControl.IoControlCode); |
| KdPrint(("PCICC32DeviceControl(%d / 0x%08x)\n", nIndex, Irp->Tail.Overlay.OriginalFileObject)); |
| if (nIndex > CTL_INDEX(PCICC32_LAST_CTL_CODE)) |
| { |
| KdPrint(("LastIndex(%d)\n", CTL_INDEX(PCICC32_LAST_CTL_CODE))); |
| Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; |
| Irp->IoStatus.Information = 0; |
| IoCompleteRequest(Irp,IO_NO_INCREMENT); |
| KdPrint(("PCICC32DeviceControl() FAIL.\n")); |
| return STATUS_UNSUCCESSFUL; |
| } |
| return ioctl[nIndex](deviceObj, Irp, IrpStack); |
| } |
| //------------------------------------------------------------------------ |
| // called at read() |
| static BOOLEAN PCICC32Read_kernel(PVOID pvContext) |
| { |
| register SYNC_CONTEXT *context = (SYNC_CONTEXT *)pvContext; |
| register ULONG i = 0; |
| USHORT wCntrl; |
| wCntrl = READ_REGISTER_USHORT(context->pciada->pwCntrl); |
| if (context->file_obj->wBlockTransfer & AUTOREAD) |
| { |
| wCntrl &= ~0x0004; // enable autoread - set bit to 0 |
| WRITE_REGISTER_USHORT(context->pciada->pwCntrl, wCntrl); |
| } |
| // do the read --- |
| if (context->file_obj->wBlockTransfer & UNTIL_NOT_Q) |
| { |
| // read first time to get Q information |
| register ULONG tempBuffer = READ_REGISTER_ULONG((ULONG *)context->Address); |
| if (context->file_obj->wAccessType == WORD_ACCESS) |
| { |
| PUSHORT pwBuffer = (PUSHORT)context->pOutputBuffer; |
| PUSHORT pwBufEnd = (PUSHORT)((PUCHAR)context->pOutputBuffer + context->Length); |
| while ((tempBuffer & 0x80000000) && (pwBuffer < pwBufEnd)) |
| { |
| *pwBuffer++ = (USHORT)tempBuffer; |
| tempBuffer = READ_REGISTER_ULONG((ULONG *)context->Address); // read the same address multiple times as long to get Q |
| i++; |
| } |
| } |
| else |
| { |
| // LONG_ACCESS |
| PULONG pdwBuffer = (PULONG)context->pOutputBuffer; |
| PULONG pdwBufEnd = (PULONG)((PUCHAR)context->pOutputBuffer + context->Length); |
| while ((tempBuffer & 0x80000000) && (pdwBuffer < pdwBufEnd)) |
| { |
| *pdwBuffer++ = tempBuffer; |
| tempBuffer = READ_REGISTER_ULONG((ULONG *)context->Address); // read the same address multiple times as long to get Q |
| i++; |
| } |
| } |
| i *= context->file_obj->wAccessType; |
| KdPrint(("UNTIL_NOT_Q, 0x%08x bytes read\n", i)); |
| } |
| else // no UNTIL_NOT_Q |
| { |
| while (i < context->Length) |
| { |
| context->file_obj->fRead((void *)((PUCHAR)context->pOutputBuffer + i), (void *)context->Address); // read the same address multiple times |
| i += context->file_obj->wAccessType; |
| } |
| } |
| // disable autoread unconditionally - set bit to 1 |
| wCntrl |= 0x0004; |
| WRITE_REGISTER_USHORT(context->pciada->pwCntrl, wCntrl); |
| context->Length = i; |
| return TRUE; |
| } |
| NTSTATUS PCICC32Read(PDEVICE_OBJECT device_Obj, PIRP Irp) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp); |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| SYNC_CONTEXT context; |
| context.file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| context.pciada = pDevExt->cc32[context.file_obj->uwAssociatedCC32]; |
| context.pOutputBuffer = ((void *)(MmGetSystemAddressForMdl(Irp->MdlAddress))); |
| context.Address = IrpStack->Parameters.Read.ByteOffset.LowPart; |
| context.Length = 0; |
| KdPrint(("PCICC32Read(%d)\n", context.file_obj->uwAssociatedCC32)); |
| if (context.Address > IFR_SPACE) |
| Status = STATUS_ACCESS_VIOLATION; |
| else |
| { |
| // do here in between what has to be done ----------------- |
| context.Length = IrpStack->Parameters.Read.Length; |
| KdPrint(("Address = 0x%08x, Length = 0x%08x\n", context.Address, context.Length)); |
| context.Address = (ULONG)context.pciada->pvVirtIfr + context.Address; |
| KeSynchronizeExecution(context.pciada->InterruptObject, PCICC32Read_kernel, &context); |
| // do here in between what has to be done end ------------- |
| } |
| Irp->IoStatus.Status = Status; |
| Irp->IoStatus.Information = context.Length; |
| IoCompleteRequest(Irp,IO_NO_INCREMENT); |
| KdPrint(("PCICC32Read(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // called at write() |
| static BOOLEAN PCICC32Write_kernel(PVOID pvContext) |
| { |
| register SYNC_CONTEXT *context = (SYNC_CONTEXT *)pvContext; |
| register ULONG i = 0; |
| // do the write --- |
| while (i < context->Length) |
| { |
| context->file_obj->fWrite((void *)context->Address, (void *)((PUCHAR)context->pInputBuffer + i)); // write the same address multiple times |
| i += context->file_obj->wAccessType; |
| } |
| context->Length = i; |
| return TRUE; |
| } |
| NTSTATUS PCICC32Write(PDEVICE_OBJECT device_Obj, PIRP Irp) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp); |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| SYNC_CONTEXT context; |
| context.file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| context.pciada = pDevExt->cc32[context.file_obj->uwAssociatedCC32]; |
| context.pInputBuffer = ((void *)(MmGetSystemAddressForMdl(Irp->MdlAddress))); |
| context.Address = IrpStack->Parameters.Read.ByteOffset.LowPart; |
| context.Length = 0; |
| KdPrint(("PCICC32Write(%d)\n", context.file_obj->uwAssociatedCC32)); |
| if (context.Address > IFR_SPACE) |
| Status = STATUS_ACCESS_VIOLATION; |
| else |
| { |
| register ULONG i = 0; |
| // do here in between what has to be done ----------------- |
| context.Length = IrpStack->Parameters.Read.Length; |
| KdPrint(("Address = 0x%08x, Length = 0x%08x\n", context.Address, context.Length)); |
| context.Address = (ULONG)context.pciada->pvVirtIfr + context.Address; |
| KeSynchronizeExecution(context.pciada->InterruptObject, PCICC32Write_kernel, &context); |
| // do here in between what has to be done end ------------- |
| } |
| Irp->IoStatus.Status = Status; |
| Irp->IoStatus.Information = context.Length; |
| IoCompleteRequest(Irp,IO_NO_INCREMENT); |
| KdPrint(("PCICC32Write(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // search for pciada's |
| // |
| NTSTATUS SearchDevices(PDEVICE_OBJECT device_Obj) |
| { |
| PCI_SLOT_NUMBER SlotNumber; |
| PCI_COMMON_CONFIG pci_config; |
| PCIADA *pciada; |
| ULONG length; |
| int *found; |
| int i,j,k; |
| KdPrint(("SearchDevices()\n")); |
| // prepare structures ---------------------------------------- |
| found = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->nPCIADAs; |
| *found = 0; |
| for (i = 0; i < PCICC32_MAX_PCIADA; i++) |
| { |
| pciada = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->pciada[i]; |
| pciada->Bus = -1; |
| pciada->Slot.u.AsULONG = 0xFFFFFFFF; |
| } |
| // search for pciada's --------------------------------------- |
| SlotNumber.u.bits.Reserved = 0; |
| for (j = 0; j < PCI_MAX_BUSES; j++) |
| { |
| for (i = 0; i < PCI_MAX_DEVICES; i++) |
| { |
| SlotNumber.u.bits.DeviceNumber = i; |
| for (k = 0; k < PCI_MAX_FUNCTION; k++) |
| { |
| SlotNumber.u.bits.FunctionNumber = k; |
| length = HalGetBusData( PCIConfiguration, // Bustype |
| j, // PCI-Busnumber |
| SlotNumber.u.AsULONG, // Slotnumber |
| (PVOID) &(pci_config), // Pointer for the PCI-Information |
| sizeof(PCI_COMMON_CONFIG) ); |
| if ((pci_config.VendorID == PCICC32_VENDOR_ID) && |
| (pci_config.DeviceID == PCICC32_DEVICE_ID) && |
| (pci_config.u.type0.SubSystemID == PCICC32_SUBSYS_ID) && |
| (pci_config.u.type0.SubVendorID == PCICC32_SUBVEN_ID) && |
| (pci_config.u.type0.BaseAddresses[3])) |
| { |
| pciada = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->pciada[*found]; |
| memcpy(&pciada->PCIDevice, &pci_config, sizeof(pci_config)); |
| pciada->Slot = SlotNumber; |
| pciada->Bus = j; |
| KdPrint(("PCIADA found @ Bus/Slot %d/%d.\n", pciada->Bus, pciada->Slot.u.AsULONG)); |
| (*found)++; |
| if (*found >= PCICC32_MAX_PCIADA) return STATUS_SUCCESS; |
| } |
| } |
| } |
| } |
| return STATUS_SUCCESS; |
| } |
| //--------------------------------------------------------------- |
| // function to call for bug fix of PLX9050 build in bug |
| // |
| NTSTATUS PLX9050BugFix(PDEVICE_OBJECT device_Obj) |
| { |
| DEVICE_EXT *DeviceExtension = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int i; |
| ULONG dwData; |
| PCIADA *pciada; |
| KdPrint(("PLX9050BugFix()\n")); |
| for (i = 0; i < DeviceExtension->nPCIADAs; i++) |
| { |
| pciada = &DeviceExtension->pciada[i]; |
| if ((dwData = pciada->PCIDevice.u.type0.BaseAddresses[0]) & 0x80) |
| { |
| KdPrint(("Changing address 0:0x%p with 4:0x%p\n", |
| pciada->PCIDevice.u.type0.BaseAddresses[0], |
| pciada->PCIDevice.u.type0.BaseAddresses[4])); |
| pciada->PCIDevice.u.type0.BaseAddresses[0] = // exchange |
| pciada->PCIDevice.u.type0.BaseAddresses[4]; |
| pciada->PCIDevice.u.type0.BaseAddresses[4] = dwData; |
| if (HalSetBusDataByOffset(PCIConfiguration, pciada->Bus, |
| pciada->Slot.u.AsULONG, |
| (PVOID)&pciada->PCIDevice.u.type0.BaseAddresses[0], |
| 0x10, 4) != 4) |
| return STATUS_UNSUCCESSFUL; |
| if (HalSetBusDataByOffset(PCIConfiguration, pciada->Bus, |
| pciada->Slot.u.AsULONG, |
| (PVOID)&pciada->PCIDevice.u.type0.BaseAddresses[4], |
| 0x20, 4) != 4) |
| return STATUS_UNSUCCESSFUL; |
| } |
| if ((dwData = pciada->PCIDevice.u.type0.BaseAddresses[1]) & 0x80) |
| { |
| KdPrint(("Changing address 1:0x%p with 5:0x%p\n", |
| pciada->PCIDevice.u.type0.BaseAddresses[1], |
| pciada->PCIDevice.u.type0.BaseAddresses[5])); |
| pciada->PCIDevice.u.type0.BaseAddresses[1] = // exchange |
| pciada->PCIDevice.u.type0.BaseAddresses[5]; |
| pciada->PCIDevice.u.type0.BaseAddresses[5] = dwData; |
| if (HalSetBusDataByOffset(PCIConfiguration, pciada->Bus, |
| pciada->Slot.u.AsULONG, |
| (PVOID)&pciada->PCIDevice.u.type0.BaseAddresses[1], |
| 0x14, 4) != 4) |
| return STATUS_UNSUCCESSFUL; |
| if (HalSetBusDataByOffset(PCIConfiguration, pciada->Bus, |
| pciada->Slot.u.AsULONG, |
| (PVOID)&pciada->PCIDevice.u.type0.BaseAddresses[5], |
| 0x24, 4) != 4) |
| return STATUS_UNSUCCESSFUL; |
| } |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // reserve resources for PCIADAs |
| // |
| NTSTATUS PCICC32ExtractResources(PCIADA *pciada, PCM_RESOURCE_LIST pList) |
| { |
| PCM_RESOURCE_LIST pResourceList; |
| PCM_FULL_RESOURCE_DESCRIPTOR pFullDescriptor; |
| PCM_PARTIAL_RESOURCE_LIST pPartialList; |
| PCM_PARTIAL_RESOURCE_DESCRIPTOR pPartialDescriptor; |
| int i; |
| int bug = 0; |
| KdPrint(("PCICC32ExtractResources()\n")); |
| pResourceList = pList; |
| pFullDescriptor = pResourceList->List; |
| pPartialList = &pFullDescriptor->PartialResourceList; |
| for (i=0; i<(int)pPartialList->Count; i++) |
| { |
| pPartialDescriptor = &pPartialList->PartialDescriptors[i]; |
| switch (pPartialDescriptor->Type) |
| { |
| case CmResourceTypeInterrupt: |
| pciada->Irql = (KIRQL)pPartialDescriptor->u.Interrupt.Level; |
| pciada->Vector = pPartialDescriptor->u.Interrupt.Vector; |
| pciada->Affinity = pPartialDescriptor->u.Interrupt.Affinity; |
| KdPrint(("Irq : Irql: %d, Vector: %d, Affinity: %d\n", |
| pciada->Irql, pciada->Vector, pciada->Affinity)); |
| break; |
| case CmResourceTypeDma: |
| KdPrint(("Dma : \n")); |
| break; |
| case CmResourceTypePort: |
| KdPrint(("Port : 0x%p\n", pPartialDescriptor->u.Port.Start)); |
| break; |
| case CmResourceTypeMemory: |
| // special handling of PLXBUG here because of WIN2000 |
| // WIN2000 doesn't recognize late address changes |
| if (!bug) |
| { |
| if (i == 0) |
| { |
| pciada->pvPhysLcr = pPartialDescriptor->u.Memory.Start; |
| if (pciada->pvPhysLcr.LowPart & 0x80) |
| bug = 1; |
| } |
| } |
| else |
| { |
| if (i == 3) |
| pciada->pvPhysLcr = pPartialDescriptor->u.Memory.Start; |
| } |
| if (i == 2) |
| pciada->pvPhysIfr = pPartialDescriptor->u.Memory.Start; |
| KdPrint(("Memory : 0x%p\n", (PUCHAR)pPartialDescriptor->u.Memory.Start.LowPart)); |
| break; |
| } |
| } |
| if (pciada->Irql == 0) |
| return STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT; |
| KdPrint(("PCICC32ExtractResources() OK.\n")); |
| return STATUS_SUCCESS; |
| } |
| NTSTATUS PCICC32ReserveResources(PDEVICE_OBJECT device_Obj) |
| { |
| PCM_RESOURCE_LIST pList = NULL; |
| NTSTATUS result = STATUS_SUCCESS; |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)(device_Obj->DeviceExtension); |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| UNICODE_STRING DriverClassName; |
| KdPrint(("PCICC32ReserveResources()\n")); |
| // prepare resource claiming |
| RtlInitUnicodeString(&DriverClassName, L"PCICC32"); |
| // cycle through all busses and slots assigned to PCIADAs |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| result = HalAssignSlotResources(NULL, &DriverClassName, device_Obj->DriverObject, device_Obj, |
| PCIBus, pciada->Bus, pciada->Slot.u.AsULONG, &pList); |
| if (result != STATUS_SUCCESS) |
| break; |
| result = PCICC32ExtractResources(pciada, pList); |
| if (result != STATUS_SUCCESS) |
| break; |
| } |
| // its my part to free allocated resources |
| ExFreePool(pList); |
| KdPrint(("PCICC32ReserveResources(0x%08x)\n", result)); |
| return result; |
| }; |
| //------------------------------------------------------------------------ |
| // free resources from PCIADAs |
| // |
| NTSTATUS PCICC32FreeResources(PDEVICE_OBJECT device_Obj) |
| { |
| CM_RESOURCE_LIST ResList; |
| BOOLEAN bConflict; |
| UNICODE_STRING DriverClassName; |
| KdPrint(("PCICC32FreeResources()\n")); |
| RtlInitUnicodeString(&DriverClassName, L"PCICC32"); |
| ResList.Count = 0; |
| IoReportResourceUsage(&DriverClassName, device_Obj->DriverObject, |
| &ResList, sizeof(ResList), device_Obj, |
| NULL, 0, FALSE, &bConflict); |
| return STATUS_SUCCESS; |
| }; |
| //------------------------------------------------------------------------ |
| // translate memory resources to neutral for PCIADAs |
| // |
| NTSTATUS PCICC32TranslateBusAddresses(PDEVICE_OBJECT device_Obj) |
| { |
| int i; |
| NTSTATUS result = STATUS_SUCCESS; |
| int nPCIADAs = ((DEVICE_EXT*)(device_Obj->DeviceExtension))->nPCIADAs; |
| ULONG memType0, memType2; |
| PCIADA *pciada; |
| KdPrint(("TranslateBusAddresseses()\n")); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->pciada[i]; |
| memType0 = memType2 = 0; |
| if (!(HalTranslateBusAddress(PCIBus, pciada->Bus, pciada->pvPhysLcr, &memType0, |
| &pciada->pvPhysLcr)) || |
| !(HalTranslateBusAddress(PCIBus, pciada->Bus, pciada->pvPhysIfr, &memType2, |
| &pciada->pvPhysIfr))) |
| { |
| result = STATUS_UNSUCCESSFUL; |
| break; |
| } |
| if ((memType0) || (memType2)) |
| { |
| result = STATUS_UNSUCCESSFUL; |
| break; |
| } |
| } |
| return result; |
| } |
| //------------------------------------------------------------------------ |
| // map address spaces to virtual addresses |
| // |
| NTSTATUS PCICC32MapIOspaces(PDEVICE_OBJECT device_Obj) |
| { |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)device_Obj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32MapIOspaces()\n")); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| if ((pciada->pvVirtLcr = MmMapIoSpace(pciada->pvPhysLcr, LCR_SPACE, FALSE)) == NULL) |
| return STATUS_UNSUCCESSFUL; |
| if ((pciada->pvVirtIfr = MmMapIoSpace(pciada->pvPhysIfr, IFR_SPACE, FALSE)) == NULL) |
| return STATUS_UNSUCCESSFUL; |
| KdPrint(("PCIADA %d: LCR 0x%08x IFR 0x%08x\n", i, pciada->pvVirtLcr, pciada->pvVirtIfr)); |
| pciada->pwIntCSR = (PUSHORT)((PUCHAR)pciada->pvVirtLcr + 0x4C); |
| pciada->pwCntrl = (PUSHORT)((PUCHAR)pciada->pvVirtLcr + 0x50); |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // initializes and registers a DPC routine for each pciada |
| // |
| NTSTATUS InitializeCustomDPCObjects(PDEVICE_OBJECT device_object) |
| { |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)(device_object->DeviceExtension); |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("InitializeCustomDPCObject()\n")); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| KeInitializeDpc(&pciada->kDPCobj, fMyDefferedRoutine, (PVOID)device_object); |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // init structures a.s.o. |
| // |
| VOID PCICC32SoftInit(PDEVICE_OBJECT device_Obj) |
| { |
| int i; |
| PCIADA *pciada; |
| for (i = 0; i < PCICC32_MAX_PCIADA; i++) |
| { |
| pciada = &((DEVICE_EXT*)(device_Obj->DeviceExtension))->pciada[i]; |
| pciada->pvPhysLcr.QuadPart = pciada->pvPhysIfr.QuadPart = 0; |
| pciada->pvVirtLcr = pciada->pvVirtIfr = NULL; |
| pciada->bConnected = FALSE; // connection still not verified |
| pciada->wModuleNumber = 0xFFFF; |
| pciada->wFPGAVersion = 0xFFFF; |
| pciada->wModuleType = 1; // always CC32 |
| pciada->InterruptObject = NULL; |
| pciada->Irql = 0; |
| pciada->Vector = 0; |
| pciada->Affinity = 0; |
| pciada->dwLinkCount = 0; |
| pciada->dwIrqStatus = 0; |
| pciada->pBlockingIrp = (PIRP *)NULL; |
| pciada->pIrqControlFile = (FILE_OBJ *)NULL; |
| } |
| // no CC32 associated to any PCIADA |
| for (i = 0; i < PCICC32_MAX_CC32; i++) |
| ((DEVICE_EXT*)(device_Obj->DeviceExtension))->cc32[i] = NULL; |
| } |
| //------------------------------------------------------------------------ |
| // the ultimate starting point of a driver |
| NTSTATUS DriverEntry(PDRIVER_OBJECT driverObj, PUNICODE_STRING regPath) |
| { |
| int i; |
| PDEVICE_OBJECT device_object; // pointer to the device object |
| UNICODE_STRING device_name; |
| UNICODE_STRING symbol_name; |
| NTSTATUS result = STATUS_SUCCESS; |
| PCIADA *pciada; // pointer to a PCIADA |
| int nPCIADAs; // count of PCIADAs |
| DEVICE_EXT *DeviceExtension = NULL; |
| KdPrint(("DriverEntry() ----%d.%d-------------------------\n", (DRIVER_VERSION >> 16) & 0xFFFF, DRIVER_VERSION & 0xFFFF)); |
| driverObj->DriverUnload = PCICC32Unload; |
| driverObj->MajorFunction[IRP_MJ_CREATE] = PCICC32Open; |
| driverObj->MajorFunction[IRP_MJ_CLOSE] = PCICC32Close; |
| driverObj->MajorFunction[IRP_MJ_READ] = PCICC32Read; |
| driverObj->MajorFunction[IRP_MJ_WRITE] = PCICC32Write; |
| driverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = PCICC32DeviceControl; |
| driverObj->MajorFunction[IRP_MJ_SHUTDOWN] = PCICC32Shutdown; |
| RtlInitUnicodeString(&device_name, L"\\Device\\CC32"); |
| /* DeviceObject durch IO-Manager erzeugen */ |
| result = IoCreateDevice( driverObj, // DriverObject received by the DriverEntry Call |
| sizeof(DEVICE_EXT), // required Memory for the DeviceExtension |
| &device_name, // Name of the device in the device-Directory |
| FILE_DEVICE_UNKNOWN, // Device-ID |
| 0, // Device-Characteristics normal 0 |
| FALSE, // TRUE : one Thread can open the driver |
| &device_object); // DeviceObject returned from the IO-Manager |
| // defines how the data are handled between user / kernel Adress-Space |
| device_object->Flags |= DO_DIRECT_IO; |
| // anounce driver as symbolic device --------------------------------- |
| if (result == STATUS_SUCCESS) |
| { |
| /* now the symbolic Link is created. If there is no S.L. a program cannot connect to the driver */ |
| RtlInitUnicodeString(&symbol_name, DOS_DEVICE_NAME); |
| result = IoCreateSymbolicLink(&symbol_name,&device_name); |
| if (result != STATUS_SUCCESS) |
| { |
| IoDeleteDevice(device_object); |
| return result; |
| } |
| } |
| else |
| return result; |
| DeviceExtension = (DEVICE_EXT*)device_object->DeviceExtension; |
| DeviceExtension->actualIrp = NULL; |
| DeviceExtension->nInitState = 0; |
| // init pciada structures ------------------------------------ |
| PCICC32SoftInit(device_object); |
| // search for PCIADAs ---------------------------------------- |
| result = SearchDevices(device_object); |
| nPCIADAs = DeviceExtension->nPCIADAs; |
| if ((result != STATUS_SUCCESS) || !(nPCIADAs)) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| // request exclusive ownership of .. --------------------------------- |
| if ((result = PCICC32ReserveResources(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return result; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // fix PLX9050 Bug ------------------------------------------- |
| if ((result = PLX9050BugFix(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return result; |
| } |
| // translate BUS relative addresses ---------------------------------- |
| if ((result = PCICC32TranslateBusAddresses(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // translate Interrupt Resources used -------------------------------- |
| if ((result = PCICC32TranslateInterrupt(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // map address spaces to virtual addresses --------------------------- |
| if ((result = PCICC32MapIOspaces(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // initialze my custom DPC objects ----------------------------------- |
| if ((result = InitializeCustomDPCObjects(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return result; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // disable all interrupts -------------------------------------------- |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &DeviceExtension->pciada[i]; |
| globalInterruptDisable(pciada); |
| } |
| // connect interrupts to service routines ---------------------------- |
| if ((result = PCICC32ConnectInterrupt(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| else |
| DeviceExtension->nInitState++; |
| // scan all connected CC32 for info and later use ------------------- |
| if ((result = PCICC32ScanCC32(device_object)) != STATUS_SUCCESS) |
| { |
| PCICC32Unload(driverObj); |
| return STATUS_DEVICE_DOES_NOT_EXIST; |
| } |
| device_object->Flags &= ~DO_DEVICE_INITIALIZING; |
| KdPrint(("DriverEntry() OK.\n")); |
| return result; |
| } |
| /drivers/wiener_pcicc32/SOURCE/SOURCES |
|---|
| 0,0 → 1,14 |
| TARGETNAME=pcicc32 |
| #VisualStudio 5 |
| #TARGETPATH=d:\Programme\DevStudio\MyProjects\pcicc32 |
| #VisualStudio 6 |
| #TARGETPATH=d:\Programme\VisualStudio\MyProjects\pcicc32 |
| #new installation |
| TARGETPATH=d:\work\MyProjects\pcicc32 |
| TARGETTYPE=DRIVER |
| TARGETLIBS= |
| INCLUDES=$(BASEDIR)\inc |
| SOURCES=pcicc32_drv.c pcicc32_v.c pcicc32_io.c pcicc32_i.c |
| /drivers/wiener_pcicc32/SOURCE/pcicc32_i.h |
|---|
| 0,0 → 1,55 |
| #ifndef __PCICC33_I_H__ |
| #define __PCICC32_I_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany --------- |
| // the header file to pcicc32_i.c - all around interrupt handling |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 15.06.1999 |
| // added globalInterruptEnabledStatus() AR 24.02.2001 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <pcicc32_drv.h> |
| //------------------------------------------------------------------------ |
| // DEFINES |
| // |
| //------------------------------------------------------------------------ |
| // PROTOTYPES |
| // |
| void globalInterruptEnable(PCIADA *pciada); |
| void globalInterruptDisable(PCIADA *pciada); |
| unsigned short globalInterruptEnabledStatus(PCIADA *pciada); |
| NTSTATUS PCICC32TranslateInterrupt(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32ConnectInterrupt(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32DisConnectInterrupt(PDEVICE_OBJECT device_Obj); |
| /* release all this procedures after init of the driver */ |
| #ifdef ALLOC_PRAGMA |
| #pragma alloc_text (init, PCICC32ConnectInterrupt) |
| #pragma alloc_text (init, PCICC32TranslateInterrupt) |
| #endif |
| /* put all this procedures in the paged memory-pool, all called at passiv Level */ |
| #ifdef ALLOC_PRAGMA |
| #pragma alloc_text (page, PCICC32DisConnectInterrupt) |
| #endif |
| #endif //__PCICC32_I_H__ |
| /drivers/wiener_pcicc32/SOURCE/pcicc32_local.h |
|---|
| 0,0 → 1,36 |
| #ifndef _PCICC32_LOCAL_H__ |
| #define _PCICC32_LOCAL_H__ |
| //----------------------------------------------------------------------- |
| // Address definitions and constants for PCIADA of PCICC32 interface |
| // designed by A.Rausch |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // first parts derived from PCIVME AR 10.03.2000 |
| // added initialisation for AUTOREAD AR 17.03.2001 |
| // |
| /*-----------------------------------------------------------------------*/ |
| /* all addresses relative to PCI-Window */ |
| /*--------- some masks in CSR -------------------------------------------*/ |
| #define MASK_MODNR (WORD)0x00F0 /* the mask to get the module No */ |
| #define MASK_FPGA (WORD)0x0F00 /* the mask to get the FPGA rev. */ |
| #define MASK_MODTYPE (WORD)0xF000 /* the mask to get type of module*/ |
| /*---------- release und inhibit into 0x50 of PLX ------------------------*/ |
| #define RELEASE_CC32 (WORD)0x4186 /* write this to release access ..*/ |
| #define INHIBIT_CC32 (WORD)0x4086 /* write this to inhibit access ..*/ |
| #define ENABLE_PCIADA_IRQS (WORD)0x0049 /* enable PCIADA IRQs */ |
| #define DISABLE_PCIADA_IRQS (WORD)0x0009 /* disable PCIADA IRQs */ |
| #endif // _PCICC32_LOCAL_H__ |
| /drivers/wiener_pcicc32/SOURCE/Debug/pcicc32.inf |
|---|
| 0,0 → 1,104 |
| ;=========================================================== |
| ; File : pcicc32.inf |
| ; |
| ; Abstract: Windows 2000 INF for PCICC32 boards from ARW Elektronik, Germany |
| ; |
| ;=========================================================== |
| [Version] |
| Signature = $CHICAGO$ |
| Provider = %ARW% |
| Class = %PCICC32_class_name% |
| ClassGUID = {c4ad1dfa-3e35-4659-bf2b-c83cda6833e1} |
| DriverVer = 06/18/2002,2.3.0.4 |
| ;----------------------------------------------------------- |
| ; Driver information |
| ;----------------------------------------------------------- |
| [Manufacturer] |
| %ARW_MFG% = ARW.Mfg |
| [ARW.Mfg] |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050&REV_01 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050&REV_02 |
| [ClassInstall32] |
| AddReg=PCICC32_class_addreg |
| [PCICC32_class_addreg] |
| HKR,,,,%PCICC32_class_name% |
| HKR,,Icon,0,0 |
| ;----------------------------------------------------------- |
| ; General installation section |
| ;----------------------------------------------------------- |
| [CopyFiles_9050] |
| pcicc32.sys,,,2 |
| ;----------------------------------------------------------- |
| ; Windows 2000 installation section |
| ;----------------------------------------------------------- |
| [Install_PCICC32.NT] |
| AddReg = AddRegistry_NT_9050 |
| CopyFiles = CopyFiles_9050 |
| [Install_PCICC32.NT.Services] |
| AddService = pcicc32, 0x00000002, Service_Inst_9050, EventLog_Inst_9050 |
| [AddRegistry_NT_9050] |
| [Service_Inst_9050] |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 0 ; SERVICE_ERROR_IGNORE |
| ServiceBinary = %12%\pcicc32.sys |
| ;----------------------------------------------------------- |
| ; Event log registry entries |
| ;----------------------------------------------------------- |
| [EventLog_Inst_9050] |
| AddReg = EventLog_AddReg_9050 |
| [EventLog_AddReg_9050] |
| HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\Drivers\pcicc32.sys" |
| HKR,,TypesSupported,0x00010001,7 |
| ;----------------------------------------------------------- |
| ; Source file information |
| ;----------------------------------------------------------- |
| [SourceDisksNames.x86] |
| 1 = %InstallDisk%,"",1 |
| [SourceDisksFiles] |
| pcicc32.sys = 1 |
| [DestinationDirs] |
| DefaultDestDir = 12 ; drivers |
| ;----------------------------------------------------------- |
| ; String information |
| ;----------------------------------------------------------- |
| [Strings] |
| InstallDisk = "ARW Elektronik Windows Driver Installation Disk" |
| ARW_MFG = "ARW Elektronik, Germany" |
| ARW = "ARW Elektronik, Germany" |
| PCICC32_class_name = "ARW BUS Interfaces" |
| /drivers/wiener_pcicc32/SOURCE/Debug/pcicc32.SYS |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/SOURCE/pcicc32.ncb |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/SOURCE/pcicc32.opt |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/SOURCE/pcicc32_drv.h |
|---|
| 0,0 → 1,172 |
| #ifndef __PCICC32_DRV_H__ |
| #define __PCICC32_DRV_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany --------- |
| // the main header file of the driver |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistribute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 10.03.2000 |
| // dwIrqStatus added, version 2 AR 24.02.2001 |
| // with AUTOREAD, version 2.01 AR 17.03.2001 |
| // with support for LCR_READ, version 2.02 AR 31.03.2001 |
| // changed to VisualStudio 6.0 AR 30.09.2001 |
| // compiled with DDK 1/2001 AR 20.11.2001 |
| // removed alloc_text cause of WIN2000 problems AR 25.11.2001 |
| // version 2.7 released AR 25.11.2001 |
| // version 2.8 still experimental AR 26.05.2002 |
| // version 2.16 eliminates PLXBUG in WIN2000 AR 05.06.2002 |
| // version 2.17 added KeSynchronizeExecution AR 16.06.2002 |
| // version 2.18 improved snchronisation AR 18.06.2002 |
| // |
| //------------------------------------------------------------------------- |
| #define DRIVER_VERSION ((2 << 16) | 18) // the only place for version info |
| #define DRIVER_VARIANT 0 // mark customisation here |
| //------------------------------------------------------------------------- |
| //------------------------------------------------------------------------- |
| // precautions for debug compile |
| #define PCICC32_DEBUG |
| #ifndef PCICC32_DEBUG |
| #ifdef KdPrint |
| #undef KdPrint |
| #define KdPrint(x) /* x */ |
| #endif |
| #endif |
| //------------------------------------------------------------------------- |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #define PCI_MAX_BUSES 4 // buses to search for pciada |
| #define PCICC32_MAX_PCIADA 4 // maximum of PCIADA to search for |
| #define PCICC32_MAX_CC32 16 // maximum number of CC32 modules connected |
| //------------------------------------------------------------------------- |
| // DEFINES |
| // |
| #define PCICC32_VENDOR_ID 0x10B5 |
| #define PCICC32_DEVICE_ID 0x2258 |
| #define PCICC32_SUBSYS_ID 0x2258 |
| #define PCICC32_SUBVEN_ID 0x9050 |
| #define LCR_SPACE 256 // space in bytes of LCR |
| #define IFR_SPACE 32768 // space in bytes of IFR |
| //---------------------------------------------------------------------------------------- |
| // macros for simple address calculation |
| // |
| #define _WORD_NAF(base, n, a, f) ((USHORT *)((ULONG)base + (n << 10) + (a << 6) + ((f & 0xf) << 2))) |
| #define _DWORD_NAF(base, n, a, f) ((ULONG *)((ULONG)base + (n << 10) + (a << 6) + ((f & 0xf) << 2))) |
| //------------------------------------------------------------------------- |
| // TYPEDEFS |
| // |
| typedef struct _FILE_OBJ |
| { |
| USHORT uwAssociatedCC32; // which CC32 number it belongs |
| USHORT wAccessType; // WORD or LONGWORD |
| USHORT wBlockTransfer; // != 0 for block transfer |
| void (*fRead)(void *to, void *from); // resulting read |
| void (*fWrite)(void *to, void *from); // resulting write |
| PIRP blockingIrp; // if != 0 then a blocking IRP is waiting |
| } FILE_OBJ, *PFILE_OBJ; |
| typedef struct |
| { |
| int Bus; // bus number of pciada |
| PCI_SLOT_NUMBER Slot; // slot + function number encoded |
| PCI_COMMON_CONFIG PCIDevice; // content of pcr, only for direct HW related functions |
| PHYSICAL_ADDRESS pvPhysLcr; // local config register, unmapped and mapped |
| PHYSICAL_ADDRESS pvPhysIfr; // interface registers, unmapped and mapped |
| PVOID pvVirtLcr; // virtual LCR space |
| PVOID pvVirtIfr; // virtual IFR space |
| PKINTERRUPT InterruptObject; // points to the associated interrupt obj |
| KIRQL Irql; // virtual Irq level, unmapped and mapped |
| ULONG Vector; // mapped system vector, unmapped and mapped |
| KAFFINITY Affinity; // which processor uses this irq, unmapped and mapped |
| PUSHORT pwCntrl; // LCR Cntrl Offset @ LCR + 0x50 |
| PUSHORT pwIntCSR; // LCR IntCSR Offset @ LCR + 0x4C |
| ULONG dwLinkCount; // how often this interface is requested |
| BOOLEAN bConnected; // CC32 is connected and powered |
| USHORT wModuleNumber; // Number (Jumper) of CC32 |
| USHORT wFPGAVersion; // Revision of (CC32) FPGA |
| USHORT wModuleType; // Type of (CC32) module |
| KDPC kDPCobj; // custom DPC object for irq tunneling |
| ULONG dwIrqStatus; // the last unrequested status of a interrupt |
| PIRP *pBlockingIrp; // points to File or == NULL when no blocking in progress |
| FILE_OBJ *pIrqControlFile; // this file controls the global enable / disable IRQ |
| } PCIADA; |
| typedef struct _DEVICE_EXT |
| { |
| PDEVICE_OBJECT DeviceObject; // points to myself and carries the pointer to DriverObject |
| PIRP actualIrp; // points to .. |
| int nPCIADAs; // how many PCIADAs are found |
| PCIADA pciada[PCICC32_MAX_PCIADA]; // for each PCIADA a descriptor |
| PCIADA *cc32[PCICC32_MAX_CC32]; // points to PCIADA to which it belongs |
| int nInitState; // tracks the state of initialisation |
| } DEVICE_EXT; |
| // Prototypes to support following pragmas |
| NTSTATUS DriverEntry(PDRIVER_OBJECT driverObj, PUNICODE_STRING regPath); |
| NTSTATUS PCICC32Open(PDEVICE_OBJECT deviceObj, PIRP irp); |
| NTSTATUS PCICC32Close(PDEVICE_OBJECT deviceObj, PIRP irp); |
| VOID PCICC32Unload(PDRIVER_OBJECT driverObj); |
| NTSTATUS SearchDevices(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PLX9050BugFix(PDEVICE_OBJECT deviceObj); |
| NTSTATUS PCICC32ReserveResources(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32ExtractResources(PCIADA *pciada, PCM_RESOURCE_LIST pList); |
| NTSTATUS PCICC32FreeResources(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32TranslateBusAddress(PDEVICE_OBJECT device_Obj); |
| NTSTATUS PCICC32MapIOspace(PDEVICE_OBJECT device_object); |
| VOID PCICC32SoftInit(PDEVICE_OBJECT device_Obj); |
| NTSTATUS InitializeCustomDPCObjects(PDEVICE_OBJECT device_object); |
| /* release all this procedures after init of the driver */ |
| #ifdef ALLOC_PRAGMA |
| #pragma alloc_text (init, DriverEntry) |
| #pragma alloc_text (init, SearchDevices) |
| #pragma alloc_text (init, PLX9050BugFix) |
| #pragma alloc_text (init, PCICC32ReserveResources) |
| #pragma alloc_text (init, PCICC32ExtractResources) |
| #pragma alloc_text (init, PCICC32TranslateBusAddress) |
| #pragma alloc_text (init, PCICC32MapIOspace) |
| #pragma alloc_text (init, PCICC32SoftInit) |
| #pragma alloc_text (init, InitializeCustomDPCObjects) |
| #endif |
| /* put all this procedures in the paged memory-pool, all called at passiv Level */ |
| #ifdef ALLOC_PRAGMA |
| #pragma alloc_text (page, PCICC32Open) |
| #pragma alloc_text (page, PCICC32Close) |
| #pragma alloc_text (page, PCICC32Unload) |
| #pragma alloc_text (page, PCICC32FreeResources) |
| #endif |
| #endif // __PCICC32_DRV_H__ |
| /drivers/wiener_pcicc32/SOURCE/pcicc32_v.c |
|---|
| 0,0 → 1,196 |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany -------- |
| // all around recognition and basic services of VMEMM |
| // |
| // (c) 2000-2002 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started from pcivme_v.c AR 02.07.2000 |
| // changed making procedure (only VCC > 6.0) AR 30.05.2002 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <pcicc32_drv.h> |
| #include <pcicc32_v.h> |
| #include <pcicc32_local.h> // all around the pciada interface |
| #ifndef WORD // don't touch include files of WIN95 driver |
| #define WORD USHORT |
| #endif |
| #ifndef DWORD |
| #define DWORD ULONG |
| #endif |
| //------------------------------------------------------------------------ |
| // PROTOTYPES |
| // |
| //------------------------------------------------------------------------ |
| // GLOBALS |
| // |
| //------------------------------------------------------------------------ |
| // FUNCTIONS |
| // |
| //------------------------------------------------------------------------ |
| // test connection to VMEMM devices without disturbing anything |
| // |
| //--------------------------------------------------------------------- |
| // checks a connection with a small test pattern |
| // |
| NTSTATUS TestConnection(PCIADA *pciada) |
| { |
| USHORT *pwADRH = (USHORT *)_WORD_NAF(pciada->pvVirtIfr, 30, 1, 0); |
| USHORT *pwADRL = (USHORT *)_WORD_NAF(pciada->pvVirtIfr, 30, 0, 0); |
| int i; |
| USHORT wRet; |
| USHORT wADRHContent; |
| USHORT wADRLContent; |
| KdPrint(("TestConnection()\n")); |
| wADRHContent = READ_REGISTER_USHORT(pwADRH); // save previous content |
| wADRLContent = READ_REGISTER_USHORT(pwADRL); |
| for (i = 0; i < 10000; i++) |
| { |
| WRITE_REGISTER_USHORT(pwADRH, 0x5555); |
| WRITE_REGISTER_USHORT(pwADRL, 0xAAAA); |
| wRet = READ_REGISTER_USHORT(pwADRH); |
| if (wRet != 0x5555) return STATUS_UNSUCCESSFUL; |
| WRITE_REGISTER_USHORT(pwADRH, 0xAAAA); |
| WRITE_REGISTER_USHORT(pwADRL, 0x5555); |
| wRet = READ_REGISTER_USHORT(pwADRH); |
| if (wRet != 0xAAAA) return STATUS_UNSUCCESSFUL; |
| WRITE_REGISTER_USHORT(pwADRH, 0x0000); |
| WRITE_REGISTER_USHORT(pwADRL, 0xFFFF); |
| wRet = READ_REGISTER_USHORT(pwADRH); |
| if (wRet != 0x0000) return STATUS_UNSUCCESSFUL; |
| WRITE_REGISTER_USHORT(pwADRH, 0xFFFF); |
| WRITE_REGISTER_USHORT(pwADRL, 0x0000); |
| wRet = READ_REGISTER_USHORT(pwADRH); |
| if (wRet != 0xFFFF) return STATUS_UNSUCCESSFUL; |
| } |
| WRITE_REGISTER_USHORT(pwADRH, wADRHContent); // restore previous content |
| WRITE_REGISTER_USHORT(pwADRL, wADRLContent); |
| KdPrint(("TestConnection() OK.\n")); |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // scan VMEMM devices without disturbing anything |
| // |
| NTSTATUS PCICC32ScanCC32(PDEVICE_OBJECT deviceObj) |
| { |
| int i; |
| int nPCIADAs = ((DEVICE_EXT*)(deviceObj->DeviceExtension))->nPCIADAs; |
| PCIADA *pciada; |
| USHORT wCntrl; |
| USHORT wIntCSR; |
| USHORT wModuleStatus; |
| KdPrint(("PCICC32ScanCC32(nPCIADAs = %d)\n", nPCIADAs)); |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &((DEVICE_EXT*)(deviceObj->DeviceExtension))->pciada[i]; |
| wCntrl = READ_REGISTER_USHORT(pciada->pwCntrl); // save it for later use |
| wIntCSR = READ_REGISTER_USHORT(pciada->pwIntCSR); |
| KdPrint(("wCntrl = 0x%04x, wIntCSR = 0x%04x\n", wCntrl, wIntCSR)); |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, INHIBIT_CC32); // switch off before open |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, DISABLE_PCIADA_IRQS); |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, RELEASE_CC32); // open it for test |
| if (wCntrl & 0x0800) |
| { |
| if (TestConnection(pciada) == STATUS_SUCCESS) |
| { |
| wModuleStatus = READ_REGISTER_USHORT(pciada->pvVirtIfr); |
| pciada->bConnected = TRUE; |
| // interpret the content |
| pciada->wModuleNumber = (wModuleStatus & MASK_MODNR) >> 4; |
| pciada->wFPGAVersion = (wModuleStatus & MASK_FPGA) >> 8; |
| pciada->wModuleType = (wModuleStatus & MASK_MODTYPE) >> 12; |
| KdPrint(("PCIADA %d <-> CC32 %d\n", i, pciada->wModuleNumber)); |
| } |
| else |
| pciada->wModuleNumber = 0xFFFF; // not recognized, take it out |
| } |
| else |
| pciada->wModuleNumber = 0xFFFF; // not recognized, take it out |
| if (pciada->wModuleNumber != 0xFFFF) |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, wCntrl); // restore state |
| else |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, INHIBIT_CC32); |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, wIntCSR); // restore interrupt masks |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // deinit all PCIADAs in a passive state |
| // |
| NTSTATUS PCICC32DeInitPCIADAs(PDEVICE_OBJECT deviceObj) |
| { |
| int i; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT*)deviceObj->DeviceExtension; |
| int nPCIADAs = pDevExt->nPCIADAs; |
| PCIADA *pciada; |
| KdPrint(("PCICC32DeInitPCIADAs()\n")); |
| // dis connect the interrupts to service routines |
| for (i = 0; i < nPCIADAs; i++) |
| { |
| pciada = &pDevExt->pciada[i]; |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, INHIBIT_CC32); |
| // this is the same as globalInterruptDisable(pciada); |
| WRITE_REGISTER_USHORT(pciada->pwIntCSR, DISABLE_PCIADA_IRQS); |
| } |
| return STATUS_SUCCESS; |
| } |
| //------------------------------------------------------------------------ |
| // switches pciada on or off |
| // |
| void enableCC32(PCIADA *pciada) |
| { |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, RELEASE_CC32); |
| } |
| void disableCC32(PCIADA *pciada) |
| { |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, INHIBIT_CC32); |
| } |
| /drivers/wiener_pcicc32/SOURCE/pcicc32_io.c |
|---|
| 0,0 → 1,757 |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany --------- |
| // the ioctl functions |
| // |
| // (c) 1999-2002 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 03.07.1999 |
| // first release 1.0 AR 17.10.1999 |
| // added access to PLX LC-Register AR 30.03.2001 |
| // changed making procedure (only VCC > 6.0) AR 30.05.2002 |
| // multiple interrupt enable allowed AR 01.06.2002 |
| // added KeSynchronizeExecution for interrupt sync AR 16.06.2002 |
| // extended ioctl_irq_status_kernel AR 18.06.2002 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| #include <ntddk.h> |
| #include <devioctl.h> |
| #include <pcicc32_drv.h> |
| #include <pcicc32.h> |
| #include <pcicc32_v.h> |
| #include <pcicc32_io.h> |
| #include <pcicc32_local.h> |
| #include <pcicc32_i.h> |
| //------------------------------------------------------------------------ |
| // DEFINES |
| // |
| // buffers usage must match the corresponding ioctl code! |
| #define SET_BUFFERS_METHOD_OUT_DIRECT \ |
| {\ |
| InputLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength;\ |
| OutputLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;\ |
| pInputBuffer = ((void *)(Irp->AssociatedIrp.SystemBuffer));\ |
| pOutputBuffer = ((void *)(MmGetSystemAddressForMdl(Irp->MdlAddress)));\ |
| } |
| #define SET_BUFFERS_METHOD_IN_DIRECT \ |
| {\ |
| InputLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength;\ |
| OutputLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;\ |
| pInputBuffer = ((void *)(MmGetSystemAddressForMdl(Irp->MdlAddress)));\ |
| pOutputBuffer = ((void *)(Irp->AssociatedIrp.SystemBuffer));\ |
| } |
| #define SET_BUFFERS_METHOD_BUFFERED \ |
| {\ |
| InputLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength;\ |
| OutputLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;\ |
| pInputBuffer = pOutputBuffer = ((void *)(Irp->AssociatedIrp.SystemBuffer));\ |
| } |
| #define COMPLETE_REQUEST \ |
| {\ |
| if (Status != STATUS_PENDING)\ |
| {\ |
| Irp->IoStatus.Status = Status; \ |
| Irp->IoStatus.Information = irp_info; \ |
| IoCompleteRequest(Irp,IO_NO_INCREMENT); \ |
| }\ |
| } |
| // compatibilty issues to WIN95 driver calls |
| #ifndef WORD |
| #define WORD USHORT |
| #endif |
| #ifndef DWORD |
| #define DWORD ULONG |
| #endif |
| #ifndef BYTE |
| #define BYTE UCHAR |
| #endif |
| #ifndef BOOL |
| #define BOOL BOOLEAN |
| #endif |
| //------------------------------------------------------------------------- |
| // TYPEDEFS |
| // |
| typedef struct |
| { |
| FILE_OBJ *file_obj; |
| PCIADA *pciada; |
| PCICC32_IRQ_RESPONSE *pIrqStatus; |
| PIRP *Irp; |
| ULONG *irp_info; |
| NTSTATUS *Status; |
| } IOCTL_IRQ_STATUS_CONTEXT; |
| //-------------------------------------------------------------------------- |
| // LOCAL FUNCTIONS |
| // |
| //-------------------------------------------------------------------------- |
| // fast read or write functions - portable - |
| static void readWord(void *to, void *from) |
| { |
| *(PUSHORT)to = READ_REGISTER_USHORT((PUSHORT)from); |
| } |
| static void readLong(void *to, void *from) |
| { |
| *(PULONG)to = READ_REGISTER_ULONG((PULONG)from); |
| } |
| static void writeWord(void *to, void *from) |
| { |
| WRITE_REGISTER_USHORT((PUSHORT)to, *(PUSHORT)from); |
| } |
| static void writeLong(void *to, void *from) |
| { |
| WRITE_REGISTER_ULONG((PULONG)to, *(PULONG)from); |
| } |
| //------------------------------------------------------------------------ |
| // init the interface with build in and user supplied constants |
| static BOOLEAN InitInterface(PVOID pvLcr, PVOID pvIfr) |
| { |
| return TRUE; |
| } |
| // deinit the interface with user supplied and build in constants |
| static BOOLEAN DeInitInterface(PVOID pvLcr, PVOID pvIfr) |
| { |
| return TRUE; |
| } |
| //------------------------------------------------------------------------ |
| // the default cancel routine for an queued Irp |
| // |
| void CancelRequest(PDEVICE_OBJECT device_Obj, PIRP Irp) |
| { |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| PCIADA *pciada = pDevExt->cc32[file_obj->uwAssociatedCC32]; |
| if (pciada->pBlockingIrp == (PIRP *)NULL) |
| { |
| IoReleaseCancelSpinLock(Irp->CancelIrql); |
| KdPrint(("Nothing to do: CancelRequest(0x%08x)\n", Irp)); |
| return; |
| } |
| else |
| { |
| // release control of interrupt |
| if (pciada->pIrqControlFile == file_obj) |
| { |
| pciada->pIrqControlFile = (FILE_OBJ *)NULL; |
| globalInterruptDisable(pciada); |
| } |
| // cancel any blocking Irp origin from this file |
| if (file_obj->blockingIrp != (PIRP)NULL) |
| file_obj->blockingIrp = (PIRP)NULL; |
| if (pciada->pBlockingIrp == &file_obj->blockingIrp) |
| pciada->pBlockingIrp = (PIRP *)NULL; |
| IoReleaseCancelSpinLock(Irp->CancelIrql); |
| KdPrint(("Done: CancelRequest(0x%08x)\n", Irp)); |
| Irp->IoStatus.Status = STATUS_CANCELLED; |
| Irp->IoStatus.Information = 0; |
| IoCompleteRequest(Irp, IO_NO_INCREMENT); |
| } |
| } |
| //------------------------------------------------------------------------ |
| // the custom deffered routine to finish blocking io on irq_block |
| void fMyDefferedRoutine(PKDPC Dpc, PVOID pvDevice_object, PVOID pvPciada, PVOID pdwIrqStatus) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = sizeof(PCICC32_IRQ_RESPONSE); |
| PIRP Irp = (PIRP)NULL; |
| PCIADA *pciada = (PCIADA *)pvPciada; |
| KIRQL oldIrqlCancel; |
| KdPrint(("fMyDefferedRoutine(0x%08x)\n", pciada->dwIrqStatus)); |
| // beware off damage due to intercept at cancel of thread |
| IoAcquireCancelSpinLock(&oldIrqlCancel); |
| // get my associated packet |
| if (pciada->pBlockingIrp != (PIRP *)NULL) |
| { |
| Irp = *pciada->pBlockingIrp; |
| if (Irp != (PIRP)NULL) // then a blcoking Irp is waiting |
| { |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| PCICC32_IRQ_RESPONSE *pIrqStatus = (PCICC32_IRQ_RESPONSE *)(Irp->AssociatedIrp.SystemBuffer); |
| // fill the response structure |
| pIrqStatus->dwInterruptFlags = pciada->dwIrqStatus; |
| pciada->dwIrqStatus = 0; // to prevent a following direct return |
| pIrqStatus->dwInterface = file_obj->uwAssociatedCC32; |
| // release the cancel routine from this Irp |
| IoSetCancelRoutine(Irp, NULL); |
| COMPLETE_REQUEST; |
| file_obj->blockingIrp = (PIRP)NULL; |
| } |
| pciada->pBlockingIrp = (PIRP *)NULL; |
| } |
| // release the spin locks |
| IoReleaseCancelSpinLock(oldIrqlCancel); |
| } |
| //------------------------------------------------------------------------ |
| // if the interrupt is disabled for a blocking path, cancel the block |
| static void ReleaseBlockingIrp(PDEVICE_OBJECT device_Obj, PCIADA *pciada, PFILE_OBJ pFile_obj) |
| { |
| NTSTATUS Status = STATUS_CANCELLED; |
| ULONG irp_info = sizeof(PCICC32_IRQ_RESPONSE); |
| PIRP Irp = (PIRP)NULL; |
| KIRQL oldIrqlCancel; |
| KdPrint(("ReleaseBlockingIrp()\n")); |
| // beware off damage due to intercept with cancel of thread |
| IoAcquireCancelSpinLock(&oldIrqlCancel); |
| if (pciada->pBlockingIrp != (PIRP *)NULL) |
| { |
| // get my associated packet |
| Irp = *pciada->pBlockingIrp; |
| if (Irp != (PIRP)NULL) |
| { |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| PCICC32_IRQ_RESPONSE *pIrqStatus = (PCICC32_IRQ_RESPONSE *)(Irp->AssociatedIrp.SystemBuffer); |
| ULONG irp_info = sizeof(PCICC32_IRQ_RESPONSE); |
| pIrqStatus->dwInterruptFlags = pciada->dwIrqStatus; |
| pIrqStatus->dwInterface = file_obj->uwAssociatedCC32; |
| // release the cancel routine from this Irp |
| IoSetCancelRoutine(Irp, NULL); |
| COMPLETE_REQUEST; |
| file_obj->blockingIrp = (PIRP)NULL; |
| } |
| pciada->pBlockingIrp = (PIRP *)NULL; // mark the storage for blocking Irp free |
| } |
| // release the spin locks |
| IoReleaseCancelSpinLock(oldIrqlCancel); |
| } |
| //------------------------------------------------------------------------ |
| // all functions called from ioctl jump table |
| // |
| //------------------------------------------------------------------------ |
| // a dummy entry because of compatibiltiy (near) WIN95 driver |
| static NTSTATUS ioctl_dummy(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| char *pCommand; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| SET_BUFFERS_METHOD_BUFFERED; |
| pCommand = (char *)pInputBuffer; |
| KdPrint(("ioctl_dummy(%d)\n", file_obj->uwAssociatedCC32)); |
| // do what must be here in between ----------- |
| // do what must be here in between --- end --- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_dummy(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // requests status |
| static NTSTATUS ioctl_get_status(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = sizeof(PCICC32_STATUS); |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| PCIADA *pciada; |
| DEVICE_EXT *pDevExt; |
| PCICC32_STATUS *pStatus; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| // do what must be here in between ----------- |
| pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_get_status(%d)\n", wModuleNumber)); |
| // do what must be here in between ----------- |
| if (OutputLength >= sizeof(PCICC32_STATUS)) |
| { |
| USHORT temp; |
| pStatus = (PCICC32_STATUS *)pOutputBuffer; |
| pciada = pDevExt->cc32[wModuleNumber]; |
| pStatus->dwInterface = wModuleNumber; |
| temp = READ_REGISTER_USHORT(pciada->pwIntCSR); |
| pStatus->bTimeout = (temp & 0x0020) ? 1 : 0; |
| pStatus->bInterrupt = (temp & 0x0004) ? 1 : 0; |
| } |
| else |
| Status = STATUS_BUFFER_TOO_SMALL; |
| // do what must be here in between --- end --- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_get_status(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // clears status |
| static BOOLEAN ioctl_clear_status_kernel(PVOID pvContext) |
| { |
| PCIADA *pciada = (PCIADA *)pvContext; |
| USHORT wCntrl; |
| // get current Cntrl - and clear interrupt |
| wCntrl = READ_REGISTER_USHORT(pciada->pwCntrl); |
| wCntrl &= ~0x0100; // disable |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, wCntrl); |
| wCntrl |= 0x0100; // enable again |
| WRITE_REGISTER_USHORT(pciada->pwCntrl, wCntrl); |
| return TRUE; |
| } |
| static NTSTATUS ioctl_clear_status(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| PCIADA *pciada; |
| DEVICE_EXT *pDevExt; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| // do what must be here in between ----------- |
| pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_clear_status(%d)\n", wModuleNumber)); |
| // do what must be here in between ----------- |
| pciada = pDevExt->cc32[wModuleNumber]; |
| KeSynchronizeExecution(pciada->InterruptObject, ioctl_clear_status_kernel, pciada); |
| // do what must be here in between --- end --- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_clear_status() OK\n")); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // set parameter for this path for future access to CC32 |
| static NTSTATUS ioctl_access_para(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| PCICC32_ACCESS_COMMAND *pAccessPara; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| PCIADA *pciada = pDevExt->cc32[wModuleNumber]; |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_access_para(%d)\n", wModuleNumber)); |
| pAccessPara = (PCICC32_ACCESS_COMMAND *)pInputBuffer; |
| // do here in between what has to be done ----------------- |
| file_obj->wAccessType = pAccessPara->wAccessType; |
| file_obj->wBlockTransfer = pAccessPara->wBlockTransfer; |
| pAccessPara->dwInterface = wModuleNumber; |
| switch (pAccessPara->wAccessType) |
| { |
| case WORD_ACCESS: file_obj->fRead = readWord; |
| file_obj->fWrite = writeWord; |
| break; |
| case LONG_ACCESS: file_obj->fRead = readLong; |
| file_obj->fWrite = writeLong; |
| break; |
| default: Status = STATUS_UNSUCCESSFUL; |
| break; |
| } |
| // do here in between what has to be done end ------------- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_access_para(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // allow or inhibit interrupt requests from either CC32 or thru local timeout |
| static NTSTATUS ioctl_control_interrupts(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| PCICC32_IRQ_CONTROL *pIrqControlIn, *pIrqControlOut; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| PCIADA *pciada = pDevExt->cc32[wModuleNumber]; |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_control_interrupts(%d)\n", wModuleNumber)); |
| pIrqControlIn = (PCICC32_IRQ_CONTROL *)pInputBuffer; |
| pIrqControlOut = (PCICC32_IRQ_CONTROL *)pOutputBuffer; |
| // do here in between what has to be done ----------------- |
| if (pIrqControlIn->wEnable) |
| { |
| // reserve the controlling of interrupts for this path |
| if ((pciada->pIrqControlFile == (FILE_OBJ *)NULL) || |
| (pciada->pIrqControlFile == file_obj)) |
| { |
| pciada->pIrqControlFile = file_obj; |
| globalInterruptEnable(pciada); |
| } |
| else |
| Status = STATUS_DEVICE_BUSY; |
| } |
| else |
| { |
| // nobody else is allowed to disable interrupts |
| if (pciada->pIrqControlFile == file_obj) |
| { |
| pciada->pIrqControlFile = (FILE_OBJ *)NULL; |
| globalInterruptDisable(pciada); |
| } |
| else |
| Status = STATUS_DEVICE_BUSY; |
| } |
| // give back if the user grants space |
| if (OutputLength >= sizeof(PCICC32_IRQ_CONTROL)) |
| { |
| pIrqControlOut->dwInterface = wModuleNumber; |
| pIrqControlOut->wEnable = globalInterruptEnabledStatus(pciada); |
| } |
| // do here in between what has to be done end ------------- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_control_interrupts(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // implements a blocking io-call to get irq status. |
| static BOOLEAN ioctl_irq_status_kernel(PVOID pvContext) |
| { |
| IOCTL_IRQ_STATUS_CONTEXT *context = (IOCTL_IRQ_STATUS_CONTEXT *)pvContext; |
| KIRQL oldIrql; |
| if (context->pciada->dwIrqStatus) |
| { |
| // there is a pending interrupt - return immediately |
| KdPrint(("ioctl_irq_status(), direct return (0x%08x)\n", context->pciada->dwIrqStatus)); |
| context->pIrqStatus->dwInterruptFlags = context->pciada->dwIrqStatus; |
| context->pciada->dwIrqStatus = 0; // release pending status |
| *context->irp_info = sizeof(PCICC32_IRQ_RESPONSE); |
| } |
| else |
| { |
| // make the request blocking |
| IoAcquireCancelSpinLock(&oldIrql); |
| if ((*context->Irp)->Cancel) // cancel while doing |
| { |
| KdPrint(("ioctl_irq_status(), canceled return\n")); |
| *context->Status = STATUS_CANCELLED; |
| } |
| else |
| { |
| KdPrint(("ioctl_irq_status(), blocking\n")); |
| if (context->pciada->pBlockingIrp != (PIRP *)NULL) |
| { |
| // a Irp is still waiting |
| *context->Status = STATUS_DEVICE_BUSY; |
| } |
| else |
| { |
| context->file_obj->blockingIrp = *context->Irp; |
| context->pciada->pBlockingIrp = &context->file_obj->blockingIrp; |
| *context->Status = STATUS_PENDING; |
| // mark irp as pending and return |
| IoMarkIrpPending(*context->Irp); |
| IoSetCancelRoutine(*context->Irp, CancelRequest); |
| } |
| } // if (Irp->Cancel) ... |
| } |
| return TRUE; |
| } |
| static NTSTATUS ioctl_irq_status(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| USHORT wModuleNumber; |
| IOCTL_IRQ_STATUS_CONTEXT context; |
| SET_BUFFERS_METHOD_BUFFERED; |
| context.file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| wModuleNumber = context.file_obj->uwAssociatedCC32; |
| context.pciada = pDevExt->cc32[wModuleNumber]; |
| context.pIrqStatus = (PCICC32_IRQ_RESPONSE *)pOutputBuffer; |
| context.Status = &Status; |
| context.irp_info = &irp_info; |
| context.Irp = &Irp; |
| KdPrint(("ioctl_irq_status(%d)\n", wModuleNumber)); |
| // do here in between what has to be done ----------------- |
| if (OutputLength < sizeof(PCICC32_IRQ_RESPONSE)) |
| Status = STATUS_BUFFER_TOO_SMALL; |
| else |
| { |
| context.pIrqStatus->dwInterface = wModuleNumber; |
| KeSynchronizeExecution(context.pciada->InterruptObject, ioctl_irq_status_kernel, &context); |
| } |
| // do here in between what has to be done end ------------- |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_irq_status(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // for test and debug purposes: direkt access to PLX LCR space |
| static NTSTATUS ioctl_access_lcr(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) |
| { |
| NTSTATUS Status = STATUS_SUCCESS; |
| ULONG irp_info = 0; |
| PVOID pInputBuffer,pOutputBuffer; |
| ULONG InputLength, OutputLength; |
| FILE_OBJ *file_obj = (FILE_OBJ *)Irp->Tail.Overlay.OriginalFileObject->FsContext; |
| USHORT wModuleNumber = file_obj->uwAssociatedCC32; |
| DEVICE_EXT *pDevExt = (DEVICE_EXT *)(device_Obj->DeviceExtension); |
| PCIADA *pciada = pDevExt->cc32[wModuleNumber]; |
| PCICC32_LCR_ACCESS *pAccessOut; |
| PCICC32_LCR_ACCESS *pAccessIn; |
| SET_BUFFERS_METHOD_BUFFERED; |
| KdPrint(("ioctl_access_lcr(%d)\n", wModuleNumber)); |
| pAccessOut = (PCICC32_LCR_ACCESS *)pOutputBuffer; |
| pAccessIn = (PCICC32_LCR_ACCESS *)pInputBuffer; |
| // do here in between what has to be done ----------------- |
| if (OutputLength < sizeof(PCICC32_LCR_ACCESS)) |
| Status = STATUS_BUFFER_TOO_SMALL; |
| else |
| { |
| *pAccessOut = *pAccessIn; |
| pAccessOut->dwInterface = wModuleNumber; |
| if (pAccessIn->wRegisterAddress <= 0x52) |
| { |
| // 1st part: long word accesses |
| if (pAccessIn->bBytesLane == LONG_ACCESS) |
| { |
| if (pAccessIn->wRegisterAddress & 0x0003) |
| Status = STATUS_INSTRUCTION_MISALIGNMENT; |
| else |
| { |
| ULONG *pdwVirtAddress; |
| ULONG dwDummy; |
| pdwVirtAddress = (ULONG *)((ULONG)pciada->pvVirtLcr + pAccessIn->wRegisterAddress); |
| switch (pAccessIn->bAccessMode) |
| { |
| case LCR_WRITE: |
| WRITE_REGISTER_ULONG(pdwVirtAddress, pAccessIn->dwContent); |
| pAccessOut->dwContent = READ_REGISTER_ULONG(pdwVirtAddress); |
| break; |
| case LCR_OR: |
| dwDummy = READ_REGISTER_ULONG(pdwVirtAddress); |
| dwDummy |= pAccessIn->dwContent; |
| WRITE_REGISTER_ULONG(pdwVirtAddress, dwDummy); |
| pAccessOut->dwContent = READ_REGISTER_ULONG(pdwVirtAddress); |
| break; |
| case LCR_AND: |
| dwDummy = READ_REGISTER_ULONG(pdwVirtAddress); |
| dwDummy &= pAccessIn->dwContent; |
| WRITE_REGISTER_ULONG(pdwVirtAddress, dwDummy); |
| pAccessOut->dwContent = READ_REGISTER_ULONG(pdwVirtAddress); |
| break; |
| case LCR_WRITE_ONLY: |
| WRITE_REGISTER_ULONG(pdwVirtAddress, pAccessIn->dwContent); |
| break; |
| case LCR_READ: |
| pAccessOut->dwContent = READ_REGISTER_ULONG(pdwVirtAddress); |
| break; |
| default: Status = STATUS_ILLEGAL_INSTRUCTION; |
| } |
| } |
| } |
| // 2nd part: short word accesses |
| if (pAccessIn->bBytesLane == WORD_ACCESS) |
| { |
| if (pAccessIn->wRegisterAddress & 0x0001) |
| Status = STATUS_INSTRUCTION_MISALIGNMENT; |
| else |
| { |
| USHORT *pwVirtAddress; |
| USHORT wDummy; |
| pwVirtAddress = (USHORT *)((ULONG)pciada->pvVirtLcr + pAccessIn->wRegisterAddress); |
| switch (pAccessIn->bAccessMode) |
| { |
| case LCR_WRITE: |
| WRITE_REGISTER_USHORT(pwVirtAddress, (USHORT)pAccessIn->dwContent); |
| pAccessOut->dwContent = READ_REGISTER_USHORT(pwVirtAddress); |
| break; |
| case LCR_OR: |
| wDummy = READ_REGISTER_USHORT(pwVirtAddress); |
| wDummy |= (USHORT)pAccessIn->dwContent; |
| WRITE_REGISTER_USHORT(pwVirtAddress, wDummy); |
| pAccessOut->dwContent = READ_REGISTER_USHORT(pwVirtAddress); |
| break; |
| case LCR_AND: |
| wDummy = READ_REGISTER_USHORT(pwVirtAddress); |
| wDummy &= (USHORT)pAccessIn->dwContent; |
| WRITE_REGISTER_USHORT(pwVirtAddress, wDummy); |
| pAccessOut->dwContent = READ_REGISTER_USHORT(pwVirtAddress); |
| break; |
| case LCR_WRITE_ONLY: |
| WRITE_REGISTER_USHORT(pwVirtAddress, (USHORT)pAccessIn->dwContent); |
| break; |
| case LCR_READ: |
| pAccessOut->dwContent = READ_REGISTER_USHORT(pwVirtAddress); |
| break; |
| default: Status = STATUS_ILLEGAL_INSTRUCTION; |
| break; |
| } |
| } |
| } |
| // 3rd part: check illegal byte lanes |
| if (!((pAccessIn->bBytesLane == LONG_ACCESS) || (pAccessIn->bBytesLane == WORD_ACCESS))) |
| Status = STATUS_ILLEGAL_INSTRUCTION; |
| } |
| else |
| Status = STATUS_ILLEGAL_INSTRUCTION; |
| } |
| // do here in between what has to be done end ------------- |
| if (Status == STATUS_SUCCESS) |
| irp_info = sizeof(PCICC32_LCR_ACCESS); |
| COMPLETE_REQUEST; |
| KdPrint(("ioctl_access_lcr(), Status = 0x%08x\n", Status)); |
| return Status; |
| } |
| //------------------------------------------------------------------------ |
| // the ultimate jumptable for ioctl |
| // |
| NTSTATUS (*ioctl[])(PDEVICE_OBJECT device_Obj, PIRP Irp, PIO_STACK_LOCATION IrpStack) = |
| { |
| ioctl_dummy, // 0 |
| ioctl_dummy, // 4 |
| ioctl_get_status, // 8 |
| ioctl_clear_status, // 0x0c |
| ioctl_access_para, // 0x10 |
| ioctl_control_interrupts, // 0x14 |
| ioctl_dummy, // 0x18 |
| ioctl_irq_status, // 0x1c |
| ioctl_access_lcr // 0x20 |
| }; |
| /drivers/wiener_pcicc32/SOURCE/pcicc32_v.h |
|---|
| 0,0 → 1,34 |
| #ifndef __PCICC32_V_H__ |
| #define __PCICC32_V_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32terface from ARW Elektronik, Germany --------- |
| // header file belonging to pcicc32_v.c |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 02.07.2000 |
| // |
| //------------------------------------------------------------------------- |
| // DEFINES |
| // |
| #include <pcicc32_drv.h> |
| //------------------------------------------------------------------------- |
| // PROTOTYPES |
| // |
| NTSTATUS PCICC32ScanCC32(PDEVICE_OBJECT deviceObj); |
| NTSTATUS PCICC32DeInitPCIADAs(PDEVICE_OBJECT deviceObj); |
| void enableCC32(PCIADA *pciada); |
| void disableCC32(PCIADA *pciada); |
| #endif // __PCICC32_V_H__ |
| /drivers/wiener_pcicc32/SOURCE/pcicc32.inf |
|---|
| 0,0 → 1,104 |
| ;=========================================================== |
| ; File : pcicc32.inf |
| ; |
| ; Abstract: Windows 2000 INF for PCICC32 boards from ARW Elektronik, Germany |
| ; |
| ;=========================================================== |
| [Version] |
| Signature = $CHICAGO$ |
| Provider = %ARW% |
| Class = %PCICC32_class_name% |
| ClassGUID = {c4ad1dfa-3e35-4659-bf2b-c83cda6833e1} |
| DriverVer = 11/25/2001,2.3.0.0 |
| ;----------------------------------------------------------- |
| ; Driver information |
| ;----------------------------------------------------------- |
| [Manufacturer] |
| %ARW_MFG% = ARW.Mfg |
| [ARW.Mfg] |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050&REV_01 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050&REV_02 |
| [ClassInstall32] |
| AddReg=PCICC32_class_addreg |
| [PCICC32_class_addreg] |
| HKR,,,,%PCICC32_class_name% |
| HKR,,Icon,0,0 |
| ;----------------------------------------------------------- |
| ; General installation section |
| ;----------------------------------------------------------- |
| [CopyFiles_9050] |
| pcicc32.sys,,,2 |
| ;----------------------------------------------------------- |
| ; Windows 2000 installation section |
| ;----------------------------------------------------------- |
| [Install_PCICC32.NT] |
| AddReg = AddRegistry_NT_9050 |
| CopyFiles = CopyFiles_9050 |
| [Install_PCICC32.NT.Services] |
| AddService = pcicc32, 0x00000002, Service_Inst_9050, EventLog_Inst_9050 |
| [AddRegistry_NT_9050] |
| [Service_Inst_9050] |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 0 ; SERVICE_ERROR_IGNORE |
| ServiceBinary = %12%\pcicc32.sys |
| ;----------------------------------------------------------- |
| ; Event log registry entries |
| ;----------------------------------------------------------- |
| [EventLog_Inst_9050] |
| AddReg = EventLog_AddReg_9050 |
| [EventLog_AddReg_9050] |
| HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\Drivers\pcicc32.sys" |
| HKR,,TypesSupported,0x00010001,7 |
| ;----------------------------------------------------------- |
| ; Source file information |
| ;----------------------------------------------------------- |
| [SourceDisksNames.x86] |
| 1 = %InstallDisk%,"",1 |
| [SourceDisksFiles] |
| pcicc32.sys = 1 |
| [DestinationDirs] |
| DefaultDestDir = 12 ; drivers |
| ;----------------------------------------------------------- |
| ; String information |
| ;----------------------------------------------------------- |
| [Strings] |
| InstallDisk = "ARW Elektronik Windows Driver Installation Disk" |
| ARW_MFG = "ARW Elektronik, Germany" |
| ARW = "ARW Elektronik, Germany" |
| PCICC32_class_name = "ARW BUS Interfaces" |
| /drivers/wiener_pcicc32/SOURCE/pcicc32_io.h |
|---|
| 0,0 → 1,30 |
| #ifndef __PCIVME_IO_H__ |
| #define __PCIVME_IO_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCIVME interface from ARW Elektronik, Germany --------- |
| // the ioctl functions header file |
| // |
| // (c) 1999 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // ntddk.h must included first! |
| // |
| // what who when |
| // started AR 03.07.99 |
| // |
| //------------------------------------------------------------------------ |
| // FUNCTIONS + EXTERNALS |
| // |
| NTSTATUS (*ioctl[])(PDEVICE_OBJECT device_Obj, PIRP irp, PIO_STACK_LOCATION IrpStack); |
| void fMyDefferedRoutine(PKDPC Dpc, PVOID pvDevice_object, PVOID pvPciada, PVOID Nothing); |
| void CancelRequest(PDEVICE_OBJECT device_Obj, PIRP Irp); |
| #endif // __PCIVME_IO_H__ |
| /drivers/wiener_pcicc32/SOURCE/pcicc32.plg |
|---|
| 0,0 → 1,49 |
| <html> |
| <body> |
| <pre> |
| <h1>Erstellungsprotokoll</h1> |
| <h3> |
| --------------------Konfiguration: pcicc32 - Win32 Debug-------------------- |
| </h3> |
| <h3>Befehlszeilen</h3> |
| Erstellen der temporären Datei "C:\DOKUME~1\klaus\LOKALE~1\Temp\RSP21.tmp" mit Inhalten |
| [ |
| /nologo /Gz /MLd /W3 /Gm /Gi /Zi /Od /I "\DDK\inc" /I "." /D DBG=1 /D "_X86_" /D _WIN32_WINNT=0x500 /Fp"Debug/pcicc32.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /Gs -GF /c |
| "D:\Work\MyProjects\pcicc32\pcicc32_drv.c" |
| "D:\Work\MyProjects\pcicc32\pcicc32_i.c" |
| "D:\Work\MyProjects\pcicc32\pcicc32_io.c" |
| "D:\Work\MyProjects\pcicc32\pcicc32_v.c" |
| ] |
| Creating command line "cl.exe @C:\DOKUME~1\klaus\LOKALE~1\Temp\RSP21.tmp" |
| Erstellen der temporären Datei "C:\DOKUME~1\klaus\LOKALE~1\Temp\RSP22.tmp" mit Inhalten |
| [ |
| int64.lib ntoskrnl.lib hal.lib /nologo /base:"0x10000" /entry:"DriverEntry" /incremental:no /pdb:"Debug/pcicc32.pdb" /debug /machine:I386 /nodefaultlib /out:"Debug\pcicc32.SYS" /pdbtype:con /libpath:"\DDK\lib\i386\checked" -driver -subsystem:NATIVE,4.00 |
| .\Debug\pcicc32_drv.obj |
| .\Debug\pcicc32_i.obj |
| .\Debug\pcicc32_io.obj |
| .\Debug\pcicc32_v.obj |
| ] |
| Erstellen der Befehlzeile "link.exe @C:\DOKUME~1\klaus\LOKALE~1\Temp\RSP22.tmp" |
| Erstellen der temporären Datei "C:\DOKUME~1\klaus\LOKALE~1\Temp\RSP23.bat" mit Inhalten |
| [ |
| @echo off |
| copy .\Debug\pcicc32.SYS C:\WINNT\System32\Drivers\*.* |
| ] |
| Erstellen der Befehlzeile "C:\DOKUME~1\klaus\LOKALE~1\Temp\RSP23.bat" |
| Kompilierung läuft... |
| pcicc32_drv.c |
| pcicc32_i.c |
| pcicc32_io.c |
| pcicc32_v.c |
| Linker-Vorgang läuft... |
| <h3>Ausgabefenster</h3> |
| Copying Driver to System32\Drivers |
| 1 Datei(en) kopiert. |
| <h3>Ergebnisse</h3> |
| pcicc32.SYS - 0 Fehler, 0 Warnung(en) |
| </pre> |
| </body> |
| </html> |
| /drivers/wiener_pcicc32/SOURCE/pcicc32.dsp |
|---|
| 0,0 → 1,163 |
| # Microsoft Developer Studio Project File - Name="pcicc32" - Package Owner=<4> |
| # Microsoft Developer Studio Generated Build File, Format Version 6.00 |
| # ** NICHT BEARBEITEN ** |
| # TARGTYPE "Win32 (x86) Application" 0x0101 |
| CFG=pcicc32 - Win32 Debug |
| !MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE |
| !MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl |
| !MESSAGE |
| !MESSAGE NMAKE /f "pcicc32.mak". |
| !MESSAGE |
| !MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben |
| !MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: |
| !MESSAGE |
| !MESSAGE NMAKE /f "pcicc32.mak" CFG="pcicc32 - Win32 Debug" |
| !MESSAGE |
| !MESSAGE Für die Konfiguration stehen zur Auswahl: |
| !MESSAGE |
| !MESSAGE "pcicc32 - Win32 Release" (basierend auf "Win32 (x86) Application") |
| !MESSAGE "pcicc32 - Win32 Debug" (basierend auf "Win32 (x86) Application") |
| !MESSAGE |
| # Begin Project |
| # PROP AllowPerConfigDependencies 0 |
| # PROP Scc_ProjName "" |
| # PROP Scc_LocalPath "" |
| CPP=cl.exe |
| MTL=midl.exe |
| RSC=rc.exe |
| !IF "$(CFG)" == "pcicc32 - Win32 Release" |
| # PROP BASE Use_MFC 0 |
| # PROP BASE Use_Debug_Libraries 0 |
| # PROP BASE Output_Dir "Release" |
| # PROP BASE Intermediate_Dir "Release" |
| # PROP BASE Target_Dir "" |
| # PROP Use_MFC 0 |
| # PROP Use_Debug_Libraries 0 |
| # PROP Output_Dir "Release" |
| # PROP Intermediate_Dir "Release" |
| # PROP Ignore_Export_Lib 0 |
| # PROP Target_Dir "" |
| # ADD BASE CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D DBG=0 /YX /FD /c |
| # ADD CPP /nologo /Gz /W3 /Gi /O2 /I "\DDK\inc" /I "." /D "NDEBUG" /D DBG=0 /D "_X86_" /D _WIN32_WINNT=0x500 /YX /FD /Gs -GF /c |
| # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 |
| # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 |
| # ADD BASE RSC /l 0x407 /d "NDEBUG" |
| # ADD RSC /l 0x407 /d "NDEBUG" |
| BSC32=bscmake.exe |
| # ADD BASE BSC32 /nologo |
| # ADD BSC32 /nologo |
| LINK32=link.exe |
| # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 |
| # ADD LINK32 int64.lib ntoskrnl.lib hal.lib /nologo /base:"0x10000" /entry:"DriverEntry" /machine:I386 /nodefaultlib /out:"Release\pcicc32.SYS" /libpath:"\DDK\lib\i386\free" -driver -subsystem:NATIVE,4.00 |
| # Begin Custom Build - Copying Driver to System32\Drivers |
| TargetPath=.\Release\pcicc32.SYS |
| TargetName=pcicc32 |
| InputPath=.\Release\pcicc32.SYS |
| SOURCE="$(InputPath)" |
| "$(SystemRoot)\System32\Drivers\$(TargetName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" |
| copy $(TargetPath) $(SystemRoot)\System32\Drivers\*.* |
| # End Custom Build |
| !ELSEIF "$(CFG)" == "pcicc32 - Win32 Debug" |
| # PROP BASE Use_MFC 0 |
| # PROP BASE Use_Debug_Libraries 1 |
| # PROP BASE Output_Dir "Debug" |
| # PROP BASE Intermediate_Dir "Debug" |
| # PROP BASE Target_Dir "" |
| # PROP Use_MFC 0 |
| # PROP Use_Debug_Libraries 1 |
| # PROP Output_Dir "Debug" |
| # PROP Intermediate_Dir "Debug" |
| # PROP Ignore_Export_Lib 0 |
| # PROP Target_Dir "" |
| # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D DBG=1 /YX /FD /GZ /c |
| # ADD CPP /nologo /Gz /W3 /Gm /Gi /Zi /Od /I "\DDK\inc" /I "." /D DBG=1 /D "_X86_" /D _WIN32_WINNT=0x500 /YX /FD /Gs -GF /c |
| # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 |
| # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 |
| # ADD BASE RSC /l 0x407 /d "_DEBUG" |
| # ADD RSC /l 0x407 /d "_DEBUG" |
| BSC32=bscmake.exe |
| # ADD BASE BSC32 /nologo |
| # ADD BSC32 /nologo |
| LINK32=link.exe |
| # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept |
| # ADD LINK32 int64.lib ntoskrnl.lib hal.lib /nologo /base:"0x10000" /entry:"DriverEntry" /incremental:no /debug /machine:I386 /nodefaultlib /out:"Debug\pcicc32.SYS" /pdbtype:con /libpath:"\DDK\lib\i386\checked" -driver -subsystem:NATIVE,4.00 |
| # Begin Custom Build - Copying Driver to System32\Drivers |
| TargetPath=.\Debug\pcicc32.SYS |
| TargetName=pcicc32 |
| InputPath=.\Debug\pcicc32.SYS |
| SOURCE="$(InputPath)" |
| "$(SystemRoot)\System32\Drivers\$(TargetName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" |
| copy $(TargetPath) $(SystemRoot)\System32\Drivers\*.* |
| # End Custom Build |
| !ENDIF |
| # Begin Target |
| # Name "pcicc32 - Win32 Release" |
| # Name "pcicc32 - Win32 Debug" |
| # Begin Group "Quellcodedateien" |
| # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" |
| # Begin Source File |
| SOURCE=.\pcicc32_drv.c |
| # End Source File |
| # Begin Source File |
| SOURCE=.\pcicc32_i.c |
| # End Source File |
| # Begin Source File |
| SOURCE=.\pcicc32_io.c |
| # End Source File |
| # Begin Source File |
| SOURCE=.\pcicc32_v.c |
| # End Source File |
| # End Group |
| # Begin Group "Header-Dateien" |
| # PROP Default_Filter "h;hpp;hxx;hm;inl" |
| # Begin Source File |
| SOURCE=.\pcicc32.h |
| # End Source File |
| # Begin Source File |
| SOURCE=.\pcicc32_drv.h |
| # End Source File |
| # Begin Source File |
| SOURCE=.\pcicc32_i.h |
| # End Source File |
| # Begin Source File |
| SOURCE=.\pcicc32_io.h |
| # End Source File |
| # Begin Source File |
| SOURCE=.\pcicc32_local.h |
| # End Source File |
| # Begin Source File |
| SOURCE=.\pcicc32_v.h |
| # End Source File |
| # End Group |
| # Begin Group "Ressourcendateien" |
| # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" |
| # End Group |
| # End Target |
| # End Project |
| /drivers/wiener_pcicc32/SOURCE/pcicc32.h |
|---|
| 0,0 → 1,157 |
| #ifndef __PCICC32_H__ |
| #define __PCICC32_H__ |
| //------------------------------------------------------------------------- |
| // WINNT driver for PCICC32 interface from ARW Elektronik, Germany -------- |
| // IO definitions and common data structures between application and driver |
| // |
| // (c) 2000,2001 ARW Elektronik |
| // |
| // this source code is published under GPL (Open Source). You can use, redistrubute and |
| // modify it unless this header is not modified or deleted. No warranty is given that |
| // this software will work like expected. |
| // This product is not authorized for use as critical component in life support systems |
| // wihout the express written approval of ARW Elektronik Germany. |
| // |
| // Please announce changes and hints to ARW Elektronik |
| // |
| // what who when |
| // started AR 16.04.2000 |
| // added irq functionality AR 24.02.2001 |
| // added until 'not Q' read/write mode AR 03.03.2001 |
| // added AUTOREAD AR 17.03.2001 |
| // |
| //------------------------------------------------------------------------- |
| // INCLUDES |
| // |
| // #include <devioctl.h> must be declared before inclusion when used for driver |
| // #include <winioctl.h> must be declared before inclusion when used for applications |
| //------------------------------------------------------------------------- |
| // DEFINES |
| // |
| //---------------------------------------------------------------------------------------- |
| // macros for simple CAMAC NAF address calculation |
| // |
| #define NAF(n, a, f) ((ULONG)((n << 10) + (a << 6) + ((f & 0xf) << 2))) |
| // to get a compatible view to WIN95 driver |
| #define USER_CONTROL_CODE(x) (x) |
| // VPCIC32D_ATTACH_CC32 and VPCIC32D_DETACH_CC32 are incompatible to WINNT - please use read and write commands |
| // get the interrupt and timeout status from a CC32 interface (0x00220008) |
| #define PCICC32_GET_STATUS CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(2),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // clear the timeout status of a CC32 interface (0x0022000C) |
| #define PCICC32_CLEAR_STATUS CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(3),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // set the access parameter for this file (0x00220010) |
| #define PCICC32_SET_ACCESS_PARA CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(4),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // allow or inhibit CC32 interrupt requests (0x00220014) |
| #define PCICC32_CONTROL_INTERRUPTS CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(5),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // requests thru blocking io the status of a pending or a rising interrupt (0x0022001C) |
| #define PCICC32_INSTALL_IRQ_BLOCK CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(7),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // requests to access the PLX LCR for test and debug (0x00220020) |
| #define PCICC32_ACCESS_LCR CTL_CODE(\ |
| FILE_DEVICE_UNKNOWN,\ |
| USER_CONTROL_CODE(8),\ |
| METHOD_BUFFERED,\ |
| FILE_ANY_ACCESS) |
| // set to check for control-code overflow |
| #define PCICC32_LAST_CTL_CODE PCICC32_ACCESS_LCR |
| // mask bits for interrupt status |
| #define LAM_IRQ 0x00FFFFFF // there was a LAM responible for the timeout |
| #define CONNECTION_TIMEOUT 0x08000000 // irq raised through a connection timout |
| #define LAM_BUS_OR 0x10000000 // a LAM-BUS-OR is pending |
| #define LAM_NOT_OR 0x20000000 // a LAM-NOT-OR is pending |
| #define LAM_AND_OR 0x40000000 // a LAM-AND-OR is pending |
| #define LAM_FF 0x80000000 // the LAM-Flip-Flop was set |
| // switches for PCICC32_ACCESS_COMMAND.wAccessType |
| #define WORD_ACCESS (UCHAR)2 // word |
| #define LONG_ACCESS (UCHAR)4 // long |
| // define bits for PCICC32_ACCESS_COMMAND.wBlockTransfer |
| #define UNTIL_NOT_Q 0x0001 // read/write unttil 'not Q' switch |
| #define AUTOREAD 0x0002 // PCIADA data pipelining access tuner switch |
| // data lane size constants for PCICC32_ACCESS_LCR |
| #define BYTE_ACCESS (UCHAR)1 // write byte wise (illegal) |
| #define WORD_ACCESS (UCHAR)2 // word |
| #define LONG_ACCESS (UCHAR)4 // long |
| // PCICC32_ACCESS_LCR access constants |
| #define LCR_READ 0 // read only access |
| #define LCR_WRITE 1 // write and read back access |
| #define LCR_OR 2 // read, bitwise 'or' content and read back access |
| #define LCR_AND 3 // read, bitwise 'and' content and read back access |
| #define LCR_WRITE_ONLY 4 // do not read back after write |
| // this structure is output from VPCIC32_GET_STATUS call |
| typedef struct |
| { |
| ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
| USHORT bTimeout; // denotes a pending PCIADA timeout |
| USHORT bInterrupt; // denotes a pending LAM interrupt |
| } PCICC32_STATUS; |
| // this structure sets the access parameter for following reads or writes to this path |
| typedef struct |
| { |
| ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
| USHORT wAccessType; // set the current access type (WORD_ACCESS, LONG_ACCESS) |
| USHORT wBlockTransfer; // set AUTOREAD or UNTIL_NOT_Q |
| } PCICC32_ACCESS_COMMAND; |
| // this structure is used to control the interrupts |
| typedef struct |
| { |
| ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
| USHORT wEnable; // a 1 allows, a 0 inhibits interrupt requests |
| } PCICC32_IRQ_CONTROL; |
| // this structure returns from a blocking interrupt status call |
| typedef struct |
| { |
| ULONG dwInterface; // CC32 module number (for compatibility to win95/98 only - not used) |
| ULONG dwInterruptFlags; // the return status at the return of the blocking call |
| } PCICC32_IRQ_RESPONSE; |
| // structure to access the local configuration space of PLX chip (test / debug only) with PCICC32_ACCESS_LCR |
| typedef struct |
| { |
| ULONG dwInterface; // here dummy 'cause of compatibility to WIN95 |
| ULONG dwContent; // content to write, and, or |
| USHORT wRegisterAddress; // address offset of LCR register |
| UCHAR bAccessMode; // LCR_READ, write, or, and |
| UCHAR bBytesLane; // the data access width |
| } PCICC32_LCR_ACCESS; |
| #endif // __PCICC32_H__ |
| /drivers/wiener_pcicc32/SOURCE/guid.h |
|---|
| 0,0 → 1,6 |
| INTERFACENAME = { /* c4ad1dfa-3e35-4659-bf2b-c83cda6833e1 */ |
| 0xc4ad1dfa, |
| 0x3e35, |
| 0x4659, |
| {0xbf, 0x2b, 0xc8, 0x3c, 0xda, 0x68, 0x33, 0xe1} |
| }; |
| /drivers/wiener_pcicc32/pcicc32.inf |
|---|
| 0,0 → 1,104 |
| ;=========================================================== |
| ; File : pcicc32.inf |
| ; |
| ; Abstract: Windows 2000 INF for PCICC32 boards from ARW Elektronik, Germany |
| ; |
| ;=========================================================== |
| [Version] |
| Signature = $CHICAGO$ |
| Provider = %ARW% |
| Class = %PCICC32_class_name% |
| ClassGUID = {c4ad1dfa-3e35-4659-bf2b-c83cda6833e1} |
| DriverVer = 06/18/2002,2.3.0.4 |
| ;----------------------------------------------------------- |
| ; Driver information |
| ;----------------------------------------------------------- |
| [Manufacturer] |
| %ARW_MFG% = ARW.Mfg |
| [ARW.Mfg] |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050&REV_01 |
| PCICC32 CAMAC Interface = Install_PCICC32, PCI\VEN_10B5&DEV_2258&SUBSYS_22589050&REV_02 |
| [ClassInstall32] |
| AddReg=PCICC32_class_addreg |
| [PCICC32_class_addreg] |
| HKR,,,,%PCICC32_class_name% |
| HKR,,Icon,0,0 |
| ;----------------------------------------------------------- |
| ; General installation section |
| ;----------------------------------------------------------- |
| [CopyFiles_9050] |
| pcicc32.sys,,,2 |
| ;----------------------------------------------------------- |
| ; Windows 2000 installation section |
| ;----------------------------------------------------------- |
| [Install_PCICC32.NT] |
| AddReg = AddRegistry_NT_9050 |
| CopyFiles = CopyFiles_9050 |
| [Install_PCICC32.NT.Services] |
| AddService = pcicc32, 0x00000002, Service_Inst_9050, EventLog_Inst_9050 |
| [AddRegistry_NT_9050] |
| [Service_Inst_9050] |
| ServiceType = 1 ; SERVICE_KERNEL_DRIVER |
| StartType = 3 ; SERVICE_DEMAND_START |
| ErrorControl = 0 ; SERVICE_ERROR_IGNORE |
| ServiceBinary = %12%\pcicc32.sys |
| ;----------------------------------------------------------- |
| ; Event log registry entries |
| ;----------------------------------------------------------- |
| [EventLog_Inst_9050] |
| AddReg = EventLog_AddReg_9050 |
| [EventLog_AddReg_9050] |
| HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\Drivers\pcicc32.sys" |
| HKR,,TypesSupported,0x00010001,7 |
| ;----------------------------------------------------------- |
| ; Source file information |
| ;----------------------------------------------------------- |
| [SourceDisksNames.x86] |
| 1 = %InstallDisk%,"",1 |
| [SourceDisksFiles] |
| pcicc32.sys = 1 |
| [DestinationDirs] |
| DefaultDestDir = 12 ; drivers |
| ;----------------------------------------------------------- |
| ; String information |
| ;----------------------------------------------------------- |
| [Strings] |
| InstallDisk = "ARW Elektronik Windows Driver Installation Disk" |
| ARW_MFG = "ARW Elektronik, Germany" |
| ARW = "ARW Elektronik, Germany" |
| PCICC32_class_name = "ARW BUS Interfaces" |
| /drivers/wiener_pcicc32/pcicc32_VC2013_Win7_Win8_Win8.1.zip |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /drivers/wiener_pcicc32/pcicc32.SYS |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |