📄 diskmain.cod
字号:
; 512 :
; 513 : if (fIoReadyEnabled) {
00090 e3550000 cmp r5, #0
; 514 : dwCycleTime = m_Id.MinimumPIOxferTimeIORDYFlow;
00094 15d024cc ldrneb r2, [r0, #0x4CC]
00098 15d034cd ldrneb r3, [r0, #0x4CD]
0009c 11824403 orrne r4, r2, r3, lsl #8
; 515 : } else {
; 516 : dwCycleTime = m_Id.MinimumPIOxferTimeWOFlow;
; 517 : }
; 518 :
; 519 : if (m_Id.AdvancedPIOxferreserved & (1 << 0)) {
000a0 e5d034c4 ldrb r3, [r0, #0x4C4]
000a4 01a04006 moveq r4, r6
000a8 e3130001 tst r3, #1
; 520 : dwXferMode |= PIO_MODE3;
000ac 13811008 orrne r1, r1, #8
; 521 : dwBestXferMode = 3;
000b0 13a0e003 movne lr, #3
; 522 : dwCurrentMode = PIO_MODE3;
; 523 : }
; 524 :
; 525 : if (m_Id.AdvancedPIOxferreserved & (1 << 1)) {
000b4 e3130002 tst r3, #2
; 526 : dwXferMode |= PIO_MODE4;
000b8 13811010 orrne r1, r1, #0x10
; 527 : dwBestXferMode = 4;
000bc 13a0e004 movne lr, #4
000c0 |$L32930|
; 528 : dwCurrentMode = PIO_MODE4;
; 529 : }
; 530 :
; 531 : DEBUGMSG( ZONE_INIT, (TEXT("ATAPI:AnalyzeDeviceCapabilities target %d IdentifyData AdvancedPIOModes = 0x%x\r\n"),
; 532 : m_dwDevice,
; 533 : m_Id.AdvancedPIOxferreserved));
; 534 : }
; 535 :
; 536 : ASSERT (dwCycleTime != UNINITIALIZED_CYCLE_TIME);
; 537 : ASSERT (dwXferMode);
; 538 : ASSERT (dwCurrentMode);
; 539 :
; 540 : m_dwBestPioCycleTime = dwCycleTime;
; 541 : m_dwBestPioMode = dwBestXferMode;
; 542 :
; 543 : //
; 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 |$L32946|
; 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 |$L32946|
; 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 |$L32946|
; 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 |$L32946|
; 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 |$L32946|
; 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 |$L32958|
; 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 |$L32958|
; 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 |$L32958|
; 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 |$L32958|
; 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 |$L32958|
; 633 : }
; 634 : }
; 635 : }
; 636 :
; 637 : if (m_Id.TranslationFieldsValid & (1 << 1)) {
001b4 e3570000 cmp r7, #0
001b8 0a000008 beq |$L32961|
; 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 : //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -