DMDLL_PCIInterruptConnect

대상하드웨어를 위하여 인터럽트를 설정합니다. 하나의 하드웨어를 대상으로 복수개의 열기작업을 사용하는 경우, 드라이버가 사용하는 인터럽트서비스루틴은 공유되기 때문에 반드시 하나의 하드웨어에는 한번만 DMDLL_PCIInterruptConnect() 함수를 사용해야 합니다.


Description

int DMDLL_PCIInterruptConnect( 
    IN DMHANDLE         OpenedHandle,
    IN ISRSCRIPT        *pInterruptScript
)

Parameters

OpenedHandle
    작업중이던 디바이스 핸들, DMDLL_OpenDeviceForInterfaceDeviceStack()함수를 통해서 얻은 권한핸들이어야 합니다
pInterruptScript
    인터럽트와 관련된 스크립트정보를 제공합니다

Return Values

return  int
    작업이 성공할 경우 DMSTAT_SUCCESS 리턴

Changelog


Examples

ISRSCRIPT IsrScript;
IsrScript.Version = DMIICORE_ISCRIPT_VERSION1;
/*
ISRSCRIPT 구조체는 인터럽트서비스루틴으로 하여금 어떤 조건이 발생하면 인터럽트로 간주할것인가를 알리는 역할을 수행한다
또한 인터럽트를 금지시키는 코드를 선택적으로 넣을수 있다
*/
IsrScript.CONDITION.ON = TRUE;
IsrScript.CONDITION.TypeNumber = DMIICORE_ISCRIPT_TYPE_4BYTE;
IsrScript.CONDITION.Operand1Type = DMIICORE_ISCRIPT_OPERANDTYPE_BASEADDRESS;
IsrScript.CONDITION.Operand1Value = DMIICORE_ISCRIPT_OPERANDVALUE_BASE0;
IsrScript.CONDITION.Operand1Offset = 0x04;
IsrScript.CONDITION.Operation1Type = DMIICORE_ISCRIPT_OPERATIONTYPE_AND;
IsrScript.CONDITION.Operand2Type = DMIICORE_ISCRIPT_OPERANDTYPE_CONSTANT;
IsrScript.CONDITION.Operand2Value = 0x0000000F;
IsrScript.CONDITION.comparetype = DMIICORE_ISCRIPT_COMPARETYPE_EQUAL;
IsrScript.CONDITION.Operand3Type = DMIICORE_ISCRIPT_OPERANDTYPE_CONSTANT;
IsrScript.CONDITION.Operand3Value = 0x00000008;
/*
위와 같은 조건은 다음을 의미한다
if( ( *(ULONG *)((UCHAR *)BaseAddress0 + 0x4) & (ULONG)0x0F ) == (ULONG)0x08 )
{
인터럽트가 발생된것으로 간주한다
}
*/

IsrScript.MASK.ON = TRUE;
IsrScript.MASK.TypeNumber = DMIICORE_ISCRIPT_TYPE_4BYTE;
IsrScript.MASK.Operand1Type = DMIICORE_ISCRIPT_OPERANDTYPE_BASEADDRESS;
IsrScript.MASK.Operand1Value = DMIICORE_ISCRIPT_OPERANDVALUE_BASE0;
IsrScript.MASK.Operand1Offset = 0x04;
IsrScript.MASK.Operation1Type = DMIICORE_ISCRIPT_OPERATIONTYPE_OR;
IsrScript.MASK.Operand2Type = DMIICORE_ISCRIPT_OPERANDTYPE_CONSTANT;
IsrScript.MASK.Operand2Value = 0x01;
IsrScript.MASK.comparetype = DMIICORE_ISCRIPT_COMPARETYPE_STORE;
IsrScript.MASK.Operand3Type = DMIICORE_ISCRIPT_OPERANDTYPE_CONSTANT;
IsrScript.MASK.TypeNumber = DMIICORE_ISCRIPT_TYPE_4BYTE;
IsrScript.MASK.Operand3Type = DMIICORE_ISCRIPT_OPERANDTYPE_BASEADDRESS;
IsrScript.MASK.Operand3Value = DMIICORE_ISCRIPT_OPERANDVALUE_BASE0;
IsrScript.MASK.Operand3Offset = 0x04;
/*
위와 같은 내용은 다음의 마스킹방법을 의미한다
( *(ULONG *)((UCHAR *)BaseAddress0 + 0x04) | (ULONG)0x01 ) => *(ULONG *)((UCHAR *)BaseAddress0 + 0x04) )
인터럽트가 금지된다
*/

dmStatus = DMDLL_PCIInterruptConnect(DMHandle, &IsrScript);

results matching ""

    No results matching ""