Subversion Repositories f9daq

Compare Revisions

No changes between revisions

Ignore whitespace Rev 22 → Rev 23

/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;
}
 
 
/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"
/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
/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>
{{{
}}}
 
###############################################################################
 
/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;
}
 
/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
/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__
/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__
/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"
/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
/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
/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
/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__
 
/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);
}
/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
};
 
/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__
/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"
/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__
/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>
/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
/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__
/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}
};
/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"
/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
/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
/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
/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>
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/wiener_pcicc32/pcicc32/pcicc32 Package/Win8.1Debug/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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>
/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"
/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"
/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
/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
/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
/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
/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
/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"
/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"
/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
/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
/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
/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
/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
/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"
/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"
/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
/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
/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
/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
/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
/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;
}
 
 
/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>
/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;
}
 
/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__
/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
/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"
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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"
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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__
/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
/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"
/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
/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
/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
/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
/wiener_pcicc32/pcicc32/pcicc32/Win8Release/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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>
/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__
 
/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
/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"
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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"
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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);
}
/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
/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"
/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
/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
/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
/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
/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
/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
/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\|
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
};
 
/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"
/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__
/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__
/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__
/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}
};
/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"
/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"
/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
/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
/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
/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
/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
/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
/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
/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"
/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"
/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
/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
/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
/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
/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
/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
/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
/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"
/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"
/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
/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
/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
/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
/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
/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
/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