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