|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: ! 23: /* Sym8xxInterface.h created by russb2 on Sat 30-May-1998 */ ! 24: ! 25: /* ! 26: * This file contains shared data structures between the script and the driver ! 27: * ! 28: */ ! 29: ! 30: #define MAX_SCSI_TARGETS 16 ! 31: #define MAX_SCSI_LUNS 8 ! 32: #define MAX_SCSI_TAG 256 ! 33: #define MIN_SCSI_TAG 128 ! 34: ! 35: #define kHostAdapterSCSIId 7 ! 36: ! 37: #define MAX_SCHED_MAILBOXES 256 ! 38: #define kMailBoxEmpty 0 ! 39: #define kMailBoxCancel 1 ! 40: ! 41: #define kSCSITimerIntervalMS 250 ! 42: #define kReqSenseTimeoutMS 3000 ! 43: #define kAbortTimeoutMS 3000 ! 44: #define kResetQuiesceDelayMS 3000 ! 45: #define kAbortScriptTimeoutMS 50 ! 46: ! 47: /* ! 48: * NEXUS DATA Structure ! 49: * ! 50: * The Nexus structure contains per-request information for the script/driver ! 51: * to execute a SCSI request. ! 52: */ ! 53: ! 54: typedef struct SGEntry ! 55: { ! 56: UInt32 length; ! 57: UInt32 physAddr; ! 58: } SGEntry; ! 59: ! 60: /* ! 61: * Note: There are (3) SG List entries reserved for use by the driver, ! 62: * i.e SG Entries 0-1 and the last entry in the list. ! 63: */ ! 64: #define MAX_SGLIST_ENTRIES (64+3) ! 65: ! 66: /* ! 67: * This part of the Nexus structure contains the script engine clock registers to ! 68: * be used for this request. This information is also contained in the per-target ! 69: * table (AdapterInterface->targetClocks). ! 70: */ ! 71: typedef struct NexusParms ! 72: { ! 73: UInt8 reserved_1; ! 74: UInt8 sxferReg; ! 75: UInt8 target; ! 76: UInt8 scntl3Reg; ! 77: } NexusParms; ! 78: ! 79: /* ! 80: * Pointers in the Nexus to our CDB/MsgOut data are in this format. ! 81: */ ! 82: typedef struct NexusData ! 83: { ! 84: UInt32 length; ! 85: UInt32 ppData; ! 86: } NexusData; ! 87: ! 88: typedef struct Nexus Nexus; ! 89: struct Nexus ! 90: { ! 91: NexusParms targetParms; ! 92: ! 93: SGEntry *ppSGList; ! 94: ! 95: NexusData msg; ! 96: NexusData cdb; ! 97: ! 98: UInt32 currentDataPtr; ! 99: UInt32 savedDataPtr; ! 100: ! 101: UInt8 tag; ! 102: UInt8 dataXferCalled; ! 103: UInt8 wideResidCount; ! 104: UInt8 reserved_1[1]; ! 105: ! 106: /* ! 107: * Data buffers for nexus ! 108: */ ! 109: UInt8 cdbData[16]; ! 110: UInt8 msgData[16]; ! 111: UInt32 sgNextIndex; ! 112: SGEntry sgListData[MAX_SGLIST_ENTRIES]; ! 113: ! 114: }; ! 115: ! 116: /* ! 117: * Abort Bdr Mailbox ! 118: * ! 119: * The mailbox is used to send an Abort or Bus Device Reset to a device ! 120: * This mailbox is 4 bytes long, and all the necessary information are ! 121: * contained in this mailbox (No nexus Data associated) ! 122: */ ! 123: typedef struct IOAbortBdrMailBox ! 124: { ! 125: UInt8 identify; /* Identify msg (0xC0) if Abort A0 */ ! 126: UInt8 tag; /* Tag Message or Zero A1 */ ! 127: UInt8 scsi_id; /* SCSI id of the target of the request A2 */ ! 128: UInt8 message; /* Abort(0x06) or Bdr(0x0C) or AbortTag (0x0D) A3 */ ! 129: } IOAbortBdrMailBox; ! 130: ! 131: /* ! 132: * IODone mailbox ! 133: * ! 134: * This mailbox is used to signal the completion of an I/O to the driver. ! 135: */ ! 136: ! 137: typedef struct IODoneMailBox ! 138: { ! 139: UInt8 nexus; /* Nexus of the completed I/O */ ! 140: UInt8 status; /* Status of the completed I/O */ ! 141: UInt8 zero; ! 142: UInt8 semaphore; /* If set, these contents are valid */ ! 143: } IODoneMailBox; ! 144: ! 145: /* ! 146: * Adapter Interface ! 147: * ! 148: * This structure contains the shared data between the script and ! 149: * the driver. The script's local variable table is updated to point to the ! 150: * physical addresses of the data in this control block. ! 151: */ ! 152: ! 153: typedef struct TargetClocks ! 154: { ! 155: UInt8 reserved_1; ! 156: UInt8 sxferReg; ! 157: UInt8 reserved_2; ! 158: UInt8 scntl3Reg; ! 159: } TargetClocks; ! 160: ! 161: typedef struct AdapterInterface ! 162: { ! 163: Nexus **nexusPtrsVirt; ! 164: Nexus **nexusPtrsPhys; ! 165: ! 166: Nexus *nexusArrayPhys[MAX_SCSI_TAG]; /* Active SRBs or -1 */ ! 167: Nexus *schedMailBox[MAX_SCHED_MAILBOXES]; /* New SRBs */ ! 168: TargetClocks targetClocks[MAX_SCSI_TARGETS]; ! 169: ! 170: UInt32 xferSWideInst[4]; ! 171: ! 172: } AdapterInterface; ! 173: ! 174: #define SCRIPT_VAR(x) ( *(UInt32 *)(chipRamAddr+(x)) )
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.