Annotation of XNU/iokit/Drivers/scsi/drvSymbios8xx/Sym8xxInterface.h, revision 1.1

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)) )

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.