Source to iokit/Drivers/scsi/drvSymbios8xx/Sym8xxInterface.h
/*
* Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* The contents of this file constitute Original Code as defined in and
* are subject to the Apple Public Source License Version 1.1 (the
* "License"). You may not use this file except in compliance with the
* License. Please obtain a copy of the License at
* http://www.apple.com/publicsource and read it before using this file.
*
* This Original Code and all software distributed under the License are
* distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
* License for the specific language governing rights and limitations
* under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
/* Sym8xxInterface.h created by russb2 on Sat 30-May-1998 */
/*
* This file contains shared data structures between the script and the driver
*
*/
#define MAX_SCSI_TARGETS 16
#define MAX_SCSI_LUNS 8
#define MAX_SCSI_TAG 256
#define MIN_SCSI_TAG 128
#define kHostAdapterSCSIId 7
#define MAX_SCHED_MAILBOXES 256
#define kMailBoxEmpty 0
#define kMailBoxCancel 1
#define kSCSITimerIntervalMS 250
#define kReqSenseTimeoutMS 3000
#define kAbortTimeoutMS 3000
#define kResetQuiesceDelayMS 3000
#define kAbortScriptTimeoutMS 50
/*
* NEXUS DATA Structure
*
* The Nexus structure contains per-request information for the script/driver
* to execute a SCSI request.
*/
typedef struct SGEntry
{
UInt32 length;
UInt32 physAddr;
} SGEntry;
/*
* Note: There are (3) SG List entries reserved for use by the driver,
* i.e SG Entries 0-1 and the last entry in the list.
*/
#define MAX_SGLIST_ENTRIES (64+3)
/*
* This part of the Nexus structure contains the script engine clock registers to
* be used for this request. This information is also contained in the per-target
* table (AdapterInterface->targetClocks).
*/
typedef struct NexusParms
{
UInt8 reserved_1;
UInt8 sxferReg;
UInt8 target;
UInt8 scntl3Reg;
} NexusParms;
/*
* Pointers in the Nexus to our CDB/MsgOut data are in this format.
*/
typedef struct NexusData
{
UInt32 length;
UInt32 ppData;
} NexusData;
typedef struct Nexus Nexus;
struct Nexus
{
NexusParms targetParms;
SGEntry *ppSGList;
NexusData msg;
NexusData cdb;
UInt32 currentDataPtr;
UInt32 savedDataPtr;
UInt8 tag;
UInt8 dataXferCalled;
UInt8 wideResidCount;
UInt8 reserved_1[1];
/*
* Data buffers for nexus
*/
UInt8 cdbData[16];
UInt8 msgData[16];
UInt32 sgNextIndex;
SGEntry sgListData[MAX_SGLIST_ENTRIES];
};
/*
* Abort Bdr Mailbox
*
* The mailbox is used to send an Abort or Bus Device Reset to a device
* This mailbox is 4 bytes long, and all the necessary information are
* contained in this mailbox (No nexus Data associated)
*/
typedef struct IOAbortBdrMailBox
{
UInt8 identify; /* Identify msg (0xC0) if Abort A0 */
UInt8 tag; /* Tag Message or Zero A1 */
UInt8 scsi_id; /* SCSI id of the target of the request A2 */
UInt8 message; /* Abort(0x06) or Bdr(0x0C) or AbortTag (0x0D) A3 */
} IOAbortBdrMailBox;
/*
* IODone mailbox
*
* This mailbox is used to signal the completion of an I/O to the driver.
*/
typedef struct IODoneMailBox
{
UInt8 nexus; /* Nexus of the completed I/O */
UInt8 status; /* Status of the completed I/O */
UInt8 zero;
UInt8 semaphore; /* If set, these contents are valid */
} IODoneMailBox;
/*
* Adapter Interface
*
* This structure contains the shared data between the script and
* the driver. The script's local variable table is updated to point to the
* physical addresses of the data in this control block.
*/
typedef struct TargetClocks
{
UInt8 reserved_1;
UInt8 sxferReg;
UInt8 reserved_2;
UInt8 scntl3Reg;
} TargetClocks;
typedef struct AdapterInterface
{
Nexus **nexusPtrsVirt;
Nexus **nexusPtrsPhys;
Nexus *nexusArrayPhys[MAX_SCSI_TAG]; /* Active SRBs or -1 */
Nexus *schedMailBox[MAX_SCHED_MAILBOXES]; /* New SRBs */
TargetClocks targetClocks[MAX_SCSI_TARGETS];
UInt32 xferSWideInst[4];
} AdapterInterface;
#define SCRIPT_VAR(x) ( *(UInt32 *)(chipRamAddr+(x)) )