1/* DO NOT EDIT - Generated automatically by script_asm.pl */ 2static u32 SCRIPT[] = { 3/* 4; Script for the NCR (or symbios) 53c700 and 53c700-66 chip 5; 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. 13;; 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. 18;; 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. 22;; 23;;----------------------------------------------------------------------------- 24; 25; This script is designed to be modified for the particular command in 26; operation. The particular variables pertaining to the commands are: 27; 28ABSOLUTE Device_ID = 0 ; ID of target for command 29ABSOLUTE MessageCount = 0 ; Number of bytes in message 30ABSOLUTE MessageLocation = 0 ; Addr of message 31ABSOLUTE CommandCount = 0 ; Number of bytes in command 32ABSOLUTE CommandAddress = 0 ; Addr of Command 33ABSOLUTE StatusAddress = 0 ; Addr to receive status return 34ABSOLUTE ReceiveMsgAddress = 0 ; Addr to receive msg 35; 36; This is the magic component for handling scatter-gather. Each of the 37; SG components is preceded 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. 41; 42ABSOLUTE SGScriptStartAddress = 0 43 44; The following represent status interrupts we use 3 hex digits for 45; this: 0xPRS where 46 47; P: 48ABSOLUTE AFTER_SELECTION = 0x100 49ABSOLUTE BEFORE_CMD = 0x200 50ABSOLUTE AFTER_CMD = 0x300 51ABSOLUTE AFTER_STATUS = 0x400 52ABSOLUTE AFTER_DATA_IN = 0x500 53ABSOLUTE AFTER_DATA_OUT = 0x600 54ABSOLUTE DURING_DATA_IN = 0x700 55 56; R: 57ABSOLUTE NOT_MSG_OUT = 0x10 58ABSOLUTE UNEXPECTED_PHASE = 0x20 59ABSOLUTE NOT_MSG_IN = 0x30 60ABSOLUTE UNEXPECTED_MSG = 0x40 61ABSOLUTE MSG_IN = 0x50 62ABSOLUTE SDTR_MSG_R = 0x60 63ABSOLUTE REJECT_MSG_R = 0x70 64ABSOLUTE DISCONNECT = 0x80 65ABSOLUTE MSG_OUT = 0x90 66ABSOLUTE WDTR_MSG_R = 0xA0 67 68; S: 69ABSOLUTE GOOD_STATUS = 0x1 70 71; Combinations, since the script assembler can't process | 72ABSOLUTE NOT_MSG_OUT_AFTER_SELECTION = 0x110 73ABSOLUTE UNEXPECTED_PHASE_BEFORE_CMD = 0x220 74ABSOLUTE UNEXPECTED_PHASE_AFTER_CMD = 0x320 75ABSOLUTE NOT_MSG_IN_AFTER_STATUS = 0x430 76ABSOLUTE GOOD_STATUS_AFTER_STATUS = 0x401 77ABSOLUTE UNEXPECTED_PHASE_AFTER_DATA_IN = 0x520 78ABSOLUTE UNEXPECTED_PHASE_AFTER_DATA_OUT = 0x620 79ABSOLUTE UNEXPECTED_MSG_BEFORE_CMD = 0x240 80ABSOLUTE MSG_IN_BEFORE_CMD = 0x250 81ABSOLUTE MSG_IN_AFTER_CMD = 0x350 82ABSOLUTE SDTR_MSG_BEFORE_CMD = 0x260 83ABSOLUTE REJECT_MSG_BEFORE_CMD = 0x270 84ABSOLUTE DISCONNECT_AFTER_CMD = 0x380 85ABSOLUTE SDTR_MSG_AFTER_CMD = 0x360 86ABSOLUTE WDTR_MSG_AFTER_CMD = 0x3A0 87ABSOLUTE MSG_IN_AFTER_STATUS = 0x440 88ABSOLUTE DISCONNECT_AFTER_DATA = 0x580 89ABSOLUTE MSG_IN_AFTER_DATA_IN = 0x550 90ABSOLUTE MSG_IN_AFTER_DATA_OUT = 0x650 91ABSOLUTE MSG_OUT_AFTER_DATA_IN = 0x590 92ABSOLUTE DATA_IN_AFTER_DATA_IN = 0x5a0 93ABSOLUTE MSG_IN_DURING_DATA_IN = 0x750 94ABSOLUTE DISCONNECT_DURING_DATA = 0x780 95 96; 97; Other interrupt conditions 98; 99ABSOLUTE RESELECTED_DURING_SELECTION = 0x1000 100ABSOLUTE COMPLETED_SELECTION_AS_TARGET = 0x1001 101ABSOLUTE RESELECTION_IDENTIFIED = 0x1003 102; 103; Fatal interrupt conditions. If you add to this, also add to the 104; array of corresponding messages 105; 106ABSOLUTE FATAL = 0x2000 107ABSOLUTE FATAL_UNEXPECTED_RESELECTION_MSG = 0x2000 108ABSOLUTE FATAL_SEND_MSG = 0x2001 109ABSOLUTE FATAL_NOT_MSG_IN_AFTER_SELECTION = 0x2002 110ABSOLUTE FATAL_ILLEGAL_MSG_LENGTH = 0x2003 111 112ABSOLUTE DEBUG_INTERRUPT = 0x3000 113ABSOLUTE DEBUG_INTERRUPT1 = 0x3001 114ABSOLUTE DEBUG_INTERRUPT2 = 0x3002 115ABSOLUTE DEBUG_INTERRUPT3 = 0x3003 116ABSOLUTE DEBUG_INTERRUPT4 = 0x3004 117ABSOLUTE DEBUG_INTERRUPT5 = 0x3005 118ABSOLUTE DEBUG_INTERRUPT6 = 0x3006 119 120 121; 122; SCSI Messages we interpret in the script 123; 124ABSOLUTE COMMAND_COMPLETE_MSG = 0x00 125ABSOLUTE EXTENDED_MSG = 0x01 126ABSOLUTE SDTR_MSG = 0x01 127ABSOLUTE SAVE_DATA_PTRS_MSG = 0x02 128ABSOLUTE RESTORE_DATA_PTRS_MSG = 0x03 129ABSOLUTE WDTR_MSG = 0x03 130ABSOLUTE DISCONNECT_MSG = 0x04 131ABSOLUTE REJECT_MSG = 0x07 132ABSOLUTE PARITY_ERROR_MSG = 0x09 133ABSOLUTE SIMPLE_TAG_MSG = 0x20 134ABSOLUTE IDENTIFY_MSG = 0x80 135ABSOLUTE IDENTIFY_MSG_MASK = 0x7F 136ABSOLUTE TWO_BYTE_MSG = 0x20 137ABSOLUTE TWO_BYTE_MSG_MASK = 0x0F 138 139; This is where the script begins 140 141ENTRY StartUp 142 143StartUp: 144 SELECT ATN Device_ID, Reselect 145 146at 0x00000000 : */ 0x41000000,0x00000020, 147/* 148 JUMP Finish, WHEN STATUS 149 150at 0x00000002 : */ 0x830b0000,0x00000460, 151/* 152 JUMP SendIdentifyMsg, IF MSG_OUT 153 154at 0x00000004 : */ 0x860a0000,0x000001b0, 155/* 156 INT NOT_MSG_OUT_AFTER_SELECTION 157 158at 0x00000006 : */ 0x98080000,0x00000110, 159/* 160 161Reselect: 162 WAIT RESELECT SelectedAsTarget 163 164at 0x00000008 : */ 0x50000000,0x00000058, 165/* 166 INT RESELECTED_DURING_SELECTION, WHEN MSG_IN 167 168at 0x0000000a : */ 0x9f0b0000,0x00001000, 169/* 170 INT FATAL_NOT_MSG_IN_AFTER_SELECTION 171 172at 0x0000000c : */ 0x98080000,0x00002002, 173/* 174 175 ENTRY GetReselectionData 176GetReselectionData: 177 MOVE 1, ReceiveMsgAddress, WHEN MSG_IN 178 179at 0x0000000e : */ 0x0f000001,0x00000000, 180/* 181 INT RESELECTION_IDENTIFIED 182 183at 0x00000010 : */ 0x98080000,0x00001003, 184/* 185 186 ENTRY GetReselectionWithTag 187GetReselectionWithTag: 188 MOVE 3, ReceiveMsgAddress, WHEN MSG_IN 189 190at 0x00000012 : */ 0x0f000003,0x00000000, 191/* 192 INT RESELECTION_IDENTIFIED 193 194at 0x00000014 : */ 0x98080000,0x00001003, 195/* 196 197 ENTRY SelectedAsTarget 198SelectedAsTarget: 199; Basically tell the selecting device that there's nothing here 200 SET TARGET 201 202at 0x00000016 : */ 0x58000200,0x00000000, 203/* 204 DISCONNECT 205 206at 0x00000018 : */ 0x48000000,0x00000000, 207/* 208 CLEAR TARGET 209 210at 0x0000001a : */ 0x60000200,0x00000000, 211/* 212 INT COMPLETED_SELECTION_AS_TARGET 213 214at 0x0000001c : */ 0x98080000,0x00001001, 215/* 216; 217; These are the messaging entries 218; 219; Send a message. Message count should be correctly patched 220 ENTRY SendMessage 221SendMessage: 222 MOVE MessageCount, MessageLocation, WHEN MSG_OUT 223 224at 0x0000001e : */ 0x0e000000,0x00000000, 225/* 226ResumeSendMessage: 227 RETURN, WHEN NOT MSG_OUT 228 229at 0x00000020 : */ 0x96030000,0x00000000, 230/* 231 INT FATAL_SEND_MSG 232 233at 0x00000022 : */ 0x98080000,0x00002001, 234/* 235 236 ENTRY SendMessagePhaseMismatch 237SendMessagePhaseMismatch: 238 CLEAR ACK 239 240at 0x00000024 : */ 0x60000040,0x00000000, 241/* 242 JUMP ResumeSendMessage 243 244at 0x00000026 : */ 0x80080000,0x00000080, 245/* 246; 247; Receive a message. Need to identify the message to 248; receive it correctly 249 ENTRY ReceiveMessage 250ReceiveMessage: 251 MOVE 1, ReceiveMsgAddress, WHEN MSG_IN 252 253at 0x00000028 : */ 0x0f000001,0x00000000, 254/* 255; 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 258ProcessReceiveMessage: 259 JUMP ReceiveExtendedMessage, IF EXTENDED_MSG 260 261at 0x0000002a : */ 0x800c0001,0x000000d0, 262/* 263 RETURN, IF NOT TWO_BYTE_MSG, AND MASK TWO_BYTE_MSG_MASK 264 265at 0x0000002c : */ 0x90040f20,0x00000000, 266/* 267 CLEAR ACK 268 269at 0x0000002e : */ 0x60000040,0x00000000, 270/* 271 MOVE 1, ReceiveMsgAddress + 1, WHEN MSG_IN 272 273at 0x00000030 : */ 0x0f000001,0x00000001, 274/* 275 RETURN 276 277at 0x00000032 : */ 0x90080000,0x00000000, 278/* 279ReceiveExtendedMessage: 280 CLEAR ACK 281 282at 0x00000034 : */ 0x60000040,0x00000000, 283/* 284 MOVE 1, ReceiveMsgAddress + 1, WHEN MSG_IN 285 286at 0x00000036 : */ 0x0f000001,0x00000001, 287/* 288 JUMP Receive1Byte, IF 0x01 289 290at 0x00000038 : */ 0x800c0001,0x00000110, 291/* 292 JUMP Receive2Byte, IF 0x02 293 294at 0x0000003a : */ 0x800c0002,0x00000128, 295/* 296 JUMP Receive3Byte, IF 0x03 297 298at 0x0000003c : */ 0x800c0003,0x00000140, 299/* 300 JUMP Receive4Byte, IF 0x04 301 302at 0x0000003e : */ 0x800c0004,0x00000158, 303/* 304 JUMP Receive5Byte, IF 0x05 305 306at 0x00000040 : */ 0x800c0005,0x00000170, 307/* 308 INT FATAL_ILLEGAL_MSG_LENGTH 309 310at 0x00000042 : */ 0x98080000,0x00002003, 311/* 312Receive1Byte: 313 CLEAR ACK 314 315at 0x00000044 : */ 0x60000040,0x00000000, 316/* 317 MOVE 1, ReceiveMsgAddress + 2, WHEN MSG_IN 318 319at 0x00000046 : */ 0x0f000001,0x00000002, 320/* 321 RETURN 322 323at 0x00000048 : */ 0x90080000,0x00000000, 324/* 325Receive2Byte: 326 CLEAR ACK 327 328at 0x0000004a : */ 0x60000040,0x00000000, 329/* 330 MOVE 2, ReceiveMsgAddress + 2, WHEN MSG_IN 331 332at 0x0000004c : */ 0x0f000002,0x00000002, 333/* 334 RETURN 335 336at 0x0000004e : */ 0x90080000,0x00000000, 337/* 338Receive3Byte: 339 CLEAR ACK 340 341at 0x00000050 : */ 0x60000040,0x00000000, 342/* 343 MOVE 3, ReceiveMsgAddress + 2, WHEN MSG_IN 344 345at 0x00000052 : */ 0x0f000003,0x00000002, 346/* 347 RETURN 348 349at 0x00000054 : */ 0x90080000,0x00000000, 350/* 351Receive4Byte: 352 CLEAR ACK 353 354at 0x00000056 : */ 0x60000040,0x00000000, 355/* 356 MOVE 4, ReceiveMsgAddress + 2, WHEN MSG_IN 357 358at 0x00000058 : */ 0x0f000004,0x00000002, 359/* 360 RETURN 361 362at 0x0000005a : */ 0x90080000,0x00000000, 363/* 364Receive5Byte: 365 CLEAR ACK 366 367at 0x0000005c : */ 0x60000040,0x00000000, 368/* 369 MOVE 5, ReceiveMsgAddress + 2, WHEN MSG_IN 370 371at 0x0000005e : */ 0x0f000005,0x00000002, 372/* 373 RETURN 374 375at 0x00000060 : */ 0x90080000,0x00000000, 376/* 377; 378; Come here from the message processor to ignore the message 379; 380 ENTRY IgnoreMessage 381IgnoreMessage: 382 CLEAR ACK 383 384at 0x00000062 : */ 0x60000040,0x00000000, 385/* 386 RETURN 387 388at 0x00000064 : */ 0x90080000,0x00000000, 389/* 390; 391; Come here to send a reply to a message 392; 393 ENTRY SendMessageWithATN 394SendMessageWithATN: 395 SET ATN 396 397at 0x00000066 : */ 0x58000008,0x00000000, 398/* 399 CLEAR ACK 400 401at 0x00000068 : */ 0x60000040,0x00000000, 402/* 403 JUMP SendMessage 404 405at 0x0000006a : */ 0x80080000,0x00000078, 406/* 407 408SendIdentifyMsg: 409 CALL SendMessage 410 411at 0x0000006c : */ 0x88080000,0x00000078, 412/* 413 CLEAR ATN 414 415at 0x0000006e : */ 0x60000008,0x00000000, 416/* 417 418IgnoreMsgBeforeCommand: 419 CLEAR ACK 420 421at 0x00000070 : */ 0x60000040,0x00000000, 422/* 423 ENTRY SendCommand 424SendCommand: 425 JUMP Finish, WHEN STATUS 426 427at 0x00000072 : */ 0x830b0000,0x00000460, 428/* 429 JUMP MsgInBeforeCommand, IF MSG_IN 430 431at 0x00000074 : */ 0x870a0000,0x000002c0, 432/* 433 INT UNEXPECTED_PHASE_BEFORE_CMD, IF NOT CMD 434 435at 0x00000076 : */ 0x9a020000,0x00000220, 436/* 437 MOVE CommandCount, CommandAddress, WHEN CMD 438 439at 0x00000078 : */ 0x0a000000,0x00000000, 440/* 441ResumeSendCommand: 442 JUMP Finish, WHEN STATUS 443 444at 0x0000007a : */ 0x830b0000,0x00000460, 445/* 446 JUMP MsgInAfterCmd, IF MSG_IN 447 448at 0x0000007c : */ 0x870a0000,0x00000248, 449/* 450 JUMP DataIn, IF DATA_IN 451 452at 0x0000007e : */ 0x810a0000,0x000002f8, 453/* 454 JUMP DataOut, IF DATA_OUT 455 456at 0x00000080 : */ 0x800a0000,0x00000338, 457/* 458 INT UNEXPECTED_PHASE_AFTER_CMD 459 460at 0x00000082 : */ 0x98080000,0x00000320, 461/* 462 463IgnoreMsgDuringData: 464 CLEAR ACK 465 466at 0x00000084 : */ 0x60000040,0x00000000, 467/* 468 ; fall through to MsgInDuringData 469 470Entry MsgInDuringData 471MsgInDuringData: 472; 473; Could be we have nothing more to transfer 474; 475 JUMP Finish, WHEN STATUS 476 477at 0x00000086 : */ 0x830b0000,0x00000460, 478/* 479 MOVE 1, ReceiveMsgAddress, WHEN MSG_IN 480 481at 0x00000088 : */ 0x0f000001,0x00000000, 482/* 483 JUMP DisconnectDuringDataIn, IF DISCONNECT_MSG 484 485at 0x0000008a : */ 0x800c0004,0x00000398, 486/* 487 JUMP IgnoreMsgDuringData, IF SAVE_DATA_PTRS_MSG 488 489at 0x0000008c : */ 0x800c0002,0x00000210, 490/* 491 JUMP IgnoreMsgDuringData, IF RESTORE_DATA_PTRS_MSG 492 493at 0x0000008e : */ 0x800c0003,0x00000210, 494/* 495 INT MSG_IN_DURING_DATA_IN 496 497at 0x00000090 : */ 0x98080000,0x00000750, 498/* 499 500MsgInAfterCmd: 501 MOVE 1, ReceiveMsgAddress, WHEN MSG_IN 502 503at 0x00000092 : */ 0x0f000001,0x00000000, 504/* 505 JUMP DisconnectAfterCmd, IF DISCONNECT_MSG 506 507at 0x00000094 : */ 0x800c0004,0x00000298, 508/* 509 JUMP IgnoreMsgInAfterCmd, IF SAVE_DATA_PTRS_MSG 510 511at 0x00000096 : */ 0x800c0002,0x00000288, 512/* 513 JUMP IgnoreMsgInAfterCmd, IF RESTORE_DATA_PTRS_MSG 514 515at 0x00000098 : */ 0x800c0003,0x00000288, 516/* 517 CALL ProcessReceiveMessage 518 519at 0x0000009a : */ 0x88080000,0x000000a8, 520/* 521 INT MSG_IN_AFTER_CMD 522 523at 0x0000009c : */ 0x98080000,0x00000350, 524/* 525 CLEAR ACK 526 527at 0x0000009e : */ 0x60000040,0x00000000, 528/* 529 JUMP ResumeSendCommand 530 531at 0x000000a0 : */ 0x80080000,0x000001e8, 532/* 533 534IgnoreMsgInAfterCmd: 535 CLEAR ACK 536 537at 0x000000a2 : */ 0x60000040,0x00000000, 538/* 539 JUMP ResumeSendCommand 540 541at 0x000000a4 : */ 0x80080000,0x000001e8, 542/* 543 544DisconnectAfterCmd: 545 CLEAR ACK 546 547at 0x000000a6 : */ 0x60000040,0x00000000, 548/* 549 WAIT DISCONNECT 550 551at 0x000000a8 : */ 0x48000000,0x00000000, 552/* 553 ENTRY Disconnect1 554Disconnect1: 555 INT DISCONNECT_AFTER_CMD 556 557at 0x000000aa : */ 0x98080000,0x00000380, 558/* 559 ENTRY Disconnect2 560Disconnect2: 561; We return here after a reselection 562 CLEAR ACK 563 564at 0x000000ac : */ 0x60000040,0x00000000, 565/* 566 JUMP ResumeSendCommand 567 568at 0x000000ae : */ 0x80080000,0x000001e8, 569/* 570 571MsgInBeforeCommand: 572 MOVE 1, ReceiveMsgAddress, WHEN MSG_IN 573 574at 0x000000b0 : */ 0x0f000001,0x00000000, 575/* 576 JUMP IgnoreMsgBeforeCommand, IF SAVE_DATA_PTRS_MSG 577 578at 0x000000b2 : */ 0x800c0002,0x000001c0, 579/* 580 JUMP IgnoreMsgBeforeCommand, IF RESTORE_DATA_PTRS_MSG 581 582at 0x000000b4 : */ 0x800c0003,0x000001c0, 583/* 584 CALL ProcessReceiveMessage 585 586at 0x000000b6 : */ 0x88080000,0x000000a8, 587/* 588 INT MSG_IN_BEFORE_CMD 589 590at 0x000000b8 : */ 0x98080000,0x00000250, 591/* 592 CLEAR ACK 593 594at 0x000000ba : */ 0x60000040,0x00000000, 595/* 596 JUMP SendCommand 597 598at 0x000000bc : */ 0x80080000,0x000001c8, 599/* 600 601DataIn: 602 CALL SGScriptStartAddress 603 604at 0x000000be : */ 0x88080000,0x00000000, 605/* 606ResumeDataIn: 607 JUMP Finish, WHEN STATUS 608 609at 0x000000c0 : */ 0x830b0000,0x00000460, 610/* 611 JUMP MsgInAfterDataIn, IF MSG_IN 612 613at 0x000000c2 : */ 0x870a0000,0x00000358, 614/* 615 JUMP DataInAfterDataIn, if DATA_IN 616 617at 0x000000c4 : */ 0x810a0000,0x00000328, 618/* 619 INT MSG_OUT_AFTER_DATA_IN, if MSG_OUT 620 621at 0x000000c6 : */ 0x9e0a0000,0x00000590, 622/* 623 INT UNEXPECTED_PHASE_AFTER_DATA_IN 624 625at 0x000000c8 : */ 0x98080000,0x00000520, 626/* 627 628DataInAfterDataIn: 629 INT DATA_IN_AFTER_DATA_IN 630 631at 0x000000ca : */ 0x98080000,0x000005a0, 632/* 633 JUMP ResumeDataIn 634 635at 0x000000cc : */ 0x80080000,0x00000300, 636/* 637 638DataOut: 639 CALL SGScriptStartAddress 640 641at 0x000000ce : */ 0x88080000,0x00000000, 642/* 643ResumeDataOut: 644 JUMP Finish, WHEN STATUS 645 646at 0x000000d0 : */ 0x830b0000,0x00000460, 647/* 648 JUMP MsgInAfterDataOut, IF MSG_IN 649 650at 0x000000d2 : */ 0x870a0000,0x000003e8, 651/* 652 INT UNEXPECTED_PHASE_AFTER_DATA_OUT 653 654at 0x000000d4 : */ 0x98080000,0x00000620, 655/* 656 657MsgInAfterDataIn: 658 MOVE 1, ReceiveMsgAddress, WHEN MSG_IN 659 660at 0x000000d6 : */ 0x0f000001,0x00000000, 661/* 662 JUMP DisconnectAfterDataIn, IF DISCONNECT_MSG 663 664at 0x000000d8 : */ 0x800c0004,0x000003c0, 665/* 666 JUMP IgnoreMsgAfterData, IF SAVE_DATA_PTRS_MSG 667 668at 0x000000da : */ 0x800c0002,0x00000428, 669/* 670 JUMP IgnoreMsgAfterData, IF RESTORE_DATA_PTRS_MSG 671 672at 0x000000dc : */ 0x800c0003,0x00000428, 673/* 674 CALL ProcessReceiveMessage 675 676at 0x000000de : */ 0x88080000,0x000000a8, 677/* 678 INT MSG_IN_AFTER_DATA_IN 679 680at 0x000000e0 : */ 0x98080000,0x00000550, 681/* 682 CLEAR ACK 683 684at 0x000000e2 : */ 0x60000040,0x00000000, 685/* 686 JUMP ResumeDataIn 687 688at 0x000000e4 : */ 0x80080000,0x00000300, 689/* 690 691DisconnectDuringDataIn: 692 CLEAR ACK 693 694at 0x000000e6 : */ 0x60000040,0x00000000, 695/* 696 WAIT DISCONNECT 697 698at 0x000000e8 : */ 0x48000000,0x00000000, 699/* 700 ENTRY Disconnect3 701Disconnect3: 702 INT DISCONNECT_DURING_DATA 703 704at 0x000000ea : */ 0x98080000,0x00000780, 705/* 706 ENTRY Disconnect4 707Disconnect4: 708; we return here after a reselection 709 CLEAR ACK 710 711at 0x000000ec : */ 0x60000040,0x00000000, 712/* 713 JUMP ResumeSendCommand 714 715at 0x000000ee : */ 0x80080000,0x000001e8, 716/* 717 718 719DisconnectAfterDataIn: 720 CLEAR ACK 721 722at 0x000000f0 : */ 0x60000040,0x00000000, 723/* 724 WAIT DISCONNECT 725 726at 0x000000f2 : */ 0x48000000,0x00000000, 727/* 728 ENTRY Disconnect5 729Disconnect5: 730 INT DISCONNECT_AFTER_DATA 731 732at 0x000000f4 : */ 0x98080000,0x00000580, 733/* 734 ENTRY Disconnect6 735Disconnect6: 736; we return here after a reselection 737 CLEAR ACK 738 739at 0x000000f6 : */ 0x60000040,0x00000000, 740/* 741 JUMP ResumeDataIn 742 743at 0x000000f8 : */ 0x80080000,0x00000300, 744/* 745 746MsgInAfterDataOut: 747 MOVE 1, ReceiveMsgAddress, WHEN MSG_IN 748 749at 0x000000fa : */ 0x0f000001,0x00000000, 750/* 751 JUMP DisconnectAfterDataOut, if DISCONNECT_MSG 752 753at 0x000000fc : */ 0x800c0004,0x00000438, 754/* 755 JUMP IgnoreMsgAfterData, IF SAVE_DATA_PTRS_MSG 756 757at 0x000000fe : */ 0x800c0002,0x00000428, 758/* 759 JUMP IgnoreMsgAfterData, IF RESTORE_DATA_PTRS_MSG 760 761at 0x00000100 : */ 0x800c0003,0x00000428, 762/* 763 CALL ProcessReceiveMessage 764 765at 0x00000102 : */ 0x88080000,0x000000a8, 766/* 767 INT MSG_IN_AFTER_DATA_OUT 768 769at 0x00000104 : */ 0x98080000,0x00000650, 770/* 771 CLEAR ACK 772 773at 0x00000106 : */ 0x60000040,0x00000000, 774/* 775 JUMP ResumeDataOut 776 777at 0x00000108 : */ 0x80080000,0x00000340, 778/* 779 780IgnoreMsgAfterData: 781 CLEAR ACK 782 783at 0x0000010a : */ 0x60000040,0x00000000, 784/* 785; Data in and out do the same thing on resume, so pick one 786 JUMP ResumeDataIn 787 788at 0x0000010c : */ 0x80080000,0x00000300, 789/* 790 791DisconnectAfterDataOut: 792 CLEAR ACK 793 794at 0x0000010e : */ 0x60000040,0x00000000, 795/* 796 WAIT DISCONNECT 797 798at 0x00000110 : */ 0x48000000,0x00000000, 799/* 800 ENTRY Disconnect7 801Disconnect7: 802 INT DISCONNECT_AFTER_DATA 803 804at 0x00000112 : */ 0x98080000,0x00000580, 805/* 806 ENTRY Disconnect8 807Disconnect8: 808; we return here after a reselection 809 CLEAR ACK 810 811at 0x00000114 : */ 0x60000040,0x00000000, 812/* 813 JUMP ResumeDataOut 814 815at 0x00000116 : */ 0x80080000,0x00000340, 816/* 817 818Finish: 819 MOVE 1, StatusAddress, WHEN STATUS 820 821at 0x00000118 : */ 0x0b000001,0x00000000, 822/* 823 INT NOT_MSG_IN_AFTER_STATUS, WHEN NOT MSG_IN 824 825at 0x0000011a : */ 0x9f030000,0x00000430, 826/* 827 MOVE 1, ReceiveMsgAddress, WHEN MSG_IN 828 829at 0x0000011c : */ 0x0f000001,0x00000000, 830/* 831 JUMP FinishCommandComplete, IF COMMAND_COMPLETE_MSG 832 833at 0x0000011e : */ 0x800c0000,0x00000490, 834/* 835 CALL ProcessReceiveMessage 836 837at 0x00000120 : */ 0x88080000,0x000000a8, 838/* 839 INT MSG_IN_AFTER_STATUS 840 841at 0x00000122 : */ 0x98080000,0x00000440, 842/* 843 ENTRY FinishCommandComplete 844FinishCommandComplete: 845 CLEAR ACK 846 847at 0x00000124 : */ 0x60000040,0x00000000, 848/* 849 WAIT DISCONNECT 850 851at 0x00000126 : */ 0x48000000,0x00000000, 852/* 853 ENTRY Finish1 854Finish1: 855 INT GOOD_STATUS_AFTER_STATUS 856 857at 0x00000128 : */ 0x98080000,0x00000401, 858}; 859 860#define A_AFTER_CMD 0x00000300 861static u32 A_AFTER_CMD_used[] __attribute((unused)) = { 862}; 863 864#define A_AFTER_DATA_IN 0x00000500 865static u32 A_AFTER_DATA_IN_used[] __attribute((unused)) = { 866}; 867 868#define A_AFTER_DATA_OUT 0x00000600 869static u32 A_AFTER_DATA_OUT_used[] __attribute((unused)) = { 870}; 871 872#define A_AFTER_SELECTION 0x00000100 873static u32 A_AFTER_SELECTION_used[] __attribute((unused)) = { 874}; 875 876#define A_AFTER_STATUS 0x00000400 877static u32 A_AFTER_STATUS_used[] __attribute((unused)) = { 878}; 879 880#define A_BEFORE_CMD 0x00000200 881static u32 A_BEFORE_CMD_used[] __attribute((unused)) = { 882}; 883 884#define A_COMMAND_COMPLETE_MSG 0x00000000 885static u32 A_COMMAND_COMPLETE_MSG_used[] __attribute((unused)) = { 886 0x0000011e, 887}; 888 889#define A_COMPLETED_SELECTION_AS_TARGET 0x00001001 890static u32 A_COMPLETED_SELECTION_AS_TARGET_used[] __attribute((unused)) = { 891 0x0000001d, 892}; 893 894#define A_CommandAddress 0x00000000 895static u32 A_CommandAddress_used[] __attribute((unused)) = { 896 0x00000079, 897}; 898 899#define A_CommandCount 0x00000000 900static u32 A_CommandCount_used[] __attribute((unused)) = { 901 0x00000078, 902}; 903 904#define A_DATA_IN_AFTER_DATA_IN 0x000005a0 905static u32 A_DATA_IN_AFTER_DATA_IN_used[] __attribute((unused)) = { 906 0x000000cb, 907}; 908 909#define A_DEBUG_INTERRUPT 0x00003000 910static u32 A_DEBUG_INTERRUPT_used[] __attribute((unused)) = { 911}; 912 913#define A_DEBUG_INTERRUPT1 0x00003001 914static u32 A_DEBUG_INTERRUPT1_used[] __attribute((unused)) = { 915}; 916 917#define A_DEBUG_INTERRUPT2 0x00003002 918static u32 A_DEBUG_INTERRUPT2_used[] __attribute((unused)) = { 919}; 920 921#define A_DEBUG_INTERRUPT3 0x00003003 922static u32 A_DEBUG_INTERRUPT3_used[] __attribute((unused)) = { 923}; 924 925#define A_DEBUG_INTERRUPT4 0x00003004 926static u32 A_DEBUG_INTERRUPT4_used[] __attribute((unused)) = { 927}; 928 929#define A_DEBUG_INTERRUPT5 0x00003005 930static u32 A_DEBUG_INTERRUPT5_used[] __attribute((unused)) = { 931}; 932 933#define A_DEBUG_INTERRUPT6 0x00003006 934static u32 A_DEBUG_INTERRUPT6_used[] __attribute((unused)) = { 935}; 936 937#define A_DISCONNECT 0x00000080 938static u32 A_DISCONNECT_used[] __attribute((unused)) = { 939}; 940 941#define A_DISCONNECT_AFTER_CMD 0x00000380 942static u32 A_DISCONNECT_AFTER_CMD_used[] __attribute((unused)) = { 943 0x000000ab, 944}; 945 946#define A_DISCONNECT_AFTER_DATA 0x00000580 947static u32 A_DISCONNECT_AFTER_DATA_used[] __attribute((unused)) = { 948 0x000000f5, 949 0x00000113, 950}; 951 952#define A_DISCONNECT_DURING_DATA 0x00000780 953static u32 A_DISCONNECT_DURING_DATA_used[] __attribute((unused)) = { 954 0x000000eb, 955}; 956 957#define A_DISCONNECT_MSG 0x00000004 958static u32 A_DISCONNECT_MSG_used[] __attribute((unused)) = { 959 0x0000008a, 960 0x00000094, 961 0x000000d8, 962 0x000000fc, 963}; 964 965#define A_DURING_DATA_IN 0x00000700 966static u32 A_DURING_DATA_IN_used[] __attribute((unused)) = { 967}; 968 969#define A_Device_ID 0x00000000 970static u32 A_Device_ID_used[] __attribute((unused)) = { 971 0x00000000, 972}; 973 974#define A_EXTENDED_MSG 0x00000001 975static u32 A_EXTENDED_MSG_used[] __attribute((unused)) = { 976 0x0000002a, 977}; 978 979#define A_FATAL 0x00002000 980static u32 A_FATAL_used[] __attribute((unused)) = { 981}; 982 983#define A_FATAL_ILLEGAL_MSG_LENGTH 0x00002003 984static u32 A_FATAL_ILLEGAL_MSG_LENGTH_used[] __attribute((unused)) = { 985 0x00000043, 986}; 987 988#define A_FATAL_NOT_MSG_IN_AFTER_SELECTION 0x00002002 989static u32 A_FATAL_NOT_MSG_IN_AFTER_SELECTION_used[] __attribute((unused)) = { 990 0x0000000d, 991}; 992 993#define A_FATAL_SEND_MSG 0x00002001 994static u32 A_FATAL_SEND_MSG_used[] __attribute((unused)) = { 995 0x00000023, 996}; 997 998#define A_FATAL_UNEXPECTED_RESELECTION_MSG 0x00002000 999static u32 A_FATAL_UNEXPECTED_RESELECTION_MSG_used[] __attribute((unused)) = { 1000}; 1001 1002#define A_GOOD_STATUS 0x00000001 1003static u32 A_GOOD_STATUS_used[] __attribute((unused)) = { 1004}; 1005 1006#define A_GOOD_STATUS_AFTER_STATUS 0x00000401 1007static u32 A_GOOD_STATUS_AFTER_STATUS_used[] __attribute((unused)) = { 1008 0x00000129, 1009}; 1010 1011#define A_IDENTIFY_MSG 0x00000080 1012static u32 A_IDENTIFY_MSG_used[] __attribute((unused)) = { 1013}; 1014 1015#define A_IDENTIFY_MSG_MASK 0x0000007f 1016static u32 A_IDENTIFY_MSG_MASK_used[] __attribute((unused)) = { 1017}; 1018 1019#define A_MSG_IN 0x00000050 1020static u32 A_MSG_IN_used[] __attribute((unused)) = { 1021}; 1022 1023#define A_MSG_IN_AFTER_CMD 0x00000350 1024static u32 A_MSG_IN_AFTER_CMD_used[] __attribute((unused)) = { 1025 0x0000009d, 1026}; 1027 1028#define A_MSG_IN_AFTER_DATA_IN 0x00000550 1029static u32 A_MSG_IN_AFTER_DATA_IN_used[] __attribute((unused)) = { 1030 0x000000e1, 1031}; 1032 1033#define A_MSG_IN_AFTER_DATA_OUT 0x00000650 1034static u32 A_MSG_IN_AFTER_DATA_OUT_used[] __attribute((unused)) = { 1035 0x00000105, 1036}; 1037 1038#define A_MSG_IN_AFTER_STATUS 0x00000440 1039static u32 A_MSG_IN_AFTER_STATUS_used[] __attribute((unused)) = { 1040 0x00000123, 1041}; 1042 1043#define A_MSG_IN_BEFORE_CMD 0x00000250 1044static u32 A_MSG_IN_BEFORE_CMD_used[] __attribute((unused)) = { 1045 0x000000b9, 1046}; 1047 1048#define A_MSG_IN_DURING_DATA_IN 0x00000750 1049static u32 A_MSG_IN_DURING_DATA_IN_used[] __attribute((unused)) = { 1050 0x00000091, 1051}; 1052 1053#define A_MSG_OUT 0x00000090 1054static u32 A_MSG_OUT_used[] __attribute((unused)) = { 1055}; 1056 1057#define A_MSG_OUT_AFTER_DATA_IN 0x00000590 1058static u32 A_MSG_OUT_AFTER_DATA_IN_used[] __attribute((unused)) = { 1059 0x000000c7, 1060}; 1061 1062#define A_MessageCount 0x00000000 1063static u32 A_MessageCount_used[] __attribute((unused)) = { 1064 0x0000001e, 1065}; 1066 1067#define A_MessageLocation 0x00000000 1068static u32 A_MessageLocation_used[] __attribute((unused)) = { 1069 0x0000001f, 1070}; 1071 1072#define A_NOT_MSG_IN 0x00000030 1073static u32 A_NOT_MSG_IN_used[] __attribute((unused)) = { 1074}; 1075 1076#define A_NOT_MSG_IN_AFTER_STATUS 0x00000430 1077static u32 A_NOT_MSG_IN_AFTER_STATUS_used[] __attribute((unused)) = { 1078 0x0000011b, 1079}; 1080 1081#define A_NOT_MSG_OUT 0x00000010 1082static u32 A_NOT_MSG_OUT_used[] __attribute((unused)) = { 1083}; 1084 1085#define A_NOT_MSG_OUT_AFTER_SELECTION 0x00000110 1086static u32 A_NOT_MSG_OUT_AFTER_SELECTION_used[] __attribute((unused)) = { 1087 0x00000007, 1088}; 1089 1090#define A_PARITY_ERROR_MSG 0x00000009 1091static u32 A_PARITY_ERROR_MSG_used[] __attribute((unused)) = { 1092}; 1093 1094#define A_REJECT_MSG 0x00000007 1095static u32 A_REJECT_MSG_used[] __attribute((unused)) = { 1096}; 1097 1098#define A_REJECT_MSG_BEFORE_CMD 0x00000270 1099static u32 A_REJECT_MSG_BEFORE_CMD_used[] __attribute((unused)) = { 1100}; 1101 1102#define A_REJECT_MSG_R 0x00000070 1103static u32 A_REJECT_MSG_R_used[] __attribute((unused)) = { 1104}; 1105 1106#define A_RESELECTED_DURING_SELECTION 0x00001000 1107static u32 A_RESELECTED_DURING_SELECTION_used[] __attribute((unused)) = { 1108 0x0000000b, 1109}; 1110 1111#define A_RESELECTION_IDENTIFIED 0x00001003 1112static u32 A_RESELECTION_IDENTIFIED_used[] __attribute((unused)) = { 1113 0x00000011, 1114 0x00000015, 1115}; 1116 1117#define A_RESTORE_DATA_PTRS_MSG 0x00000003 1118static u32 A_RESTORE_DATA_PTRS_MSG_used[] __attribute((unused)) = { 1119 0x0000008e, 1120 0x00000098, 1121 0x000000b4, 1122 0x000000dc, 1123 0x00000100, 1124}; 1125 1126#define A_ReceiveMsgAddress 0x00000000 1127static 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, 1144}; 1145 1146#define A_SAVE_DATA_PTRS_MSG 0x00000002 1147static u32 A_SAVE_DATA_PTRS_MSG_used[] __attribute((unused)) = { 1148 0x0000008c, 1149 0x00000096, 1150 0x000000b2, 1151 0x000000da, 1152 0x000000fe, 1153}; 1154 1155#define A_SDTR_MSG 0x00000001 1156static u32 A_SDTR_MSG_used[] __attribute((unused)) = { 1157}; 1158 1159#define A_SDTR_MSG_AFTER_CMD 0x00000360 1160static u32 A_SDTR_MSG_AFTER_CMD_used[] __attribute((unused)) = { 1161}; 1162 1163#define A_SDTR_MSG_BEFORE_CMD 0x00000260 1164static u32 A_SDTR_MSG_BEFORE_CMD_used[] __attribute((unused)) = { 1165}; 1166 1167#define A_SDTR_MSG_R 0x00000060 1168static u32 A_SDTR_MSG_R_used[] __attribute((unused)) = { 1169}; 1170 1171#define A_SGScriptStartAddress 0x00000000 1172static u32 A_SGScriptStartAddress_used[] __attribute((unused)) = { 1173 0x000000bf, 1174 0x000000cf, 1175}; 1176 1177#define A_SIMPLE_TAG_MSG 0x00000020 1178static u32 A_SIMPLE_TAG_MSG_used[] __attribute((unused)) = { 1179}; 1180 1181#define A_StatusAddress 0x00000000 1182static u32 A_StatusAddress_used[] __attribute((unused)) = { 1183 0x00000119, 1184}; 1185 1186#define A_TWO_BYTE_MSG 0x00000020 1187static u32 A_TWO_BYTE_MSG_used[] __attribute((unused)) = { 1188 0x0000002c, 1189}; 1190 1191#define A_TWO_BYTE_MSG_MASK 0x0000000f 1192static u32 A_TWO_BYTE_MSG_MASK_used[] __attribute((unused)) = { 1193 0x0000002c, 1194}; 1195 1196#define A_UNEXPECTED_MSG 0x00000040 1197static u32 A_UNEXPECTED_MSG_used[] __attribute((unused)) = { 1198}; 1199 1200#define A_UNEXPECTED_MSG_BEFORE_CMD 0x00000240 1201static u32 A_UNEXPECTED_MSG_BEFORE_CMD_used[] __attribute((unused)) = { 1202}; 1203 1204#define A_UNEXPECTED_PHASE 0x00000020 1205static u32 A_UNEXPECTED_PHASE_used[] __attribute((unused)) = { 1206}; 1207 1208#define A_UNEXPECTED_PHASE_AFTER_CMD 0x00000320 1209static u32 A_UNEXPECTED_PHASE_AFTER_CMD_used[] __attribute((unused)) = { 1210 0x00000083, 1211}; 1212 1213#define A_UNEXPECTED_PHASE_AFTER_DATA_IN 0x00000520 1214static u32 A_UNEXPECTED_PHASE_AFTER_DATA_IN_used[] __attribute((unused)) = { 1215 0x000000c9, 1216}; 1217 1218#define A_UNEXPECTED_PHASE_AFTER_DATA_OUT 0x00000620 1219static u32 A_UNEXPECTED_PHASE_AFTER_DATA_OUT_used[] __attribute((unused)) = { 1220 0x000000d5, 1221}; 1222 1223#define A_UNEXPECTED_PHASE_BEFORE_CMD 0x00000220 1224static u32 A_UNEXPECTED_PHASE_BEFORE_CMD_used[] __attribute((unused)) = { 1225 0x00000077, 1226}; 1227 1228#define A_WDTR_MSG 0x00000003 1229static u32 A_WDTR_MSG_used[] __attribute((unused)) = { 1230}; 1231 1232#define A_WDTR_MSG_AFTER_CMD 0x000003a0 1233static u32 A_WDTR_MSG_AFTER_CMD_used[] __attribute((unused)) = { 1234}; 1235 1236#define A_WDTR_MSG_R 0x000000a0 1237static u32 A_WDTR_MSG_R_used[] __attribute((unused)) = { 1238}; 1239 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 1262static 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, 1319}; 1320 1321static struct { 1322 u32 offset; 1323 void *address; 1324} EXTERNAL_PATCHES[] __attribute((unused)) = { 1325}; 1326 1327static u32 INSTRUCTIONS __attribute((unused)) = 149; 1328static u32 PATCHES __attribute((unused)) = 56; 1329static u32 EXTERNAL_PATCHES_LEN __attribute((unused)) = 0; 1330