PM: Acquire device locks on suspend
[pv_ops_mirror.git] / drivers / scsi / 53c700_d.h_shipped
blob0b42a51257f27d3b4a73a2c348e68dc924fbf712
1 /* DO NOT EDIT - Generated automatically by script_asm.pl */
2 static u32 SCRIPT[] = {
3 /*
4 ; Script for the NCR (or symbios) 53c700 and 53c700-66 chip
6 ; Copyright (C) 2001 James.Bottomley@HansenPartnership.com
7 ;;-----------------------------------------------------------------------------
8 ;;  
9 ;;  This program is free software; you can redistribute it and/or modify
10 ;;  it under the terms of the GNU General Public License as published by
11 ;;  the Free Software Foundation; either version 2 of the License, or
12 ;;  (at your option) any later version.
14 ;;  This program is distributed in the hope that it will be useful,
15 ;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 ;;  GNU General Public License for more details.
19 ;;  You should have received a copy of the GNU General Public License
20 ;;  along with this program; if not, write to the Free Software
21 ;;  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 ;;-----------------------------------------------------------------------------
25 ; This script is designed to be modified for the particular command in
26 ; operation.  The particular variables pertaining to the commands are:
28 ABSOLUTE        Device_ID = 0           ; ID of target for command
29 ABSOLUTE        MessageCount = 0        ; Number of bytes in message
30 ABSOLUTE        MessageLocation = 0     ; Addr of message
31 ABSOLUTE        CommandCount = 0        ; Number of bytes in command
32 ABSOLUTE        CommandAddress = 0      ; Addr of Command
33 ABSOLUTE        StatusAddress = 0       ; Addr to receive status return
34 ABSOLUTE        ReceiveMsgAddress = 0   ; Addr to receive msg
36 ; This is the magic component for handling scatter-gather.  Each of the
37 ; SG components is preceeded by a script fragment which moves the
38 ; necessary amount of data and jumps to the next SG segment.  The final
39 ; SG segment jumps back to .  However, this address is the first SG script
40 ; segment.
42 ABSOLUTE        SGScriptStartAddress = 0
44 ; The following represent status interrupts we use 3 hex digits for
45 ; this: 0xPRS where 
47 ; P:
48 ABSOLUTE        AFTER_SELECTION         = 0x100
49 ABSOLUTE        BEFORE_CMD              = 0x200
50 ABSOLUTE        AFTER_CMD               = 0x300
51 ABSOLUTE        AFTER_STATUS            = 0x400
52 ABSOLUTE        AFTER_DATA_IN           = 0x500
53 ABSOLUTE        AFTER_DATA_OUT          = 0x600
54 ABSOLUTE        DURING_DATA_IN          = 0x700
56 ; R:
57 ABSOLUTE        NOT_MSG_OUT             = 0x10
58 ABSOLUTE        UNEXPECTED_PHASE        = 0x20
59 ABSOLUTE        NOT_MSG_IN              = 0x30
60 ABSOLUTE        UNEXPECTED_MSG          = 0x40
61 ABSOLUTE        MSG_IN                  = 0x50
62 ABSOLUTE        SDTR_MSG_R              = 0x60
63 ABSOLUTE        REJECT_MSG_R            = 0x70
64 ABSOLUTE        DISCONNECT              = 0x80
65 ABSOLUTE        MSG_OUT                 = 0x90
66 ABSOLUTE        WDTR_MSG_R              = 0xA0
68 ; S:
69 ABSOLUTE        GOOD_STATUS             = 0x1
71 ; Combinations, since the script assembler can't process |
72 ABSOLUTE        NOT_MSG_OUT_AFTER_SELECTION = 0x110
73 ABSOLUTE        UNEXPECTED_PHASE_BEFORE_CMD = 0x220
74 ABSOLUTE        UNEXPECTED_PHASE_AFTER_CMD = 0x320
75 ABSOLUTE        NOT_MSG_IN_AFTER_STATUS = 0x430
76 ABSOLUTE        GOOD_STATUS_AFTER_STATUS = 0x401
77 ABSOLUTE        UNEXPECTED_PHASE_AFTER_DATA_IN = 0x520
78 ABSOLUTE        UNEXPECTED_PHASE_AFTER_DATA_OUT = 0x620
79 ABSOLUTE        UNEXPECTED_MSG_BEFORE_CMD = 0x240
80 ABSOLUTE        MSG_IN_BEFORE_CMD = 0x250
81 ABSOLUTE        MSG_IN_AFTER_CMD = 0x350
82 ABSOLUTE        SDTR_MSG_BEFORE_CMD = 0x260
83 ABSOLUTE        REJECT_MSG_BEFORE_CMD = 0x270
84 ABSOLUTE        DISCONNECT_AFTER_CMD = 0x380
85 ABSOLUTE        SDTR_MSG_AFTER_CMD = 0x360
86 ABSOLUTE        WDTR_MSG_AFTER_CMD = 0x3A0
87 ABSOLUTE        MSG_IN_AFTER_STATUS = 0x440
88 ABSOLUTE        DISCONNECT_AFTER_DATA = 0x580
89 ABSOLUTE        MSG_IN_AFTER_DATA_IN = 0x550
90 ABSOLUTE        MSG_IN_AFTER_DATA_OUT = 0x650
91 ABSOLUTE        MSG_OUT_AFTER_DATA_IN = 0x590
92 ABSOLUTE        DATA_IN_AFTER_DATA_IN = 0x5a0
93 ABSOLUTE        MSG_IN_DURING_DATA_IN = 0x750
94 ABSOLUTE        DISCONNECT_DURING_DATA = 0x780
97 ; Other interrupt conditions
98
99 ABSOLUTE        RESELECTED_DURING_SELECTION = 0x1000
100 ABSOLUTE        COMPLETED_SELECTION_AS_TARGET = 0x1001
101 ABSOLUTE        RESELECTION_IDENTIFIED = 0x1003
103 ; Fatal interrupt conditions.  If you add to this, also add to the
104 ; array of corresponding messages
106 ABSOLUTE        FATAL = 0x2000
107 ABSOLUTE        FATAL_UNEXPECTED_RESELECTION_MSG = 0x2000
108 ABSOLUTE        FATAL_SEND_MSG = 0x2001
109 ABSOLUTE        FATAL_NOT_MSG_IN_AFTER_SELECTION = 0x2002
110 ABSOLUTE        FATAL_ILLEGAL_MSG_LENGTH = 0x2003
112 ABSOLUTE        DEBUG_INTERRUPT = 0x3000
113 ABSOLUTE        DEBUG_INTERRUPT1 = 0x3001
114 ABSOLUTE        DEBUG_INTERRUPT2 = 0x3002
115 ABSOLUTE        DEBUG_INTERRUPT3 = 0x3003
116 ABSOLUTE        DEBUG_INTERRUPT4 = 0x3004
117 ABSOLUTE        DEBUG_INTERRUPT5 = 0x3005
118 ABSOLUTE        DEBUG_INTERRUPT6 = 0x3006
122 ; SCSI Messages we interpret in the script
124 ABSOLUTE        COMMAND_COMPLETE_MSG    = 0x00
125 ABSOLUTE        EXTENDED_MSG            = 0x01
126 ABSOLUTE        SDTR_MSG                = 0x01
127 ABSOLUTE        SAVE_DATA_PTRS_MSG      = 0x02
128 ABSOLUTE        RESTORE_DATA_PTRS_MSG   = 0x03
129 ABSOLUTE        WDTR_MSG                = 0x03
130 ABSOLUTE        DISCONNECT_MSG          = 0x04
131 ABSOLUTE        REJECT_MSG              = 0x07
132 ABSOLUTE        PARITY_ERROR_MSG        = 0x09
133 ABSOLUTE        SIMPLE_TAG_MSG          = 0x20
134 ABSOLUTE        IDENTIFY_MSG            = 0x80
135 ABSOLUTE        IDENTIFY_MSG_MASK       = 0x7F
136 ABSOLUTE        TWO_BYTE_MSG            = 0x20
137 ABSOLUTE        TWO_BYTE_MSG_MASK       = 0x0F
139 ; This is where the script begins
141 ENTRY   StartUp
143 StartUp:
144         SELECT  ATN Device_ID, Reselect
146 at 0x00000000 : */      0x41000000,0x00000020,
148         JUMP    Finish, WHEN STATUS
150 at 0x00000002 : */      0x830b0000,0x00000460,
152         JUMP    SendIdentifyMsg, IF MSG_OUT
154 at 0x00000004 : */      0x860a0000,0x000001b0,
156         INT     NOT_MSG_OUT_AFTER_SELECTION
158 at 0x00000006 : */      0x98080000,0x00000110,
161 Reselect:
162         WAIT    RESELECT SelectedAsTarget
164 at 0x00000008 : */      0x50000000,0x00000058,
166         INT     RESELECTED_DURING_SELECTION, WHEN MSG_IN
168 at 0x0000000a : */      0x9f0b0000,0x00001000,
170         INT     FATAL_NOT_MSG_IN_AFTER_SELECTION
172 at 0x0000000c : */      0x98080000,0x00002002,
175         ENTRY   GetReselectionData
176 GetReselectionData:
177         MOVE    1, ReceiveMsgAddress, WHEN MSG_IN
179 at 0x0000000e : */      0x0f000001,0x00000000,
181         INT     RESELECTION_IDENTIFIED
183 at 0x00000010 : */      0x98080000,0x00001003,
186         ENTRY   GetReselectionWithTag
187 GetReselectionWithTag:
188         MOVE    3, ReceiveMsgAddress, WHEN MSG_IN
190 at 0x00000012 : */      0x0f000003,0x00000000,
192         INT     RESELECTION_IDENTIFIED
194 at 0x00000014 : */      0x98080000,0x00001003,
196         
197         ENTRY   SelectedAsTarget
198 SelectedAsTarget:
199 ; Basically tell the selecting device that there's nothing here
200         SET     TARGET
202 at 0x00000016 : */      0x58000200,0x00000000,
204         DISCONNECT
206 at 0x00000018 : */      0x48000000,0x00000000,
208         CLEAR   TARGET
210 at 0x0000001a : */      0x60000200,0x00000000,
212         INT     COMPLETED_SELECTION_AS_TARGET
214 at 0x0000001c : */      0x98080000,0x00001001,
217 ; These are the messaging entries
219 ; Send a message.  Message count should be correctly patched
220         ENTRY   SendMessage
221 SendMessage:
222         MOVE    MessageCount, MessageLocation, WHEN MSG_OUT
224 at 0x0000001e : */      0x0e000000,0x00000000,
226 ResumeSendMessage:
227         RETURN, WHEN NOT MSG_OUT
229 at 0x00000020 : */      0x96030000,0x00000000,
231         INT     FATAL_SEND_MSG
233 at 0x00000022 : */      0x98080000,0x00002001,
236         ENTRY   SendMessagePhaseMismatch
237 SendMessagePhaseMismatch:
238         CLEAR   ACK
240 at 0x00000024 : */      0x60000040,0x00000000,
242         JUMP    ResumeSendMessage
244 at 0x00000026 : */      0x80080000,0x00000080,
247 ; Receive a message.  Need to identify the message to
248 ; receive it correctly
249         ENTRY   ReceiveMessage
250 ReceiveMessage:
251         MOVE    1, ReceiveMsgAddress, WHEN MSG_IN
253 at 0x00000028 : */      0x0f000001,0x00000000,
256 ; Use this entry if we've just tried to look at the first byte
257 ; of the message and want to process it further
258 ProcessReceiveMessage:
259         JUMP    ReceiveExtendedMessage, IF EXTENDED_MSG
261 at 0x0000002a : */      0x800c0001,0x000000d0,
263         RETURN, IF NOT TWO_BYTE_MSG, AND MASK TWO_BYTE_MSG_MASK
265 at 0x0000002c : */      0x90040f20,0x00000000,
267         CLEAR   ACK
269 at 0x0000002e : */      0x60000040,0x00000000,
271         MOVE    1, ReceiveMsgAddress + 1, WHEN MSG_IN
273 at 0x00000030 : */      0x0f000001,0x00000001,
275         RETURN
277 at 0x00000032 : */      0x90080000,0x00000000,
279 ReceiveExtendedMessage:
280         CLEAR   ACK
282 at 0x00000034 : */      0x60000040,0x00000000,
284         MOVE    1, ReceiveMsgAddress + 1, WHEN MSG_IN
286 at 0x00000036 : */      0x0f000001,0x00000001,
288         JUMP    Receive1Byte, IF 0x01
290 at 0x00000038 : */      0x800c0001,0x00000110,
292         JUMP    Receive2Byte, IF 0x02
294 at 0x0000003a : */      0x800c0002,0x00000128,
296         JUMP    Receive3Byte, IF 0x03
298 at 0x0000003c : */      0x800c0003,0x00000140,
300         JUMP    Receive4Byte, IF 0x04
302 at 0x0000003e : */      0x800c0004,0x00000158,
304         JUMP    Receive5Byte, IF 0x05
306 at 0x00000040 : */      0x800c0005,0x00000170,
308         INT     FATAL_ILLEGAL_MSG_LENGTH
310 at 0x00000042 : */      0x98080000,0x00002003,
312 Receive1Byte:
313         CLEAR   ACK
315 at 0x00000044 : */      0x60000040,0x00000000,
317         MOVE    1, ReceiveMsgAddress + 2, WHEN MSG_IN
319 at 0x00000046 : */      0x0f000001,0x00000002,
321         RETURN
323 at 0x00000048 : */      0x90080000,0x00000000,
325 Receive2Byte:
326         CLEAR   ACK
328 at 0x0000004a : */      0x60000040,0x00000000,
330         MOVE    2, ReceiveMsgAddress + 2, WHEN MSG_IN
332 at 0x0000004c : */      0x0f000002,0x00000002,
334         RETURN
336 at 0x0000004e : */      0x90080000,0x00000000,
338 Receive3Byte:
339         CLEAR   ACK
341 at 0x00000050 : */      0x60000040,0x00000000,
343         MOVE    3, ReceiveMsgAddress + 2, WHEN MSG_IN
345 at 0x00000052 : */      0x0f000003,0x00000002,
347         RETURN
349 at 0x00000054 : */      0x90080000,0x00000000,
351 Receive4Byte:
352         CLEAR   ACK
354 at 0x00000056 : */      0x60000040,0x00000000,
356         MOVE    4, ReceiveMsgAddress + 2, WHEN MSG_IN
358 at 0x00000058 : */      0x0f000004,0x00000002,
360         RETURN
362 at 0x0000005a : */      0x90080000,0x00000000,
364 Receive5Byte:
365         CLEAR   ACK
367 at 0x0000005c : */      0x60000040,0x00000000,
369         MOVE    5, ReceiveMsgAddress + 2, WHEN MSG_IN
371 at 0x0000005e : */      0x0f000005,0x00000002,
373         RETURN
375 at 0x00000060 : */      0x90080000,0x00000000,
378 ; Come here from the message processor to ignore the message
380         ENTRY   IgnoreMessage
381 IgnoreMessage:
382         CLEAR   ACK
384 at 0x00000062 : */      0x60000040,0x00000000,
386         RETURN
388 at 0x00000064 : */      0x90080000,0x00000000,
391 ; Come here to send a reply to a message
393         ENTRY   SendMessageWithATN
394 SendMessageWithATN:
395         SET     ATN
397 at 0x00000066 : */      0x58000008,0x00000000,
399         CLEAR   ACK
401 at 0x00000068 : */      0x60000040,0x00000000,
403         JUMP    SendMessage
405 at 0x0000006a : */      0x80080000,0x00000078,
408 SendIdentifyMsg:
409         CALL    SendMessage
411 at 0x0000006c : */      0x88080000,0x00000078,
413         CLEAR   ATN
415 at 0x0000006e : */      0x60000008,0x00000000,
418 IgnoreMsgBeforeCommand:
419         CLEAR   ACK
421 at 0x00000070 : */      0x60000040,0x00000000,
423         ENTRY   SendCommand
424 SendCommand:
425         JUMP    Finish, WHEN STATUS
427 at 0x00000072 : */      0x830b0000,0x00000460,
429         JUMP    MsgInBeforeCommand, IF MSG_IN
431 at 0x00000074 : */      0x870a0000,0x000002c0,
433         INT     UNEXPECTED_PHASE_BEFORE_CMD, IF NOT CMD
435 at 0x00000076 : */      0x9a020000,0x00000220,
437         MOVE    CommandCount, CommandAddress, WHEN CMD
439 at 0x00000078 : */      0x0a000000,0x00000000,
441 ResumeSendCommand:
442         JUMP    Finish, WHEN STATUS
444 at 0x0000007a : */      0x830b0000,0x00000460,
446         JUMP    MsgInAfterCmd, IF MSG_IN
448 at 0x0000007c : */      0x870a0000,0x00000248,
450         JUMP    DataIn, IF DATA_IN
452 at 0x0000007e : */      0x810a0000,0x000002f8,
454         JUMP    DataOut, IF DATA_OUT
456 at 0x00000080 : */      0x800a0000,0x00000338,
458         INT     UNEXPECTED_PHASE_AFTER_CMD
460 at 0x00000082 : */      0x98080000,0x00000320,
463 IgnoreMsgDuringData:
464         CLEAR   ACK
466 at 0x00000084 : */      0x60000040,0x00000000,
468         ; fall through to MsgInDuringData
470 Entry MsgInDuringData
471 MsgInDuringData:
473 ; Could be we have nothing more to transfer
475         JUMP    Finish, WHEN STATUS
477 at 0x00000086 : */      0x830b0000,0x00000460,
479         MOVE    1, ReceiveMsgAddress, WHEN MSG_IN
481 at 0x00000088 : */      0x0f000001,0x00000000,
483         JUMP    DisconnectDuringDataIn, IF DISCONNECT_MSG
485 at 0x0000008a : */      0x800c0004,0x00000398,
487         JUMP    IgnoreMsgDuringData, IF SAVE_DATA_PTRS_MSG
489 at 0x0000008c : */      0x800c0002,0x00000210,
491         JUMP    IgnoreMsgDuringData, IF RESTORE_DATA_PTRS_MSG
493 at 0x0000008e : */      0x800c0003,0x00000210,
495         INT     MSG_IN_DURING_DATA_IN
497 at 0x00000090 : */      0x98080000,0x00000750,
500 MsgInAfterCmd:
501         MOVE    1, ReceiveMsgAddress, WHEN MSG_IN
503 at 0x00000092 : */      0x0f000001,0x00000000,
505         JUMP    DisconnectAfterCmd, IF DISCONNECT_MSG
507 at 0x00000094 : */      0x800c0004,0x00000298,
509         JUMP    IgnoreMsgInAfterCmd, IF SAVE_DATA_PTRS_MSG
511 at 0x00000096 : */      0x800c0002,0x00000288,
513         JUMP    IgnoreMsgInAfterCmd, IF RESTORE_DATA_PTRS_MSG
515 at 0x00000098 : */      0x800c0003,0x00000288,
517         CALL    ProcessReceiveMessage
519 at 0x0000009a : */      0x88080000,0x000000a8,
521         INT     MSG_IN_AFTER_CMD
523 at 0x0000009c : */      0x98080000,0x00000350,
525         CLEAR   ACK
527 at 0x0000009e : */      0x60000040,0x00000000,
529         JUMP    ResumeSendCommand
531 at 0x000000a0 : */      0x80080000,0x000001e8,
534 IgnoreMsgInAfterCmd:
535         CLEAR   ACK
537 at 0x000000a2 : */      0x60000040,0x00000000,
539         JUMP    ResumeSendCommand
541 at 0x000000a4 : */      0x80080000,0x000001e8,
544 DisconnectAfterCmd:
545         CLEAR   ACK
547 at 0x000000a6 : */      0x60000040,0x00000000,
549         WAIT    DISCONNECT
551 at 0x000000a8 : */      0x48000000,0x00000000,
553         ENTRY   Disconnect1
554 Disconnect1:
555         INT     DISCONNECT_AFTER_CMD
557 at 0x000000aa : */      0x98080000,0x00000380,
559         ENTRY   Disconnect2
560 Disconnect2:
561 ; We return here after a reselection
562         CLEAR   ACK
564 at 0x000000ac : */      0x60000040,0x00000000,
566         JUMP    ResumeSendCommand
568 at 0x000000ae : */      0x80080000,0x000001e8,
571 MsgInBeforeCommand:
572         MOVE    1, ReceiveMsgAddress, WHEN MSG_IN
574 at 0x000000b0 : */      0x0f000001,0x00000000,
576         JUMP    IgnoreMsgBeforeCommand, IF SAVE_DATA_PTRS_MSG
578 at 0x000000b2 : */      0x800c0002,0x000001c0,
580         JUMP    IgnoreMsgBeforeCommand, IF RESTORE_DATA_PTRS_MSG
582 at 0x000000b4 : */      0x800c0003,0x000001c0,
584         CALL    ProcessReceiveMessage
586 at 0x000000b6 : */      0x88080000,0x000000a8,
588         INT     MSG_IN_BEFORE_CMD
590 at 0x000000b8 : */      0x98080000,0x00000250,
592         CLEAR   ACK
594 at 0x000000ba : */      0x60000040,0x00000000,
596         JUMP    SendCommand
598 at 0x000000bc : */      0x80080000,0x000001c8,
601 DataIn:
602         CALL    SGScriptStartAddress
604 at 0x000000be : */      0x88080000,0x00000000,
606 ResumeDataIn:
607         JUMP    Finish, WHEN STATUS
609 at 0x000000c0 : */      0x830b0000,0x00000460,
611         JUMP    MsgInAfterDataIn, IF MSG_IN
613 at 0x000000c2 : */      0x870a0000,0x00000358,
615         JUMP    DataInAfterDataIn, if DATA_IN
617 at 0x000000c4 : */      0x810a0000,0x00000328,
619         INT     MSG_OUT_AFTER_DATA_IN, if MSG_OUT
621 at 0x000000c6 : */      0x9e0a0000,0x00000590,
623         INT     UNEXPECTED_PHASE_AFTER_DATA_IN
625 at 0x000000c8 : */      0x98080000,0x00000520,
628 DataInAfterDataIn:
629         INT     DATA_IN_AFTER_DATA_IN
631 at 0x000000ca : */      0x98080000,0x000005a0,
633         JUMP    ResumeDataIn
635 at 0x000000cc : */      0x80080000,0x00000300,
638 DataOut:
639         CALL    SGScriptStartAddress
641 at 0x000000ce : */      0x88080000,0x00000000,
643 ResumeDataOut:
644         JUMP    Finish, WHEN STATUS
646 at 0x000000d0 : */      0x830b0000,0x00000460,
648         JUMP    MsgInAfterDataOut, IF MSG_IN
650 at 0x000000d2 : */      0x870a0000,0x000003e8,
652         INT     UNEXPECTED_PHASE_AFTER_DATA_OUT
654 at 0x000000d4 : */      0x98080000,0x00000620,
657 MsgInAfterDataIn:
658         MOVE    1, ReceiveMsgAddress, WHEN MSG_IN
660 at 0x000000d6 : */      0x0f000001,0x00000000,
662         JUMP    DisconnectAfterDataIn, IF DISCONNECT_MSG
664 at 0x000000d8 : */      0x800c0004,0x000003c0,
666         JUMP    IgnoreMsgAfterData, IF SAVE_DATA_PTRS_MSG
668 at 0x000000da : */      0x800c0002,0x00000428,
670         JUMP    IgnoreMsgAfterData, IF RESTORE_DATA_PTRS_MSG
672 at 0x000000dc : */      0x800c0003,0x00000428,
674         CALL    ProcessReceiveMessage
676 at 0x000000de : */      0x88080000,0x000000a8,
678         INT     MSG_IN_AFTER_DATA_IN
680 at 0x000000e0 : */      0x98080000,0x00000550,
682         CLEAR   ACK
684 at 0x000000e2 : */      0x60000040,0x00000000,
686         JUMP    ResumeDataIn
688 at 0x000000e4 : */      0x80080000,0x00000300,
691 DisconnectDuringDataIn:
692         CLEAR   ACK
694 at 0x000000e6 : */      0x60000040,0x00000000,
696         WAIT    DISCONNECT
698 at 0x000000e8 : */      0x48000000,0x00000000,
700         ENTRY   Disconnect3
701 Disconnect3:
702         INT     DISCONNECT_DURING_DATA
704 at 0x000000ea : */      0x98080000,0x00000780,
706         ENTRY   Disconnect4
707 Disconnect4:
708 ; we return here after a reselection
709         CLEAR   ACK
711 at 0x000000ec : */      0x60000040,0x00000000,
713         JUMP    ResumeSendCommand
715 at 0x000000ee : */      0x80080000,0x000001e8,
719 DisconnectAfterDataIn:
720         CLEAR   ACK
722 at 0x000000f0 : */      0x60000040,0x00000000,
724         WAIT    DISCONNECT
726 at 0x000000f2 : */      0x48000000,0x00000000,
728         ENTRY   Disconnect5
729 Disconnect5:
730         INT     DISCONNECT_AFTER_DATA
732 at 0x000000f4 : */      0x98080000,0x00000580,
734         ENTRY   Disconnect6
735 Disconnect6:
736 ; we return here after a reselection
737         CLEAR   ACK
739 at 0x000000f6 : */      0x60000040,0x00000000,
741         JUMP    ResumeDataIn
743 at 0x000000f8 : */      0x80080000,0x00000300,
746 MsgInAfterDataOut:
747         MOVE    1, ReceiveMsgAddress, WHEN MSG_IN
749 at 0x000000fa : */      0x0f000001,0x00000000,
751         JUMP    DisconnectAfterDataOut, if DISCONNECT_MSG
753 at 0x000000fc : */      0x800c0004,0x00000438,
755         JUMP    IgnoreMsgAfterData, IF SAVE_DATA_PTRS_MSG
757 at 0x000000fe : */      0x800c0002,0x00000428,
759         JUMP    IgnoreMsgAfterData, IF RESTORE_DATA_PTRS_MSG
761 at 0x00000100 : */      0x800c0003,0x00000428,
763         CALL    ProcessReceiveMessage
765 at 0x00000102 : */      0x88080000,0x000000a8,
767         INT     MSG_IN_AFTER_DATA_OUT
769 at 0x00000104 : */      0x98080000,0x00000650,
771         CLEAR   ACK
773 at 0x00000106 : */      0x60000040,0x00000000,
775         JUMP    ResumeDataOut
777 at 0x00000108 : */      0x80080000,0x00000340,
780 IgnoreMsgAfterData:
781         CLEAR   ACK
783 at 0x0000010a : */      0x60000040,0x00000000,
785 ; Data in and out do the same thing on resume, so pick one
786         JUMP    ResumeDataIn
788 at 0x0000010c : */      0x80080000,0x00000300,
791 DisconnectAfterDataOut:
792         CLEAR   ACK
794 at 0x0000010e : */      0x60000040,0x00000000,
796         WAIT    DISCONNECT
798 at 0x00000110 : */      0x48000000,0x00000000,
800         ENTRY   Disconnect7
801 Disconnect7:
802         INT     DISCONNECT_AFTER_DATA
804 at 0x00000112 : */      0x98080000,0x00000580,
806         ENTRY   Disconnect8
807 Disconnect8:
808 ; we return here after a reselection
809         CLEAR   ACK
811 at 0x00000114 : */      0x60000040,0x00000000,
813         JUMP    ResumeDataOut
815 at 0x00000116 : */      0x80080000,0x00000340,
818 Finish:
819         MOVE    1, StatusAddress, WHEN STATUS
821 at 0x00000118 : */      0x0b000001,0x00000000,
823         INT     NOT_MSG_IN_AFTER_STATUS, WHEN NOT MSG_IN
825 at 0x0000011a : */      0x9f030000,0x00000430,
827         MOVE    1, ReceiveMsgAddress, WHEN MSG_IN
829 at 0x0000011c : */      0x0f000001,0x00000000,
831         JUMP    FinishCommandComplete, IF COMMAND_COMPLETE_MSG
833 at 0x0000011e : */      0x800c0000,0x00000490,
835         CALL    ProcessReceiveMessage
837 at 0x00000120 : */      0x88080000,0x000000a8,
839         INT     MSG_IN_AFTER_STATUS
841 at 0x00000122 : */      0x98080000,0x00000440,
843         ENTRY   FinishCommandComplete
844 FinishCommandComplete:
845         CLEAR   ACK
847 at 0x00000124 : */      0x60000040,0x00000000,
849         WAIT    DISCONNECT
851 at 0x00000126 : */      0x48000000,0x00000000,
853         ENTRY   Finish1
854 Finish1:
855         INT     GOOD_STATUS_AFTER_STATUS
857 at 0x00000128 : */      0x98080000,0x00000401,
860 #define A_AFTER_CMD     0x00000300
861 static u32 A_AFTER_CMD_used[] __attribute((unused)) = {
864 #define A_AFTER_DATA_IN 0x00000500
865 static u32 A_AFTER_DATA_IN_used[] __attribute((unused)) = {
868 #define A_AFTER_DATA_OUT        0x00000600
869 static u32 A_AFTER_DATA_OUT_used[] __attribute((unused)) = {
872 #define A_AFTER_SELECTION       0x00000100
873 static u32 A_AFTER_SELECTION_used[] __attribute((unused)) = {
876 #define A_AFTER_STATUS  0x00000400
877 static u32 A_AFTER_STATUS_used[] __attribute((unused)) = {
880 #define A_BEFORE_CMD    0x00000200
881 static u32 A_BEFORE_CMD_used[] __attribute((unused)) = {
884 #define A_COMMAND_COMPLETE_MSG  0x00000000
885 static u32 A_COMMAND_COMPLETE_MSG_used[] __attribute((unused)) = {
886         0x0000011e,
889 #define A_COMPLETED_SELECTION_AS_TARGET 0x00001001
890 static u32 A_COMPLETED_SELECTION_AS_TARGET_used[] __attribute((unused)) = {
891         0x0000001d,
894 #define A_CommandAddress        0x00000000
895 static u32 A_CommandAddress_used[] __attribute((unused)) = {
896         0x00000079,
899 #define A_CommandCount  0x00000000
900 static u32 A_CommandCount_used[] __attribute((unused)) = {
901         0x00000078,
904 #define A_DATA_IN_AFTER_DATA_IN 0x000005a0
905 static u32 A_DATA_IN_AFTER_DATA_IN_used[] __attribute((unused)) = {
906         0x000000cb,
909 #define A_DEBUG_INTERRUPT       0x00003000
910 static u32 A_DEBUG_INTERRUPT_used[] __attribute((unused)) = {
913 #define A_DEBUG_INTERRUPT1      0x00003001
914 static u32 A_DEBUG_INTERRUPT1_used[] __attribute((unused)) = {
917 #define A_DEBUG_INTERRUPT2      0x00003002
918 static u32 A_DEBUG_INTERRUPT2_used[] __attribute((unused)) = {
921 #define A_DEBUG_INTERRUPT3      0x00003003
922 static u32 A_DEBUG_INTERRUPT3_used[] __attribute((unused)) = {
925 #define A_DEBUG_INTERRUPT4      0x00003004
926 static u32 A_DEBUG_INTERRUPT4_used[] __attribute((unused)) = {
929 #define A_DEBUG_INTERRUPT5      0x00003005
930 static u32 A_DEBUG_INTERRUPT5_used[] __attribute((unused)) = {
933 #define A_DEBUG_INTERRUPT6      0x00003006
934 static u32 A_DEBUG_INTERRUPT6_used[] __attribute((unused)) = {
937 #define A_DISCONNECT    0x00000080
938 static u32 A_DISCONNECT_used[] __attribute((unused)) = {
941 #define A_DISCONNECT_AFTER_CMD  0x00000380
942 static u32 A_DISCONNECT_AFTER_CMD_used[] __attribute((unused)) = {
943         0x000000ab,
946 #define A_DISCONNECT_AFTER_DATA 0x00000580
947 static u32 A_DISCONNECT_AFTER_DATA_used[] __attribute((unused)) = {
948         0x000000f5,
949         0x00000113,
952 #define A_DISCONNECT_DURING_DATA        0x00000780
953 static u32 A_DISCONNECT_DURING_DATA_used[] __attribute((unused)) = {
954         0x000000eb,
957 #define A_DISCONNECT_MSG        0x00000004
958 static u32 A_DISCONNECT_MSG_used[] __attribute((unused)) = {
959         0x0000008a,
960         0x00000094,
961         0x000000d8,
962         0x000000fc,
965 #define A_DURING_DATA_IN        0x00000700
966 static u32 A_DURING_DATA_IN_used[] __attribute((unused)) = {
969 #define A_Device_ID     0x00000000
970 static u32 A_Device_ID_used[] __attribute((unused)) = {
971         0x00000000,
974 #define A_EXTENDED_MSG  0x00000001
975 static u32 A_EXTENDED_MSG_used[] __attribute((unused)) = {
976         0x0000002a,
979 #define A_FATAL 0x00002000
980 static u32 A_FATAL_used[] __attribute((unused)) = {
983 #define A_FATAL_ILLEGAL_MSG_LENGTH      0x00002003
984 static u32 A_FATAL_ILLEGAL_MSG_LENGTH_used[] __attribute((unused)) = {
985         0x00000043,
988 #define A_FATAL_NOT_MSG_IN_AFTER_SELECTION      0x00002002
989 static u32 A_FATAL_NOT_MSG_IN_AFTER_SELECTION_used[] __attribute((unused)) = {
990         0x0000000d,
993 #define A_FATAL_SEND_MSG        0x00002001
994 static u32 A_FATAL_SEND_MSG_used[] __attribute((unused)) = {
995         0x00000023,
998 #define A_FATAL_UNEXPECTED_RESELECTION_MSG      0x00002000
999 static u32 A_FATAL_UNEXPECTED_RESELECTION_MSG_used[] __attribute((unused)) = {
1002 #define A_GOOD_STATUS   0x00000001
1003 static u32 A_GOOD_STATUS_used[] __attribute((unused)) = {
1006 #define A_GOOD_STATUS_AFTER_STATUS      0x00000401
1007 static u32 A_GOOD_STATUS_AFTER_STATUS_used[] __attribute((unused)) = {
1008         0x00000129,
1011 #define A_IDENTIFY_MSG  0x00000080
1012 static u32 A_IDENTIFY_MSG_used[] __attribute((unused)) = {
1015 #define A_IDENTIFY_MSG_MASK     0x0000007f
1016 static u32 A_IDENTIFY_MSG_MASK_used[] __attribute((unused)) = {
1019 #define A_MSG_IN        0x00000050
1020 static u32 A_MSG_IN_used[] __attribute((unused)) = {
1023 #define A_MSG_IN_AFTER_CMD      0x00000350
1024 static u32 A_MSG_IN_AFTER_CMD_used[] __attribute((unused)) = {
1025         0x0000009d,
1028 #define A_MSG_IN_AFTER_DATA_IN  0x00000550
1029 static u32 A_MSG_IN_AFTER_DATA_IN_used[] __attribute((unused)) = {
1030         0x000000e1,
1033 #define A_MSG_IN_AFTER_DATA_OUT 0x00000650
1034 static u32 A_MSG_IN_AFTER_DATA_OUT_used[] __attribute((unused)) = {
1035         0x00000105,
1038 #define A_MSG_IN_AFTER_STATUS   0x00000440
1039 static u32 A_MSG_IN_AFTER_STATUS_used[] __attribute((unused)) = {
1040         0x00000123,
1043 #define A_MSG_IN_BEFORE_CMD     0x00000250
1044 static u32 A_MSG_IN_BEFORE_CMD_used[] __attribute((unused)) = {
1045         0x000000b9,
1048 #define A_MSG_IN_DURING_DATA_IN 0x00000750
1049 static u32 A_MSG_IN_DURING_DATA_IN_used[] __attribute((unused)) = {
1050         0x00000091,
1053 #define A_MSG_OUT       0x00000090
1054 static u32 A_MSG_OUT_used[] __attribute((unused)) = {
1057 #define A_MSG_OUT_AFTER_DATA_IN 0x00000590
1058 static u32 A_MSG_OUT_AFTER_DATA_IN_used[] __attribute((unused)) = {
1059         0x000000c7,
1062 #define A_MessageCount  0x00000000
1063 static u32 A_MessageCount_used[] __attribute((unused)) = {
1064         0x0000001e,
1067 #define A_MessageLocation       0x00000000
1068 static u32 A_MessageLocation_used[] __attribute((unused)) = {
1069         0x0000001f,
1072 #define A_NOT_MSG_IN    0x00000030
1073 static u32 A_NOT_MSG_IN_used[] __attribute((unused)) = {
1076 #define A_NOT_MSG_IN_AFTER_STATUS       0x00000430
1077 static u32 A_NOT_MSG_IN_AFTER_STATUS_used[] __attribute((unused)) = {
1078         0x0000011b,
1081 #define A_NOT_MSG_OUT   0x00000010
1082 static u32 A_NOT_MSG_OUT_used[] __attribute((unused)) = {
1085 #define A_NOT_MSG_OUT_AFTER_SELECTION   0x00000110
1086 static u32 A_NOT_MSG_OUT_AFTER_SELECTION_used[] __attribute((unused)) = {
1087         0x00000007,
1090 #define A_PARITY_ERROR_MSG      0x00000009
1091 static u32 A_PARITY_ERROR_MSG_used[] __attribute((unused)) = {
1094 #define A_REJECT_MSG    0x00000007
1095 static u32 A_REJECT_MSG_used[] __attribute((unused)) = {
1098 #define A_REJECT_MSG_BEFORE_CMD 0x00000270
1099 static u32 A_REJECT_MSG_BEFORE_CMD_used[] __attribute((unused)) = {
1102 #define A_REJECT_MSG_R  0x00000070
1103 static u32 A_REJECT_MSG_R_used[] __attribute((unused)) = {
1106 #define A_RESELECTED_DURING_SELECTION   0x00001000
1107 static u32 A_RESELECTED_DURING_SELECTION_used[] __attribute((unused)) = {
1108         0x0000000b,
1111 #define A_RESELECTION_IDENTIFIED        0x00001003
1112 static u32 A_RESELECTION_IDENTIFIED_used[] __attribute((unused)) = {
1113         0x00000011,
1114         0x00000015,
1117 #define A_RESTORE_DATA_PTRS_MSG 0x00000003
1118 static u32 A_RESTORE_DATA_PTRS_MSG_used[] __attribute((unused)) = {
1119         0x0000008e,
1120         0x00000098,
1121         0x000000b4,
1122         0x000000dc,
1123         0x00000100,
1126 #define A_ReceiveMsgAddress     0x00000000
1127 static u32 A_ReceiveMsgAddress_used[] __attribute((unused)) = {
1128         0x0000000f,
1129         0x00000013,
1130         0x00000029,
1131         0x00000031,
1132         0x00000037,
1133         0x00000047,
1134         0x0000004d,
1135         0x00000053,
1136         0x00000059,
1137         0x0000005f,
1138         0x00000089,
1139         0x00000093,
1140         0x000000b1,
1141         0x000000d7,
1142         0x000000fb,
1143         0x0000011d,
1146 #define A_SAVE_DATA_PTRS_MSG    0x00000002
1147 static u32 A_SAVE_DATA_PTRS_MSG_used[] __attribute((unused)) = {
1148         0x0000008c,
1149         0x00000096,
1150         0x000000b2,
1151         0x000000da,
1152         0x000000fe,
1155 #define A_SDTR_MSG      0x00000001
1156 static u32 A_SDTR_MSG_used[] __attribute((unused)) = {
1159 #define A_SDTR_MSG_AFTER_CMD    0x00000360
1160 static u32 A_SDTR_MSG_AFTER_CMD_used[] __attribute((unused)) = {
1163 #define A_SDTR_MSG_BEFORE_CMD   0x00000260
1164 static u32 A_SDTR_MSG_BEFORE_CMD_used[] __attribute((unused)) = {
1167 #define A_SDTR_MSG_R    0x00000060
1168 static u32 A_SDTR_MSG_R_used[] __attribute((unused)) = {
1171 #define A_SGScriptStartAddress  0x00000000
1172 static u32 A_SGScriptStartAddress_used[] __attribute((unused)) = {
1173         0x000000bf,
1174         0x000000cf,
1177 #define A_SIMPLE_TAG_MSG        0x00000020
1178 static u32 A_SIMPLE_TAG_MSG_used[] __attribute((unused)) = {
1181 #define A_StatusAddress 0x00000000
1182 static u32 A_StatusAddress_used[] __attribute((unused)) = {
1183         0x00000119,
1186 #define A_TWO_BYTE_MSG  0x00000020
1187 static u32 A_TWO_BYTE_MSG_used[] __attribute((unused)) = {
1188         0x0000002c,
1191 #define A_TWO_BYTE_MSG_MASK     0x0000000f
1192 static u32 A_TWO_BYTE_MSG_MASK_used[] __attribute((unused)) = {
1193         0x0000002c,
1196 #define A_UNEXPECTED_MSG        0x00000040
1197 static u32 A_UNEXPECTED_MSG_used[] __attribute((unused)) = {
1200 #define A_UNEXPECTED_MSG_BEFORE_CMD     0x00000240
1201 static u32 A_UNEXPECTED_MSG_BEFORE_CMD_used[] __attribute((unused)) = {
1204 #define A_UNEXPECTED_PHASE      0x00000020
1205 static u32 A_UNEXPECTED_PHASE_used[] __attribute((unused)) = {
1208 #define A_UNEXPECTED_PHASE_AFTER_CMD    0x00000320
1209 static u32 A_UNEXPECTED_PHASE_AFTER_CMD_used[] __attribute((unused)) = {
1210         0x00000083,
1213 #define A_UNEXPECTED_PHASE_AFTER_DATA_IN        0x00000520
1214 static u32 A_UNEXPECTED_PHASE_AFTER_DATA_IN_used[] __attribute((unused)) = {
1215         0x000000c9,
1218 #define A_UNEXPECTED_PHASE_AFTER_DATA_OUT       0x00000620
1219 static u32 A_UNEXPECTED_PHASE_AFTER_DATA_OUT_used[] __attribute((unused)) = {
1220         0x000000d5,
1223 #define A_UNEXPECTED_PHASE_BEFORE_CMD   0x00000220
1224 static u32 A_UNEXPECTED_PHASE_BEFORE_CMD_used[] __attribute((unused)) = {
1225         0x00000077,
1228 #define A_WDTR_MSG      0x00000003
1229 static u32 A_WDTR_MSG_used[] __attribute((unused)) = {
1232 #define A_WDTR_MSG_AFTER_CMD    0x000003a0
1233 static u32 A_WDTR_MSG_AFTER_CMD_used[] __attribute((unused)) = {
1236 #define A_WDTR_MSG_R    0x000000a0
1237 static u32 A_WDTR_MSG_R_used[] __attribute((unused)) = {
1240 #define Ent_Disconnect1 0x000002a8
1241 #define Ent_Disconnect2 0x000002b0
1242 #define Ent_Disconnect3 0x000003a8
1243 #define Ent_Disconnect4 0x000003b0
1244 #define Ent_Disconnect5 0x000003d0
1245 #define Ent_Disconnect6 0x000003d8
1246 #define Ent_Disconnect7 0x00000448
1247 #define Ent_Disconnect8 0x00000450
1248 #define Ent_Finish1     0x000004a0
1249 #define Ent_Finish2     0x000004a8
1250 #define Ent_FinishCommandComplete       0x00000490
1251 #define Ent_GetReselectionData  0x00000038
1252 #define Ent_GetReselectionWithTag       0x00000048
1253 #define Ent_IgnoreMessage       0x00000188
1254 #define Ent_MsgInDuringData     0x00000218
1255 #define Ent_ReceiveMessage      0x000000a0
1256 #define Ent_SelectedAsTarget    0x00000058
1257 #define Ent_SendCommand 0x000001c8
1258 #define Ent_SendMessage 0x00000078
1259 #define Ent_SendMessagePhaseMismatch    0x00000090
1260 #define Ent_SendMessageWithATN  0x00000198
1261 #define Ent_StartUp     0x00000000
1262 static u32 LABELPATCHES[] __attribute((unused)) = {
1263         0x00000001,
1264         0x00000003,
1265         0x00000005,
1266         0x00000009,
1267         0x00000027,
1268         0x0000002b,
1269         0x00000039,
1270         0x0000003b,
1271         0x0000003d,
1272         0x0000003f,
1273         0x00000041,
1274         0x0000006b,
1275         0x0000006d,
1276         0x00000073,
1277         0x00000075,
1278         0x0000007b,
1279         0x0000007d,
1280         0x0000007f,
1281         0x00000081,
1282         0x00000087,
1283         0x0000008b,
1284         0x0000008d,
1285         0x0000008f,
1286         0x00000095,
1287         0x00000097,
1288         0x00000099,
1289         0x0000009b,
1290         0x000000a1,
1291         0x000000a5,
1292         0x000000af,
1293         0x000000b3,
1294         0x000000b5,
1295         0x000000b7,
1296         0x000000bd,
1297         0x000000c1,
1298         0x000000c3,
1299         0x000000c5,
1300         0x000000cd,
1301         0x000000d1,
1302         0x000000d3,
1303         0x000000d9,
1304         0x000000db,
1305         0x000000dd,
1306         0x000000df,
1307         0x000000e5,
1308         0x000000ef,
1309         0x000000f9,
1310         0x000000fd,
1311         0x000000ff,
1312         0x00000101,
1313         0x00000103,
1314         0x00000109,
1315         0x0000010d,
1316         0x00000117,
1317         0x0000011f,
1318         0x00000121,
1321 static struct {
1322         u32     offset;
1323         void            *address;
1324 } EXTERNAL_PATCHES[] __attribute((unused)) = {
1327 static u32 INSTRUCTIONS __attribute((unused))   = 149;
1328 static u32 PATCHES __attribute((unused))        = 56;
1329 static u32 EXTERNAL_PATCHES_LEN __attribute((unused))   = 0;