📄 atapiio.cod
字号:
; 367 : if (dwCount == 1) {
000d0 e3540001 cmp r4, #1
000d4 |$L33335|
; 368 : DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:ReadBuffer - reading one word!!!\r\n")));
; 369 : m_wNextByte = (WORD) *pBuffer; // Save byte for the next SG if
000d4 05d52000 ldreqb r2, [r5]
000d8 02863c06 addeq r3, r6, #6, 24
000dc 01c328b0 streqh r2, [r3, #0x80]
000e0 |$L32962|
; 370 : }
; 371 :
; 372 : DEBUGMSG( ZONE_IO, (TEXT("ATAPI:WriteBuffer Exit Status: %x\r\n"),GetAltStatus()));
; 373 : }
000e0 e28dd004 add sp, sp, #4
000e4 e8bd40f0 ldmia sp!, {r4 - r7, lr}
000e8 e12fff1e bx lr
000ec |$M33337|
ENDP ; |?WriteBuffer@CDisk@@QAAXPAEK@Z|, CDisk::WriteBuffer
EXPORT |?SetTransferMode@CDisk@@QAAHE@Z| ; CDisk::SetTransferMode
IMPORT |?ResetController@CDisk@@QAAHH@Z| ; CDisk::ResetController
; File c:\wince500\platform\bvdmain\drivers\atapi\diskmain.h
00000 AREA |.text| { |?SetTransferMode@CDisk@@QAAHE@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?SetTransferMode@CDisk@@QAAHE@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?SetTransferMode@CDisk@@QAAHE@Z| } ; comdat associative
|$T33374| DCD |$L33373|
DCD 0x40004a01
; Function compile flags: /Ogsy
; File c:\wince500\platform\bvdmain\drivers\atapi\atapiio.cpp
00000 AREA |.text| { |?SetTransferMode@CDisk@@QAAHE@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?SetTransferMode@CDisk@@QAAHE@Z| PROC ; CDisk::SetTransferMode
; 380 : {
00000 |$L33373|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M33371|
00004 e1a04001 mov r4, r1
00008 e1a05000 mov r5, r0
; 381 : BYTE bError, bStatus;
; 382 :
; 383 : //* * * CAMSDB040504 - Try forceing the IDE/ATA mode to
; 384 : //* * * a UDMA mode. (START)
; 385 : //bMode = 0x41;
; 386 : //DEBUGMSG( 1, (TEXT("ATAPI:SetTransferMode(...) FORCING mode to Mode=%02X\r\n"), bMode));
; 387 : //* * * CAMSDB040504 - Try forceing the IDE/ATA mode to
; 388 : //* * * a UDMA mode. (START)
; 389 :
; 390 : SelectDevice();
0000c eb000000 bl |?SelectDevice@CDisk@@QAAXXZ|
; 391 :
; 392 : WaitForDisc(WAIT_TYPE_NOT_BUSY, 100);
00010 e3a03000 mov r3, #0
00014 e3a02064 mov r2, #0x64
00018 e3a01002 mov r1, #2
0001c e1a00005 mov r0, r5
00020 eb000000 bl |?WaitForDisc@CDisk@@QAAHEKK@Z|
; 393 : WaitForDisc(WAIT_TYPE_READY, 1000);
00024 e3a03000 mov r3, #0
00028 e3a02ffa mov r2, #0xFA, 30
0002c e3a01003 mov r1, #3
00030 e1a00005 mov r0, r5
00034 eb000000 bl |?WaitForDisc@CDisk@@QAAHEKK@Z|
; 394 : WaitOnBusy(TRUE);
00038 e3a01001 mov r1, #1
0003c e1a00005 mov r0, r5
00040 eb000000 bl |?WaitOnBusy@CDisk@@QAAEH@Z|
; 395 :
; 396 : SelectDevice();
00044 e1a00005 mov r0, r5
00048 eb000000 bl |?SelectDevice@CDisk@@QAAXXZ|
; 397 :
; 398 : WriteFeature(ATA_SET_TRANSFER_MODE);
0004c e3a00183 mov r0, #0x83, 2
00050 e2400696 sub r0, r0, #0x96, 12
00054 e3a01003 mov r1, #3
00058 eb000000 bl WRITE_PORT_UCHAR
; 399 : WriteSectorCount( bMode);
0005c e59f00c0 ldr r0, [pc, #0xC0]
00060 e1a01004 mov r1, r4
00064 eb000000 bl WRITE_PORT_UCHAR
; 400 : WriteSectorNumber(0);
00068 e59f00b0 ldr r0, [pc, #0xB0]
0006c e3a01000 mov r1, #0
00070 eb000000 bl WRITE_PORT_UCHAR
; 401 : WriteLowCount(0);
00074 e59f00a0 ldr r0, [pc, #0xA0]
00078 e3a01000 mov r1, #0
0007c eb000000 bl WRITE_PORT_UCHAR
; 402 : WriteHighCount(0);
00080 e59f0090 ldr r0, [pc, #0x90]
00084 e3a01000 mov r1, #0
00088 eb000000 bl WRITE_PORT_UCHAR
; 403 : WriteCommand( IDE_COMMAND_SET_FEATURE);
0008c e3a010ef mov r1, #0xEF
00090 e1a00005 mov r0, r5
00094 eb000000 bl |?WriteCommand@CDisk@@QAAXE@Z|
; 404 :
; 405 : SelectDevice();
00098 e1a00005 mov r0, r5
0009c eb000000 bl |?SelectDevice@CDisk@@QAAXXZ|
; 406 : WaitOnBusy(TRUE);
000a0 e3a01001 mov r1, #1
000a4 e1a00005 mov r0, r5
000a8 eb000000 bl |?WaitOnBusy@CDisk@@QAAEH@Z|
; 407 : //
; 408 : // Set Default PIO mode
; 409 : //
; 410 : SelectDevice();
000ac e1a00005 mov r0, r5
000b0 eb000000 bl |?SelectDevice@CDisk@@QAAXXZ|
; 411 : WaitForDisc(WAIT_TYPE_NOT_BUSY, 200);
000b4 e3a03000 mov r3, #0
000b8 e3a020c8 mov r2, #0xC8
000bc e3a01002 mov r1, #2
000c0 e1a00005 mov r0, r5
000c4 eb000000 bl |?WaitForDisc@CDisk@@QAAHEKK@Z|
; 412 :
; 413 : bStatus = GetBaseStatus();
000c8 e59f0044 ldr r0, [pc, #0x44]
000cc eb000000 bl READ_PORT_UCHAR
000d0 e1a04000 mov r4, r0
; 414 : bError = GetError();
000d4 e3a00183 mov r0, #0x83, 2
000d8 e2400696 sub r0, r0, #0x96, 12
000dc eb000000 bl READ_PORT_UCHAR
; 415 : DEBUGMSG( 1, (TEXT("ATAPI:SetTransferMode Mode=%02X Status=%02X Error=%02X\r\n"), bMode, bStatus, bError));
; 416 : if ((bStatus & 0x1) && (bError & 0x4)) {
000e0 e3140001 tst r4, #1
000e4 0a000007 beq |$L32973|
000e8 e3100004 tst r0, #4
000ec 0a000005 beq |$L32973|
; 417 : ResetController(FALSE);
000f0 e3a01000 mov r1, #0
000f4 e1a00005 mov r0, r5
000f8 eb000000 bl |?ResetController@CDisk@@QAAHH@Z|
; 418 : return FALSE;
000fc e3a00000 mov r0, #0
; 428 : }
00100 e8bd4030 ldmia sp!, {r4, r5, lr}
00104 e12fff1e bx lr
00108 |$L32973|
; 419 : }
; 420 :
; 421 : //* * * CAMSDB04/05/04 - Re-print capabilities after forced mode above (START)
; 422 : //DEBUGMSG( 1, (TEXT("* * * ATAPI:Doing AnalyzeDeviceCapabilities() again START.\r\n")));
; 423 : //AnalyzeDeviceCapabilities();
; 424 : //DEBUGMSG( 1, (TEXT("* * * ATAPI:Doing AnalyzeDeviceCapabilities() again END.\r\n")));
; 425 : //* * * CAMSDB04/05/04 - Re-print capabilities after forced mode above (END)
; 426 :
; 427 : return TRUE;
00108 e3a00001 mov r0, #1
; 428 : }
0010c e8bd4030 ldmia sp!, {r4, r5, lr}
00110 e12fff1e bx lr
00114 |$L33376|
00114 b6a000e0 DCD 0xb6a000e0
00118 b6a000a0 DCD 0xb6a000a0
0011c b6a00080 DCD 0xb6a00080
00120 b6a00060 DCD 0xb6a00060
00124 b6a00040 DCD 0xb6a00040
00128 |$M33372|
ENDP ; |?SetTransferMode@CDisk@@QAAHE@Z|, CDisk::SetTransferMode
EXPORT |?SendIOCommand@CDisk@@QAAHKKE@Z| ; CDisk::SendIOCommand
IMPORT |__imp___rt_udiv|
; File c:\wince500\platform\bvdmain\drivers\atapi\diskmain.h
00000 AREA |.text| { |?SendIOCommand@CDisk@@QAAHKKE@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?SendIOCommand@CDisk@@QAAHKKE@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?SendIOCommand@CDisk@@QAAHKKE@Z| } ; comdat associative
|$T33430| DCD |$L33429|
DCD 0x40006001
; Function compile flags: /Ogsy
; File c:\wince500\platform\bvdmain\drivers\atapi\atapiio.cpp
00000 AREA |.text| { |?SendIOCommand@CDisk@@QAAHKKE@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?SendIOCommand@CDisk@@QAAHKKE@Z| PROC ; CDisk::SendIOCommand
; 14 : {
00000 |$L33429|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 |$M33427|
00004 e1a07003 mov r7, r3
00008 e1a04002 mov r4, r2
0000c e1a06001 mov r6, r1
00010 e1a05000 mov r5, r0
; 15 : volatile ULONG ulIdeCtrl;
; 16 :
; 17 : //DEBUGMSG( ZONE_IO, (TEXT("ATAPI:SendIOCommand - Sector %d SectorsLeft %x Command %x\r\n"), dwStartSector,dwNumberOfSectors,bCmd));
; 18 :
; 19 : //* * * CAMSDB - Changed the zone (START)
; 20 : DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:SendIOCommand - Sector %d SectorsLeft %x Command %x\r\n"), dwStartSector,dwNumberOfSectors,bCmd));
; 21 : //* * * CAMSDB - Changed the zone (END)
; 22 :
; 23 : SelectDevice();
00014 eb000000 bl |?SelectDevice@CDisk@@QAAXXZ|
; 24 :
; 25 : if (WaitOnBusy(FALSE))
00018 e3a01000 mov r1, #0
0001c e1a00005 mov r0, r5
00020 eb000000 bl |?WaitOnBusy@CDisk@@QAAEH@Z|
00024 e3500000 cmp r0, #0
; 26 : {
; 27 : //* * * CAMSDB - Changed the zone (START)
; 28 : //DEBUGMSG( ZONE_IO, (TEXT("ATAPI:SendIOCommand - Can't send a command!!! Status:%x Error:%x \r\n"), GetAltStatus(),GetError()));
; 29 : DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:SendIOCommand - Can't send a command!!! Status:%x Error:%x \r\n"), GetAltStatus(),GetError()));
; 30 : //* * * CAMSDB - Changed the zone (END)
; 31 :
; 32 : //* * * CAMSDB - Changed the zone (START)
; 33 : DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:SendIOCommand BAD EXIT\r\n")));
; 34 : //* * * CAMSDB - Changed the zone (END)
; 35 :
; 36 : return (FALSE);
00028 13a00000 movne r0, #0
; 87 : }
0002c 18bd43f0 ldmneia sp!, {r4 - r9, lr}
00030 112fff1e bxne lr
; 37 : }
; 38 :
; 39 : //RETAILMSG(1,(TEXT("Test-------------------\r\n")));
; 40 :
; 41 : GetBaseStatus();
00034 e59f0140 ldr r0, [pc, #0x140]
00038 eb000000 bl READ_PORT_UCHAR
; 42 :
; 43 : //ulIdeCtrl = *IDE_CTRL;
; 44 :
; 45 : //
; 46 : // To transfer 256 Sectors set Sector Count Register to 0.
; 47 : //
; 48 : if(dwNumberOfSectors == MAX_SECT_PER_COMMAND)
0003c e3540c01 cmp r4, #1, 24
; 49 : dwNumberOfSectors = 0;
00040 03a04000 moveq r4, #0
; 50 :
; 51 :
; 52 : WriteSectorCount((BYTE)dwNumberOfSectors);
00044 e59f012c ldr r0, [pc, #0x12C]
00048 e20410ff and r1, r4, #0xFF
0004c eb000000 bl WRITE_PORT_UCHAR
; 53 :
; 54 : if (m_fLBAMode == TRUE)
00050 e5953678 ldr r3, [r5, #0x678]
00054 e3530001 cmp r3, #1
00058 1a000011 bne |$L32802|
; 55 : {
; 56 : //RETAILMSG(1,(TEXT("Test-2222222222------------------\r\n")));
; 57 : WriteSectorNumber( (BYTE)dwStartSector);
0005c e59f0110 ldr r0, [pc, #0x110]
00060 e20610ff and r1, r6, #0xFF
00064 eb000000 bl WRITE_PORT_UCHAR
; 58 : WriteLowCount((BYTE)(dwStartSector >> 8));
00068 e59f0100 ldr r0, [pc, #0x100]
0006c e1a03426 mov r3, r6, lsr #8
00070 e20310ff and r1, r3, #0xFF
00074 eb000000 bl WRITE_PORT_UCHAR
; 59 : WriteHighCount((BYTE)(dwStartSector >> 16));
00078 e59f00ec ldr r0, [pc, #0xEC]
0007c e1a03826 mov r3, r6, lsr #16
00080 e20310ff and r1, r3, #0xFF
00084 eb000000 bl WRITE_PORT_UCHAR
; 60 : WriteDriveHeadReg((BYTE)((dwStartSector >> 24) | ATA_HEAD_LBA_MODE) | ((m_dwDevice == 0 ) ? ATA_HEAD_DRIVE_1 : ATA_HEAD_DRIVE_2));
00088 e595364c ldr r3, [r5, #0x64C]
0008c e3530000 cmp r3, #0
00090 03a030a0 moveq r3, #0xA0
00094 13a030b0 movne r3, #0xB0
00098 e1833c26 orr r3, r3, r6, lsr #24
0009c e38330e0 orr r3, r3, #0xE0
; 61 :
; 62 : } else { // translate LBA to CHS format
000a0 ea000026 b |$L33426|
000a4 |$L32802|
; 63 :
; 64 : DWORD dwSectors = m_DiskInfo.di_sectors;
; 65 : DWORD dwHeads = m_DiskInfo.di_heads;
; 66 :
; 67 : WriteSectorNumber((BYTE)((dwStartSector % dwSectors) + 1));
000a4 e59f30bc ldr r3, [pc, #0xBC]
000a8 e5954670 ldr r4, [r5, #0x670]
000ac e595866c ldr r8, [r5, #0x66C]
000b0 e5933000 ldr r3, [r3]
000b4 e1a00004 mov r0, r4
000b8 e1a01006 mov r1, r6
000bc e1a0e00f mov lr, pc
000c0 e12fff13 bx r3
000c4 e1a09000 mov r9, r0
000c8 e59f00a4 ldr r0, [pc, #0xA4]
000cc e2813001 add r3, r1, #1
000d0 e20310ff and r1, r3, #0xFF
000d4 eb000000 bl WRITE_PORT_UCHAR
; 68 : WriteLowCount((BYTE) (dwStartSector /(dwSectors*dwHeads)));
000d8 e59f3088 ldr r3, [pc, #0x88]
000dc e1a01006 mov r1, r6
000e0 e0000498 mul r0, r8, r4
000e4 e5933000 ldr r3, [r3]
000e8 e1a0e00f mov lr, pc
000ec e12fff13 bx r3
000f0 e1a04000 mov r4, r0
000f4 e59f0074 ldr r0, [pc, #0x74]
000f8 e20410ff and r1, r4, #0xFF
000fc eb000000 bl WRITE_PORT_UCHAR
; 69 : WriteHighCount((BYTE)((dwStartSector /(dwSectors*dwHeads)) >> 8));
00100 e59f0064 ldr r0, [pc, #0x64]
00104 e1a03424 mov r3, r4, lsr #8
00108 e20310ff and r1, r3, #0xFF
0010c eb000000 bl WRITE_PORT_UCHAR
; 70 : WriteDriveHeadReg((BYTE)(((dwStartSector/dwSectors)% dwHeads) | ((m_dwDevice == 0 ) ? ATA_HEAD_DRIVE_1 : ATA_HEAD_DRIVE_2)));
00110 e595364c ldr r3, [r5, #0x64C]
00114 e1a00008 mov r0, r8
00118 e1a01009 mov r1, r9
0011c e3530000 cmp r3, #0
00120 e59f3040 ldr r3, [pc, #0x40]
00124 03a040a0 moveq r4, #0xA0
00128 13a040b0 movne r4, #0xB0
0012c e5933000 ldr r3, [r3]
00130 e1a0e00f mov lr, pc
00134 e12fff13 bx r3
00138 e1a02000 mov r2, r0
0013c e1843001 orr r3, r4, r1
00140 |$L33426|
00140 e59f001c ldr r0, [pc, #0x1C]
00144 e20310ff and r1, r3, #0xFF
00148 eb000000 bl WRITE_PORT_UCHAR
; 71 : }
; 72 :
; 73 :
; 74 : //RETAILMSG(1,(TEXT("Test555555555555-------------------\r\n")));
; 75 :
; 76 : //* * * CAMSDB - Took this out for test, put it back 04/20/04 (START)
; 77 : WriteCommand(bCmd);
0014c e1a01007 mov r1, r7
00150 e1a00005 mov r0, r5
00154 eb000000 bl |?WriteCommand@CDisk@@QAAXE@Z|
; 78 : //* * * CAMSDB - Took this out for test, put it back 04/20/04 (END)
; 79 :
; 80 : //* * * CAMSDB - Changed the zone (START)
; 81 : DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:SendIOCommand GOOD EXIT\r\n")));
; 82 : //* * * CAMSDB - Changed the zone (END)
; 83 :
; 84 : //RETAILMSG(1,(TEXT("Test444444444444444-------------------\r\n")));
; 85 :
; 86 : return (TRUE);
00158 e3a00001 mov r0, #1
; 87 : }
0015c e8bd43f0 ldmia sp!, {r4 - r9, lr}
00160 e12fff1e bx lr
00164 |$L33432|
00164 b6a000c0 DCD 0xb6a000c0
00168 00000000 DCD |__imp___rt_udiv|
0016c b6a000a0 DCD 0xb6a000a0
00170 b6a00080 DCD 0xb6a00080
00174 b6a00060 DCD 0xb6a00060
00178 b6a00040 DCD 0xb6a00040
0017c b6a000e0 DCD 0xb6a000e0
00180 |$M33428|
ENDP ; |?SendIOCommand@CDisk@@QAAHKKE@Z|, CDisk::SendIOCommand
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -