mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
3.3 KiB
170 lines
3.3 KiB
#include "insignia.h"
|
|
#include "host_def.h"
|
|
/* INSIGNIA MODULE SPECIFICATION
|
|
-----------------------------
|
|
|
|
MODULE NAME : Slave Interrupt Bios
|
|
|
|
THIS PROGRAM SOURCE FILE IS SUPPLIED IN CONFIDENCE TO THE
|
|
CUSTOMER, THE CONTENTS OR DETAILS OF ITS OPERATION MAY
|
|
ONLY BE DISCLOSED TO PERSONS EMPLOYED BY THE CUSTOMER WHO
|
|
REQUIRE A KNOWLEDGE OF THE SOFTWARE CODING TO CARRY OUT
|
|
THEIR JOB. DISCLOSURE TO ANY OTHER PERSON MUST HAVE PRIOR
|
|
AUTHORISATION FROM THE DIRECTORS OF INSIGNIA SOLUTIONS INC.
|
|
|
|
DESIGNER : J.P.Box
|
|
DATE : October '88
|
|
|
|
PURPOSE : To provide BIOS code used by the interrupts from
|
|
the slave ICA
|
|
|
|
The Following Routines are defined:
|
|
1. D11_int
|
|
2. re_direct
|
|
3. int_287
|
|
|
|
=========================================================================
|
|
|
|
AMMENDMENTS :
|
|
|
|
=========================================================================
|
|
*/
|
|
|
|
#ifdef SCCSID
|
|
static char SccsID[]=" @(#)slave_bios.c 1.6 08/10/92 Copyright Insignia Solutions Ltd.";
|
|
#endif
|
|
|
|
#ifdef SEGMENTATION
|
|
/*
|
|
* The following #include specifies the code segment into which this
|
|
* module will by placed by the MPW C compiler on the Mac II running
|
|
* MultiFinder.
|
|
*/
|
|
#include "AT_STUFF.seg"
|
|
#endif
|
|
|
|
#include "xt.h"
|
|
#include "ios.h"
|
|
#include "sas.h"
|
|
|
|
|
|
/*
|
|
=========================================================================
|
|
|
|
FUNCTION : D11_int
|
|
|
|
PURPOSE : Services unused interrupt vectors
|
|
|
|
RETURNED STATUS : None
|
|
|
|
DESCRIPTION :
|
|
|
|
|
|
=======================================================================
|
|
*/
|
|
#define intr_flag 0x46b
|
|
|
|
void D11_int()
|
|
{
|
|
half_word level, /* int. level being serviced */
|
|
level2, /* ica2 level being serviced */
|
|
mask; /* interrupt mask */
|
|
|
|
/* read in-service register */
|
|
outb( ICA0_PORT_0, 0x0B );
|
|
inb( ICA0_PORT_0, &level );
|
|
|
|
if( level == 0 )
|
|
{
|
|
/* Not a H/w interrupt */
|
|
level = 0xff;
|
|
}
|
|
else
|
|
{
|
|
/* read in-service register from int controller 2 */
|
|
outb( ICA1_PORT_0, 0x0B );
|
|
inb( ICA1_PORT_0, &level2 );
|
|
|
|
if( level2 == 0 )
|
|
{
|
|
/* get current mask value */
|
|
inb( ICA0_PORT_1, &mask );
|
|
|
|
/* don't disable 2nd controller */
|
|
level &= 0xfb;
|
|
|
|
/* set new interrupt mask */
|
|
mask |= level;
|
|
outb( ICA0_PORT_1, mask );
|
|
}
|
|
else
|
|
{
|
|
/* get 2nd interrupt mask */
|
|
inb( ICA1_PORT_1, &mask );
|
|
|
|
/* mask off level being serviced */
|
|
mask |= level2;
|
|
outb( ICA1_PORT_1, mask );
|
|
|
|
/* send EOI to 2nd chip */
|
|
outb( ICA1_PORT_1, 0x20 );
|
|
}
|
|
/* send EOI to 1st chip */
|
|
outb( ICA0_PORT_0, 0x20 );
|
|
}
|
|
/* set flag */
|
|
sas_store (intr_flag , level);
|
|
|
|
return;
|
|
}
|
|
|
|
/*
|
|
=========================================================================
|
|
|
|
FUNCTION : re_direct
|
|
|
|
PURPOSE : re direct slave interrupt 9 to level 2
|
|
|
|
RETURNED STATUS : None
|
|
|
|
DESCRIPTION :
|
|
|
|
=======================================================================
|
|
*/
|
|
void re_direct()
|
|
|
|
{
|
|
/* EOI to slave interrupt controller */
|
|
|
|
outb( ICA1_PORT_0, 0x20 );
|
|
|
|
return;
|
|
}
|
|
|
|
/*
|
|
=========================================================================
|
|
|
|
FUNCTION : int_287
|
|
|
|
PURPOSE : service X287 interrupts
|
|
|
|
RETURNED STATUS : none
|
|
|
|
DESCRIPTION :
|
|
|
|
=======================================================================
|
|
*/
|
|
void int_287()
|
|
|
|
{
|
|
/* remove the interrupt request */
|
|
outb(0xf0, 0);
|
|
|
|
/* enable the interrupt */
|
|
outb( ICA1_PORT_0, 0x20 ); /* Slave */
|
|
outb( ICA0_PORT_0, 0x20 ); /* Master */
|
|
|
|
/* int 02 is now called from bios1.rom */
|
|
|
|
return;
|
|
}
|