125 lines
2.9 KiB
C
125 lines
2.9 KiB
C
|
/*****************************************************************************
|
|||
|
*
|
|||
|
* COPYRIGHT 1993 - COLORADO MEMORY SYSTEMS, INC.
|
|||
|
* ALL RIGHTS RESERVED.
|
|||
|
*
|
|||
|
******************************************************************************
|
|||
|
*
|
|||
|
* FILE: \SE\DRIVER\Q117KDI\NT\SRC\0X15A02.C
|
|||
|
*
|
|||
|
* FUNCTION: kdi_Hardware
|
|||
|
*
|
|||
|
* PURPOSE:
|
|||
|
*
|
|||
|
* HISTORY:
|
|||
|
* $Log: J:\se.vcs\driver\q117kdi\nt\src\0x15a02.c $
|
|||
|
*
|
|||
|
* Rev 1.2 26 Apr 1994 16:10:42 KEVINKES
|
|||
|
* Added status to clear interrupt.
|
|||
|
*
|
|||
|
* Rev 1.1 18 Jan 1994 16:28:26 KEVINKES
|
|||
|
* Fixed compile errors and added debug changes.
|
|||
|
*
|
|||
|
* Rev 1.0 02 Dec 1993 15:08:04 KEVINKES
|
|||
|
* Initial Revision.
|
|||
|
*
|
|||
|
*****************************************************************************/
|
|||
|
#define FCT_ID 0x15A02
|
|||
|
#include "include\public\adi_api.h"
|
|||
|
#include "include\public\frb_api.h"
|
|||
|
#include "include\private\cqd_pub.h"
|
|||
|
#include "q117kdi\include\kdiwhio.h"
|
|||
|
#include "q117kdi\include\kdiwpriv.h"
|
|||
|
#include "include\private\kdi_pub.h"
|
|||
|
/*endinclude*/
|
|||
|
|
|||
|
dBoolean kdi_Hardware
|
|||
|
(
|
|||
|
/* INPUT PARAMETERS: */
|
|||
|
|
|||
|
PKINTERRUPT interrupt,
|
|||
|
dVoidPtr context
|
|||
|
|
|||
|
/* UPDATE PARAMETERS: */
|
|||
|
|
|||
|
/* OUTPUT PARAMETERS: */
|
|||
|
|
|||
|
)
|
|||
|
/* COMMENTS: *****************************************************************
|
|||
|
*
|
|||
|
* Routine Description:
|
|||
|
*
|
|||
|
* This routine is called at DIRQL by the system when the controller
|
|||
|
* interrupts.
|
|||
|
*
|
|||
|
* Arguments:
|
|||
|
*
|
|||
|
* Interrupt - a pointer to the interrupt object.
|
|||
|
*
|
|||
|
* Context - a pointer to our controller data area for the controller
|
|||
|
* that interrupted. (This was set up by the call to
|
|||
|
* IoConnectInterrupt).
|
|||
|
*
|
|||
|
* Return Value:
|
|||
|
*
|
|||
|
* Normally returns TRUE, but will return FALSE if this interrupt was
|
|||
|
* not expected.
|
|||
|
*
|
|||
|
* DEFINITIONS: *************************************************************/
|
|||
|
{
|
|||
|
|
|||
|
/* DATA: ********************************************************************/
|
|||
|
|
|||
|
dBoolean no_chain = dFALSE;
|
|||
|
KdiContextPtr kdi_context;
|
|||
|
|
|||
|
/* CODE: ********************************************************************/
|
|||
|
|
|||
|
UNREFERENCED_PARAMETER( interrupt );
|
|||
|
|
|||
|
kdi_context = context;
|
|||
|
|
|||
|
if (kdi_context->current_interrupt && kdi_context->interrupt_pending) {
|
|||
|
|
|||
|
//
|
|||
|
// Check to see if the interrupt is ours
|
|||
|
//
|
|||
|
kdi_context->interrupt_status = cqd_ClearInterrupt(
|
|||
|
kdi_context->cqd_context,
|
|||
|
kdi_context->interrupt_pending );
|
|||
|
|
|||
|
|
|||
|
if (kdi_context->interrupt_status == DONT_PANIC) {
|
|||
|
|
|||
|
//
|
|||
|
// We found a valid interrupt from the floppy, so
|
|||
|
// Reset interrupt pending flag and schedule a DPC to process
|
|||
|
// the interrupt
|
|||
|
//
|
|||
|
|
|||
|
kdi_context->interrupt_pending = dFALSE;
|
|||
|
|
|||
|
IoRequestDpc(
|
|||
|
kdi_context->device_object,
|
|||
|
kdi_context->device_object->CurrentIrp,
|
|||
|
(dVoidPtr) dNULL_PTR );
|
|||
|
|
|||
|
|
|||
|
no_chain = dTRUE;
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
kdi_CheckedDump(
|
|||
|
QIC117INFO,
|
|||
|
"Q117i: Unexpected IRQ processed\n", 0l);
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
return no_chain;
|
|||
|
}
|
|||
|
|
|||
|
|