221 lines
5.8 KiB
C
221 lines
5.8 KiB
C
//------------------------------------------------------------------------
|
|
//
|
|
// CARDT348.C
|
|
//
|
|
// T348 Adapter Specific File
|
|
//
|
|
// See also cardtxxx.h, cardtxxx.h may redefine some functions with #defines.
|
|
//
|
|
// Revisions:
|
|
// 09-01-92 KJB First.
|
|
// 02-25-93 KJB Reorganized, supports dataunderrun with long delay
|
|
// for under run on large xfers. Can we fix this?
|
|
// 03-22-93 KJB Reorged for functional library interface.
|
|
// 03-26-93 JAP Fixed up prototype typedef inconsistencies
|
|
// 04-05-93 KJB Fixed definition problem for WINNT.
|
|
// Involving CardAddressRange...
|
|
// 04-22-93 JAP Added AdapterInterrupts[] and CardGetIRQ().
|
|
// 05-14-93 KJB Removed P3CDoIo, it did not work for scatter gather.
|
|
// 05-17-93 KJB Fixed warning message.
|
|
//
|
|
//------------------------------------------------------------------------
|
|
|
|
|
|
#include CARDTXXX_H
|
|
|
|
#ifdef WINNT
|
|
//
|
|
// The address ranges the card will use. These are accessed by trantor.c
|
|
// to inform NTOS of the resources we are using.
|
|
//
|
|
CONST CardAddressRange cardAddressRange[] =
|
|
{
|
|
{0x00,0x03,FALSE}, // 0x3bc - 0x3be
|
|
};
|
|
#endif
|
|
|
|
|
|
//------------------------------------------------------------------------
|
|
// The following table specifies the possible interrupts that
|
|
// can be used by the adapter. A zero entry terminates the search.
|
|
//------------------------------------------------------------------------
|
|
|
|
CONST USHORT AdapterInterrupts [] = {0}; // no interrupts
|
|
|
|
|
|
//------------------------------------------------------------------------
|
|
// The following table specifies the ports to be checked when searching for
|
|
// an adapter. A zero entry terminates the search.
|
|
//------------------------------------------------------------------------
|
|
|
|
CONST ULONG AdapterAddresses [] = {0X3bc, 0X378, 0X278, 0};
|
|
|
|
|
|
//-----------------------------------------------------------------------
|
|
//
|
|
// The following routines are stub routines to provide an entry
|
|
// point for the library. They reference the correct routines for
|
|
// the appropriate card. Only these routines may be called from outside
|
|
// the library. See the rouines they reference for a description of
|
|
// the rouines, if the meaning is unclear.
|
|
//
|
|
//-----------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------
|
|
// the maximum transfer size
|
|
// by decreasing this we can get better system performace since
|
|
// the data transfer occurs with interrupts disabled, this might be
|
|
// decreased for our smaller cards
|
|
// Used only by WINNT
|
|
//------------------------------------------------------------------------
|
|
|
|
ULONG CardMaxTransferSize(VOID)
|
|
{
|
|
return 2*1024L;
|
|
}
|
|
|
|
|
|
// the following info is for initialization only
|
|
// the t348 is IO mapped
|
|
|
|
BOOLEAN CardAddressRangeInIoSpace(VOID)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
// we use 3 addresses in IO space
|
|
|
|
USHORT CardAddressRangeLength(VOID)
|
|
{
|
|
return 3;
|
|
}
|
|
|
|
|
|
// The following is used along with the constant structure in card.c
|
|
// to define the precise i/o addresses a card will use
|
|
|
|
USHORT CardNumberOfAddressRanges(VOID)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
// the t348 does not use interrupts
|
|
|
|
BOOLEAN CardSupportsInterrupts(VOID)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
// for now, must choose an interupt that doesn't conflict
|
|
// microsoft: jeff said later they will have a method
|
|
|
|
UCHAR CardDefaultInterruptLevel(VOID)
|
|
{
|
|
return 15;
|
|
}
|
|
|
|
USHORT CardDoCommand(PTSRB t)
|
|
{
|
|
return P3CDoCommand(t);
|
|
}
|
|
USHORT CardFinishCommandInterrupt(PTSRB t)
|
|
{
|
|
return P3CFinishCommandInterrupt(t);
|
|
}
|
|
USHORT CardStartCommandInterrupt(PTSRB t)
|
|
{
|
|
return P3CStartCommandInterrupt(t);
|
|
}
|
|
|
|
//
|
|
// BOOLEAN CardCheckAdapter
|
|
//
|
|
// Initializes a workspace for the adapter at this address.
|
|
// Returns TRUE if adapter found.
|
|
//
|
|
BOOLEAN CardCheckAdapter (PWORKSPACE w, PINIT init)
|
|
{
|
|
PADAPTER_INFO g = (PADAPTER_INFO) w;
|
|
|
|
//
|
|
// Initialize workspace and takes card specific parameter information
|
|
// to set how the card will be used. For example, command line information
|
|
// to force the parallel port to bi-directional or uni-directional modes.
|
|
//
|
|
|
|
// if no init structure, use all defaults
|
|
if (init) {
|
|
g->ParallelPortType = init->ParallelPortType;
|
|
} else {
|
|
g->ParallelPortType = PT_UNKNOWN;
|
|
}
|
|
|
|
g->BaseIoAddress = init->BaseIoAddress;
|
|
|
|
return P3CCheckAdapter(g);
|
|
}
|
|
|
|
//
|
|
// CardParseCommandString(PINIT p, PCHAR str)
|
|
//
|
|
// Parses the command string to get all card specific parameters.
|
|
// Will fill in defaults where no parameters are supplied, or
|
|
// if the str pointer is NULL.
|
|
//
|
|
// Returns false if it could not parse the string given.
|
|
//
|
|
// Can be used to parse the string piece by piece, by sending
|
|
// the same INIT structure each time. Send NULL as the string
|
|
// first time to initialize the PINIT structure to the standard defaults.
|
|
//
|
|
// BaseIoAddress will be set to NULL by default, and the program can
|
|
// detect that it has changed during parsing and just search for the
|
|
// card as specified by the command line argument if it has changed. If
|
|
// it does not change, the program should cycle through all valid addresses.
|
|
//
|
|
BOOLEAN CardParseCommandString(PINIT init, PCHAR str)
|
|
{
|
|
// for now, just fill in some defaults
|
|
|
|
init->ParallelPortType = PT_UNKNOWN;
|
|
init->BaseIoAddress = NULL;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOLEAN CardInterrupt(PADAPTER_INFO g)
|
|
{
|
|
return P3CInterrupt(g);
|
|
}
|
|
VOID CardDisableInterrupt(PADAPTER_INFO g)
|
|
{
|
|
N5380DisableInterrupt(g);
|
|
}
|
|
VOID CardEnableInterrupt(PADAPTER_INFO g)
|
|
{
|
|
N5380EnableInterrupt(g);
|
|
}
|
|
VOID CardResetBus(PADAPTER_INFO g)
|
|
{
|
|
P3CResetBus(g);
|
|
}
|
|
VOID CardSetInterruptLevel(PADAPTER_INFO g,UCHAR level)
|
|
{
|
|
return;
|
|
}
|
|
PUCHAR CardGetName(VOID)
|
|
{
|
|
return "T348 SCSI Host Adapter";
|
|
}
|
|
PUCHAR CardGetShortName(VOID)
|
|
{
|
|
return "T348.1.0";
|
|
}
|
|
UCHAR CardGetType(VOID)
|
|
{
|
|
return CARDTYPE_T348;
|
|
}
|
|
|