|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: /* Sym8xxInterface.h created by russb2 on Sat 30-May-1998 */ ! 26: ! 27: /* ! 28: * This file contains shared data structures between the script and the driver ! 29: * ! 30: */ ! 31: ! 32: #define MAX_SCSI_TARGETS 16 ! 33: #define MAX_SCSI_LUNS 8 ! 34: #define MAX_SCSI_TAG 256 ! 35: #define MIN_SCSI_TAG 128 ! 36: ! 37: #define kHostAdapterSCSIId 7 ! 38: ! 39: #define MAX_SCHED_MAILBOXES 256 ! 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: u_int32_t length; ! 57: u_int32_t 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: u_int8_t reserved_1; ! 74: u_int8_t sxferReg; ! 75: u_int8_t target; ! 76: u_int8_t 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: u_int32_t length; ! 85: u_int32_t 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: u_int32_t currentDataPtr; ! 99: u_int32_t savedDataPtr; ! 100: ! 101: u_int8_t tag; ! 102: u_int8_t dataXferCalled; ! 103: u_int8_t wideResidCount; ! 104: u_int8_t reserved_1[1]; ! 105: ! 106: /* ! 107: * Data buffers for nexus ! 108: */ ! 109: cdb_t cdbData; ! 110: u_int8_t msgData[16]; ! 111: u_int32_t 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: u_int8_t identify; /* Identify msg (0xC0) if Abort A0 */ ! 126: u_int8_t tag; /* Tag Message or Zero A1 */ ! 127: u_int8_t scsi_id; /* SCSI id of the target of the request A2 */ ! 128: u_int8_t 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: u_int8_t nexus; /* Nexus of the completed I/O */ ! 140: u_int8_t status; /* Status of the completed I/O */ ! 141: u_int8_t zero; ! 142: u_int8_t 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: u_int8_t reserved_1; ! 156: u_int8_t sxferReg; ! 157: u_int8_t reserved_2; ! 158: u_int8_t 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: u_int32_t xferSWideInst[4]; ! 171: ! 172: } AdapterInterface; ! 173: ! 174: #define SCRIPT_VAR(x) ( *(u_int32_t *)(chipRamAddr+(x)) )
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.