NT4/private/ntos/miniport/always/envlib.h
2020-09-30 17:12:29 +02:00

185 lines
6.7 KiB
C

/* 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__ */