From 334f7721dea40b5aaefe6f9cd12108dd3723c23d Mon Sep 17 00:00:00 2001 From: "Marat Zakiyanov (Mario79)" Date: Sat, 26 Aug 2006 16:50:41 +0000 Subject: [PATCH] 1) The search HDD is improved, earlier by search was made reset only CD, now is made reset and HDD also. 2) Are deleted CLI and STI from procedures of reading and writing of sector on HDD. These of commands are replaced by operation with a port [hdbase]+206h, which disables only interruption for IDE. git-svn-id: svn://kolibrios.org@136 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/detect/dev_hdcd.inc | 29 +++++------------------- kernel/trunk/fs/fat32.inc | 39 ++++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/kernel/trunk/detect/dev_hdcd.inc b/kernel/trunk/detect/dev_hdcd.inc index 0c1e4c5970..0275c9f818 100644 --- a/kernel/trunk/detect/dev_hdcd.inc +++ b/kernel/trunk/detect/dev_hdcd.inc @@ -11,42 +11,25 @@ FindHDD: mov [ChannelNumber],1 mov [DiskNumber],0 call FindHDD_3 -; mov ax,[Sector512+176] -; mov [0x40006],ax -; mov ax,[Sector512+126] -; mov [0x40008],ax -; mov ax,[Sector512+128] -; mov [0x40008],ax mov [DiskNumber],1 call FindHDD_3 -; mov al,[Sector512+176] -; mov [0x40007],al inc [ChannelNumber] mov [DiskNumber],0 call FindHDD_3 -; mov al,[Sector512+176] -; mov [0x40008],al mov [DiskNumber],1 call FindHDD_1 -; mov al,[Sector512+176] -; mov [0x40009],al - jmp EndFindHDD FindHDD_1: - call ReadHDD_ID - cmp [DevErrorCode],0 - jne FindHDD_2 - cmp [Sector512+6],word 16 - ja FindHDD_2 - cmp [Sector512+12],word 255 - ja FindHDD_2 - inc byte [0x40001] - jmp FindHDD_2_2 - FindHDD_2: call DeviceReset cmp [DevErrorCode],0 jne FindHDD_2_2 + call ReadHDD_ID + cmp [DevErrorCode],0 + jne FindHDD_2 + inc byte [0x40001] + ret + FindHDD_2: call ReadCD_ID cmp [DevErrorCode],0 jne FindHDD_2_2 diff --git a/kernel/trunk/fs/fat32.inc b/kernel/trunk/fs/fat32.inc index dcc04ab67d..4b583493a8 100644 --- a/kernel/trunk/fs/fat32.inc +++ b/kernel/trunk/fs/fat32.inc @@ -1973,11 +1973,13 @@ hd_read: push eax edx + call disable_ide_int + call wait_for_hd_idle cmp [hd_error],0 jne hd_read_error - cli +; cli xor eax,eax mov edx,[hdbase] inc edx @@ -2003,14 +2005,14 @@ hd_read: inc edx mov al,20h out dx,al ; ATACommand регистр команд - sti +; sti call wait_for_sector_buffer cmp [hd_error],0 jne hd_read_error - cli +; cli push edi shl edi,9 add edi,0x600000+65536 @@ -2019,7 +2021,9 @@ hd_read: cld rep insw pop edi - sti +; sti + + call enable_ide_int pop edx eax blok_read_2: @@ -2039,7 +2043,20 @@ hd_read: return_01: pop edi esi ecx ret - + +disable_ide_int: + mov edx,[hdbase] + add edx,0x206 + mov al,2 + out dx,al + ret + +enable_ide_int: + mov edx,[hdbase] + add edx,0x206 + mov al,0 + out dx,al + ret hd_write: ;----------------------------------------------------------- @@ -2119,11 +2136,13 @@ write_cache: cmp eax,[PARTITION_END] ja danger + call disable_ide_int + call wait_for_hd_idle cmp [hd_error],0 jne hd_write_error - cli +; cli xor eax,eax mov edx,[hdbase] inc edx @@ -2149,7 +2168,7 @@ write_cache: inc edx mov al,30h out dx,al - sti +; sti call wait_for_sector_buffer @@ -2158,7 +2177,7 @@ write_cache: push ecx esi - cli +; cli mov esi,edi shl esi,9 add esi,0x600000+65536 ; esi = from memory position @@ -2166,10 +2185,12 @@ write_cache: mov edx,[hdbase] cld rep outsw - sti +; sti pop esi ecx + call enable_ide_int + danger: does_not_need_writing: