/* Copyright (C) 1991 by Always Technology Corporation. This module contains information proprietary to Always Technology Corporation, and should be treated as confidential. */ #ifndef __ENVLIB_H__ #define __ENVLIB_H__ #define FourCharVers "13.14" /* Revision: .13.14- Added "NO DISCONNECT" flag to DOS ASPIrequests. Int 13 sets this flag. .13.13- Fix rounding of sync. period in 53c7x0.c. .13.12- 53C7x0 plug handles Reject messages on sync. negotiations. .13.11- Map to physical now uses the same segment descriptor as GetXferSegment() .13.10- Support for revert & resume configurations; add power down commands to board plugs. .13.9 - Fixed '720 driver to DWORD align the script only once in a multi- adapter configuration. .13.8 - 53c7x0: Added support for phase verification. .13.7 - Support for discontiguous SCSI IDs for INT 13. .13.6 - Fixed '7000 load of burst length register, switch polarity for cache line burst .13.5 - Attach sync. negotiations to non-data commands. - Added timer support to msdrvenv.c - Currently disabled .13.4 - Change from leaving ints disabeld in IN2000_ISR() to using InDOSFlag in General_ISR() in MSDRVENV.C - Increase timeout count in WaitForRead in 33c93.c .13.3 - Fix report of last cyl. number in Int 13 GetParam .13.2 - Fix AL-7000 IRQ decode. .13.1 - VDS support .13 - Additional fixes to '720 disconnects. First real release for AL7000. .12.16- Fixed 53c7x0 to not get illegal instr. when reselect comes in when a select is started. .12.15- Changed I/O decodes for AL-7000 .12.14- Support for Chicago; S/G fix to IN2000.c .12.11- Added S/G support to ASPIMGR and to AL7000 pieces. .12.10- Added Int 15 support to Int 13 handler .12.9 - Fixed connect/disconnect in 53c7x0.c .12.8 - Added variables "GlobalAllowDisc" & "GlobalAllowSync" to ASPIMGR.C. - Changed DOS ASPIDRVR.ASM to scan command line and set these variables. .12.7 - Added int-13 support for AL-7000, and others using BIOS control interface .12.6 - Added support for AL-7000 .12.5 - Changed INT 13 code to be compatable with VCN: 1-04 BIOS .12.4 - Fixed "GetDASD" to preserve ES. .12.3 - Corrected target initiated sync. xfer. request by adding a parameter to AskSync() - Corrected the conditionals for xfer period and offset in target initiated sync. xfer. request. - Modified Int 13 code to support VCN: 1-04 bios .12.2 - Fixed bug in IN2000_ISR(), where it would spin flushing the FIFO upon completion of a write, while waiting for the 33C93 interrupt. - EVAL720 code. .12.1 - Added size definitive typeing (i.e. U32) .12 - Release of 11.9 .11.9 - Fixed problem with release of device descriptors on device timeout. Fixed long delay on selection timeout .11.8 - Fixed synchronous calculation in 33c93 initalize Enabled Synchronous as default .11.7 - Made DOS driver work with 11.6 changes .11.6 - Started work on NT driver .11.5 - More generalizing stuff .11.4 - Robert Lou added AL6K plug .11.3 - Changed Adapter structure to add Physical & Supports structures .11.2 - Modified to common error code, returned through APISetStatus .11 - Release of 10.3 .10.3 - Added delay in IN2000.c after reset to allow 33C93 to settle. - Reduced the min. number of device descr., since LUNs no longer require unique device descr. .10.2 - Fixed adapter id message from ASPI adapter info command .10.1 - Internal; Shortens reset time from 250 ms to a pulse .10 - First non-beta release; fixed problems w/ smart drive */ // Scatter / gather segment descriptor: typedef struct { // Offset of last use of this descr.; -1 if invalid U32 LastOffset; // Work areas for S/G handler; preserved from last call only if LastOffset != -1 U32 APIScratch[2]; U32 MappingScratch[2]; // Area reserved for MapToPhysical and UnlockRegion // Length in bytes of (remaining) segment described by SegmentPtr U32 SegmentLength; // Pointer to data buffer, to start/resume data xfer U32 SegmentPtr; struct { BOOLEAN Valid; // Is SegmentPtr a valid address? BOOLEAN IsPhysical; // Is SegmentPtr (above) physical? BOOLEAN SegmentNeedsUnlocking; // Do we need to Unlock when done? } Flags; } SegmentDescr; #if !defined(critical) extern void critical(struct Adapter ALLOC_D *HA); // Conditional (nested) start critical context extern void uncritical(struct Adapter ALLOC_D *HA); // Conditional (nested) end critical context extern int MaybeCritical(void); // Set critical if machine in critical state extern void MaybeUncritical(int Was); // Balance the MaybeUncritical, using its return value #endif extern void Notify(struct Adapter ALLOC_D *HA, IO_REQ_PTR Req); // Signal a request completion #if !defined(min) #define min(X, Y) ((X <= Y) ? X : Y) #endif #if !defined(max) #define max(X, Y) ((X >= Y) ? X : Y) #endif #if !defined(NW386) #if !defined(LogMessage) extern void LogMessage(ADAPTER_PTR HA, IO_REQ_PTR Req, int TID, int LUN, int ErrCode, int Misc); #endif #endif extern ALLOC_T allocm(unsigned count); extern void freem(ALLOC_T block, unsigned count); extern void copym(ALLOC_T dest, ALLOC_T src, unsigned count); extern void DMASetup(unsigned Channel, void FAR *MemHndl, U32 Index, U32 Count, int UseSGList, unsigned Direction); extern void DMAComplete(unsigned Channel, void FAR *MemHndl, U32 Index, U32 Count, int UseSGList, unsigned Direction); extern U32 MapToPhysical(void ALLOC_D *HA, SegmentDescr *Descr); extern void UnlockRegion(void ALLOC_D *HA, SegmentDescr *Descr); extern void FAR *MapToVirtual(void ALLOC_D *HA, U32 PAddr); #if !defined(ExportReq) extern IO_REQ_PTR ExportReq(IO_REQ_PTR Req); #endif #if !defined(ImportReq) extern IO_REQ_PTR ImportReq(IO_REQ_PTR Req); #endif #if !defined(msPause) extern void msPause(unsigned msTicks); #endif #if !defined(PanicMsg) extern void PanicMsg(char *Msg); #endif #if !defined(RegisterIO) extern IOHandle RegisterIO(struct Adapter ALLOC_D *HA, U16 Base, U16 Length, int AddrSpace); #endif #if !defined(repinsb) extern void repinsb(const unsigned port, unsigned char far *bufferp, unsigned count); #endif #if !defined(repoutsb) extern void repoutsb(const unsigned port, unsigned char far *bufferp, unsigned count); #endif #if !defined(repinsw) extern void repinsw(const unsigned port, unsigned short far *bufferp, unsigned wcount); #endif #if !defined(repoutsw) extern void repoutsw(const unsigned port, unsigned short far *bufferp, unsigned wcount); #endif extern void setm(ALLOC_T block, int val, unsigned count); extern ALLOC_T shrinkm(ALLOC_T oldblock, unsigned oldsize, unsigned newsize); #endif /* __ENVLIB_H__ */