📄 diskmain.cod
字号:
; 544 : // figure out all the DMA transfer mode this device supports
; 545 : //
; 546 : dwCurrentMode = 0;
; 547 :
; 548 : //
; 549 : // check singleword DMA timing
; 550 : //
; 551 : dwCycleTime = UNINITIALIZED_CYCLE_TIME;
; 552 : dwBestXferMode = UNINITIALIZED_TRANSFER_MODE;
; 553 :
; 554 : if (m_Id.SingleDmaModesSupported) {
000c0 e5d034c0 ldrb r3, [r0, #0x4C0]
000c4 e5804690 str r4, [r0, #0x690]
000c8 e580e6a4 str lr, [r0, #0x6A4]
000cc e3530000 cmp r3, #0
000d0 e3a0e000 mov lr, #0
000d4 e3e02000 mvn r2, #0
000d8 e3e04000 mvn r4, #0
000dc 0a000016 beq |$L32932|
; 555 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilitiestarget %d IdentifyData SingleDmaModesSupported = 0x%x\r\n"),
; 556 : m_dwDevice,
; 557 : m_Id.SingleDmaModesSupported));
; 558 :
; 559 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilitiestarget %d IdentifyData SingleWordDMAActive = 0x%x\r\n"),
; 560 : m_dwDevice,
; 561 : m_Id.SingleDmaTransferActive));
; 562 :
; 563 : if (m_Id.SingleDmaModesSupported & (1 << 0)) {
000e0 e3130001 tst r3, #1
; 564 : dwCycleTime = SWDMA_MODE0_CYCLE_TIME;
000e4 13a02d0f movne r2, #0xF, 26
; 565 : dwXferMode |= SWDMA_MODE0;
000e8 13811020 orrne r1, r1, #0x20
; 566 : dwBestXferMode = 0;
000ec 13a04000 movne r4, #0
; 567 : }
; 568 : if (m_Id.SingleDmaModesSupported & (1 << 1)) {
000f0 e3130002 tst r3, #2
; 569 : dwCycleTime = SWDMA_MODE1_CYCLE_TIME;
000f4 13a02e1e movne r2, #0x1E, 28
; 570 : dwXferMode |= SWDMA_MODE1;
000f8 13811040 orrne r1, r1, #0x40
; 571 : dwBestXferMode = 1;
000fc 13a04001 movne r4, #1
; 572 : }
; 573 : if (m_Id.SingleDmaModesSupported & (1 << 2)) {
00100 e3130004 tst r3, #4
; 574 : dwCycleTime = SWDMA_MODE2_CYCLE_TIME;
; 575 : dwXferMode |= SWDMA_MODE2;
; 576 : dwBestXferMode = 2;
; 577 : }
; 578 :
; 579 : if (m_Id.SingleDmaTransferActive) {
00104 e5d034c1 ldrb r3, [r0, #0x4C1]
00108 13a020f0 movne r2, #0xF0
0010c 13811080 orrne r1, r1, #0x80
00110 13a04002 movne r4, #2
00114 e3530000 cmp r3, #0
00118 0a000007 beq |$L32932|
; 580 :
; 581 : if (m_Id.SingleDmaTransferActive & IDD_SWDMA_MODE2_ACTIVE) {
0011c e3130004 tst r3, #4
; 582 : dwCurrentMode = SWDMA_MODE2;
00120 13a0e080 movne lr, #0x80
00124 1a000004 bne |$L32932|
; 583 : } else if (m_Id.SingleDmaTransferActive & IDD_SWDMA_MODE1_ACTIVE) {
00128 e3130002 tst r3, #2
; 584 : dwCurrentMode = SWDMA_MODE1;
0012c 13a0e040 movne lr, #0x40
00130 1a000001 bne |$L32932|
; 585 : } else if (m_Id.SingleDmaTransferActive & IDD_SWDMA_MODE0_ACTIVE) {
00134 e3130001 tst r3, #1
; 586 : dwCurrentMode = SWDMA_MODE0;
00138 13a0e020 movne lr, #0x20
0013c |$L32932|
; 587 : }
; 588 : }
; 589 : }
; 590 :
; 591 : m_dwBestSwDmaCycleTime = dwCycleTime;
; 592 : m_dwBestSwDmaMode = dwBestXferMode;
; 593 :
; 594 : //
; 595 : // check multiword DMA timing
; 596 : //
; 597 : dwCycleTime = UNINITIALIZED_CYCLE_TIME;
; 598 : dwBestXferMode = UNINITIALIZED_TRANSFER_MODE;
; 599 :
; 600 : if (m_Id.MultiDmaModesSupported) {
0013c e5d034c2 ldrb r3, [r0, #0x4C2]
00140 e58046a8 str r4, [r0, #0x6A8]
00144 e5802694 str r2, [r0, #0x694]
00148 e3530000 cmp r3, #0
0014c e3e04000 mvn r4, #0
00150 e3e05000 mvn r5, #0
00154 0a000016 beq |$L32944|
; 601 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilitiestarget %d IdentifyData MultiWordDMASupport = 0x%x\r\n"),
; 602 : m_dwDevice,
; 603 : m_Id.MultiDmaModesSupported));
; 604 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilitiestarget %d IdentifyData MultiWordDMAActive = 0x%x\r\n"),
; 605 : m_dwDevice,
; 606 : m_Id.SingleDmaTransferActive));
; 607 :
; 608 : if (m_Id.MultiDmaModesSupported & (1 << 0)) {
00158 e3130001 tst r3, #1
; 609 : dwCycleTime = MWDMA_MODE0_CYCLE_TIME;
0015c 13a04e1e movne r4, #0x1E, 28
; 610 : dwXferMode |= MWDMA_MODE0;
00160 13811c01 orrne r1, r1, #1, 24
; 611 : dwBestXferMode = 0;
00164 13a05000 movne r5, #0
; 612 : }
; 613 :
; 614 : if (m_Id.MultiDmaModesSupported & (1 << 1)) {
00168 e3130002 tst r3, #2
; 615 : dwCycleTime = MWDMA_MODE1_CYCLE_TIME;
0016c 13a04096 movne r4, #0x96
; 616 : dwXferMode |= MWDMA_MODE1;
00170 13811c02 orrne r1, r1, #2, 24
; 617 : dwBestXferMode = 1;
00174 13a05001 movne r5, #1
; 618 : }
; 619 :
; 620 : if (m_Id.MultiDmaModesSupported & (1 << 2)) {
00178 e3130004 tst r3, #4
; 621 : dwCycleTime = MWDMA_MODE2_CYCLE_TIME;
; 622 : dwXferMode |= MWDMA_MODE2;
; 623 : dwBestXferMode = 2;
; 624 : }
; 625 :
; 626 : if (m_Id.MultiDmaTransferActive) {
0017c e5d034c3 ldrb r3, [r0, #0x4C3]
00180 13a04078 movne r4, #0x78
00184 13811b01 orrne r1, r1, #1, 22
00188 13a05002 movne r5, #2
0018c e3530000 cmp r3, #0
00190 0a000007 beq |$L32944|
; 627 : if (m_Id.MultiDmaTransferActive & IDD_MWDMA_MODE2_ACTIVE) {
00194 e3130004 tst r3, #4
; 628 : dwCurrentMode = MWDMA_MODE2;
00198 13a0eb01 movne lr, #1, 22
0019c 1a000004 bne |$L32944|
; 629 : } else if (m_Id.MultiDmaTransferActive & IDD_MWDMA_MODE1_ACTIVE) {
001a0 e3130002 tst r3, #2
; 630 : dwCurrentMode = MWDMA_MODE1;
001a4 13a0ec02 movne lr, #2, 24
001a8 1a000001 bne |$L32944|
; 631 : } else if (m_Id.MultiDmaTransferActive & IDD_MWDMA_MODE0_ACTIVE) {
001ac e3130001 tst r3, #1
; 632 : dwCurrentMode = MWDMA_MODE0;
001b0 13a0ec01 movne lr, #1, 24
001b4 |$L32944|
; 633 : }
; 634 : }
; 635 : }
; 636 :
; 637 : if (m_Id.TranslationFieldsValid & (1 << 1)) {
001b4 e3570000 cmp r7, #0
001b8 0a000008 beq |$L32947|
; 638 :
; 639 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilitiestarget %d IdentifyData word 64-70 are valid\r\n"), m_dwDevice));
; 640 :
; 641 : if (m_Id.MinimumMultiwordDMATime &&
; 642 : m_Id.ManuRecomendedDMATime) {
001bc e5d024c6 ldrb r2, [r0, #0x4C6]
001c0 e5d034c7 ldrb r3, [r0, #0x4C7]
001c4 e1923403 orrs r3, r2, r3, lsl #8
; 643 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilitiestarget %d IdentifyData MinimumPIOxferTimeWOFlow = 0x%x\r\n"),
; 644 : m_dwDevice,
; 645 : m_Id.MinimumPIOxferTimeWOFlow));
; 646 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilitiestarget %d IdentifyData ManuRecomendedDMATime = 0x%x\r\n"),
; 647 : m_dwDevice,
; 648 : m_Id.ManuRecomendedDMATime));
; 649 : dwCycleTime = m_Id.MinimumPIOxferTimeIORDYFlow;
; 650 : }
; 651 : }
; 652 :
; 653 : m_dwBestMwDmaCycleTime = dwCycleTime;
; 654 : m_dwBestMwDmaMode = dwBestXferMode;
; 655 :
; 656 : //
; 657 : // figure out the ultra DMA timing the device supports
; 658 : //
; 659 : dwCycleTime = UNINITIALIZED_CYCLE_TIME;
; 660 : dwBestXferMode = UNINITIALIZED_TRANSFER_MODE;
; 661 :
; 662 : if (m_Id.TranslationFieldsValid & (1 << 2)) {
; 663 : if (m_Id.UltraDMASupport) {
; 664 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilitiestarget %d IdentifyData UltraDMASupport = 0x%x\r\n"),
; 665 : m_dwDevice,
; 666 : m_Id.UltraDMASupport));
; 667 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilitiestarget %d IdentifyData UltraDMAActive = 0x%x\r\n"),
; 668 : m_dwDevice,
; 669 : m_Id.UltraDMAActive));
; 670 : if (m_Id.UltraDMASupport & (1 << 0)) {
; 671 : dwCycleTime = UDMA_MODE0_CYCLE_TIME;
; 672 : dwXferMode |= UDMA_MODE0;
; 673 : dwBestXferMode = 0;
; 674 : }
; 675 : if (m_Id.UltraDMASupport & (1 << 1)) {
; 676 : dwCycleTime = UDMA_MODE1_CYCLE_TIME;
; 677 : dwXferMode |= UDMA_MODE1;
; 678 : dwBestXferMode = 1;
; 679 : }
; 680 : if (m_Id.UltraDMASupport & (1 << 2)) {
; 681 : dwCycleTime = UDMA_MODE2_CYCLE_TIME;
; 682 : dwXferMode |= UDMA_MODE2;
; 683 : dwBestXferMode = 2;
; 684 : }
; 685 : if (m_Id.UltraDMASupport & (1 << 3)) {
; 686 : dwCycleTime = UDMA_MODE3_CYCLE_TIME;
; 687 : dwXferMode |= UDMA_MODE3;
; 688 : dwBestXferMode = 3;
; 689 : }
; 690 : if (m_Id.UltraDMASupport & (1 << 4)) {
; 691 : dwCycleTime = UDMA_MODE4_CYCLE_TIME;
; 692 : dwXferMode |= UDMA_MODE4;
; 693 : dwBestXferMode = 4;
; 694 : }
; 695 : }
; 696 :
; 697 : if (m_Id.UltraDMAActive) {
; 698 : if (m_Id.UltraDMAActive & IDD_UDMA_MODE4_ACTIVE) {
; 699 : dwCurrentMode = UDMA_MODE4;
; 700 : } else if (m_Id.UltraDMAActive & IDD_UDMA_MODE3_ACTIVE) {
; 701 : dwCurrentMode = UDMA_MODE3;
; 702 : } else if (m_Id.UltraDMAActive & IDD_UDMA_MODE2_ACTIVE) {
; 703 : dwCurrentMode = UDMA_MODE2;
; 704 : } else if (m_Id.UltraDMAActive & IDD_UDMA_MODE1_ACTIVE) {
; 705 : dwCurrentMode = UDMA_MODE1;
; 706 : } else if (m_Id.UltraDMAActive & IDD_UDMA_MODE0_ACTIVE) {
; 707 : dwCurrentMode = UDMA_MODE0;
; 708 : }
; 709 : }
; 710 : }
; 711 :
; 712 : //
; 713 : // Doesn't really know the ultra dma cycle time
; 714 : //
; 715 : m_dwBestUDmaCycleTime = dwCycleTime;
; 716 : m_dwBestUDmaMode = dwBestXferMode;
; 717 :
; 718 : m_dwTransferModeSupported = dwXferMode;
; 719 : m_dwTransferModeCurrent |= dwCurrentMode;
001c8 15d024c8 ldrneb r2, [r0, #0x4C8]
001cc 15d034c9 ldrneb r3, [r0, #0x4C9]
001d0 11923403 orrnes r3, r2, r3, lsl #8
001d4 15d024cc ldrneb r2, [r0, #0x4CC]
001d8 15d034cd ldrneb r3, [r0, #0x4CD]
001dc 11824403 orrne r4, r2, r3, lsl #8
001e0 |$L32947|
001e0 e5804698 str r4, [r0, #0x698]
001e4 e3e04000 mvn r4, #0
001e8 e58056ac str r5, [r0, #0x6AC]
001ec e3e02000 mvn r2, #0
001f0 e3180004 tst r8, #4
001f4 0a000027 beq |$L32968|
001f8 e5d034f4 ldrb r3, [r0, #0x4F4]
001fc e3530000 cmp r3, #0
00200 0a000013 beq |$L32958|
00204 e3130001 tst r3, #1
00208 13a02078 movne r2, #0x78
0020c 13811b02 orrne r1, r1, #2, 22
00210 13a04000 movne r4, #0
00214 e3130002 tst r3, #2
00218 13a02050 movne r2, #0x50
0021c 13811a01 orrne r1, r1, #1, 20
00220 13a04001 movne r4, #1
00224 e3130004 tst r3, #4
00228 13a0203c movne r2, #0x3C
0022c 13811a02 orrne r1, r1, #2, 20
00230 13a04002 movne r4, #2
00234 e3130008 tst r3, #8
00238 13a0202d movne r2, #0x2D
0023c 13811901 orrne r1, r1, #1, 18
00240 13a04003 movne r4, #3
00244 e3130010 tst r3, #0x10
00248 13a0201e movne r2, #0x1E
0024c 13811902 orrne r1, r1, #2, 18
00250 13a04004 movne r4, #4
00254 |$L32958|
00254 e5d034f5 ldrb r3, [r0, #0x4F5]
00258 e3530000 cmp r3, #0
0025c 0a00000d beq |$L32968|
00260 e3130010 tst r3, #0x10
00264 13a0e902 movne lr, #2, 18
00268 1a00000a bne |$L32968|
0026c e3130008 tst r3, #8
00270 13a0e901 movne lr, #1, 18
00274 1a000007 bne |$L32968|
00278 e3130004 tst r3, #4
0027c 13a0ea02 movne lr, #2, 20
00280 1a000004 bne |$L32968|
00284 e3130002 tst r3, #2
00288 13a0ea01 movne lr, #1, 20
0028c 1a000001 bne |$L32968|
00290 e3130001 tst r3, #1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -