forked from KolibriOS/kolibrios
Some reorganization of code:
1) Grouping of code working with IDE drives 2) Moving messages about the SVN revision and CPU counter to the beginning of the log of the message board. git-svn-id: svn://kolibrios.org@4575 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
5ae0511a52
commit
3dd1f86eac
@ -776,7 +776,29 @@ no_mode_0x12:
|
|||||||
call unmask_timer
|
call unmask_timer
|
||||||
stdcall enable_irq, 2 ; @#$%! PIC
|
stdcall enable_irq, 2 ; @#$%! PIC
|
||||||
stdcall enable_irq, 13 ; co-processor
|
stdcall enable_irq, 13 ; co-processor
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; show SVN version of kernel on the message board
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
mov eax, [version_inf.rev]
|
||||||
|
DEBUGF 1, "K : kernel SVN r%d\n", eax
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; show CPU count on the message board
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
mov eax, [cpu_count]
|
||||||
|
test eax, eax
|
||||||
|
jnz @F
|
||||||
|
mov al, 1 ; at least one CPU
|
||||||
|
@@:
|
||||||
|
DEBUGF 1, "K : %d CPU detected\n", eax
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; detect Floppy drives
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
mov esi, boot_detectfloppy
|
||||||
|
call boot_log
|
||||||
|
include 'detect/dev_fd.inc'
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; START of initialisation IDE ATA code
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
cmp [IDEContrProgrammingInterface], 0
|
cmp [IDEContrProgrammingInterface], 0
|
||||||
je @f
|
je @f
|
||||||
|
|
||||||
@ -796,14 +818,15 @@ no_mode_0x12:
|
|||||||
add dx, 2 ;0x376
|
add dx, 2 ;0x376
|
||||||
out dx, al
|
out dx, al
|
||||||
@@:
|
@@:
|
||||||
|
; show base variables of IDE controller
|
||||||
|
DEBUGF 1, "K : BAR0 %x \n", [IDE_BAR0_val]:4
|
||||||
|
DEBUGF 1, "K : BAR1 %x \n", [IDE_BAR1_val]:4
|
||||||
|
DEBUGF 1, "K : BAR2 %x \n", [IDE_BAR2_val]:4
|
||||||
|
DEBUGF 1, "K : BAR3 %x \n", [IDE_BAR3_val]:4
|
||||||
|
DEBUGF 1, "K : BAR4 %x \n", [IDEContrRegsBaseAddr]:4
|
||||||
|
DEBUGF 1, "K : IDEContrProgrammingInterface %x \n", [IDEContrProgrammingInterface]:4
|
||||||
|
DEBUGF 1, "K : IDE_Interrupt %x \n", [IDE_Interrupt]:4
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
; mov esi, boot_detectdisks
|
|
||||||
; call boot_log
|
|
||||||
;include 'detect/disks.inc'
|
|
||||||
mov esi, boot_detectfloppy
|
|
||||||
call boot_log
|
|
||||||
include 'detect/dev_fd.inc'
|
|
||||||
mov esi, boot_detecthdcd
|
mov esi, boot_detecthdcd
|
||||||
call boot_log
|
call boot_log
|
||||||
include 'detect/dev_hdcd.inc'
|
include 'detect/dev_hdcd.inc'
|
||||||
@ -813,8 +836,132 @@ include 'detect/getcache.inc'
|
|||||||
mov esi, boot_detectpart
|
mov esi, boot_detectpart
|
||||||
call boot_log
|
call boot_log
|
||||||
include 'detect/sear_par.inc'
|
include 'detect/sear_par.inc'
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
;-----------------------------------------------------------------------------
|
||||||
|
mov dx, [IDEContrRegsBaseAddr]
|
||||||
|
; test whether it is our interrupt?
|
||||||
|
add dx, 2
|
||||||
|
in al, dx
|
||||||
|
test al, 100b
|
||||||
|
jz @f
|
||||||
|
; clear Bus Master IDE Status register
|
||||||
|
; clear Interrupt bit
|
||||||
|
out dx, al
|
||||||
|
@@:
|
||||||
|
add dx, 8
|
||||||
|
; test whether it is our interrupt?
|
||||||
|
in al, dx
|
||||||
|
test al, 100b
|
||||||
|
jz @f
|
||||||
|
; clear Bus Master IDE Status register
|
||||||
|
; clear Interrupt bit
|
||||||
|
out dx, al
|
||||||
|
@@:
|
||||||
|
; read status register and remove the interrupt request
|
||||||
|
mov dx, [IDE_BAR0_val] ;0x1F0
|
||||||
|
add dx, 0x7 ;0x1F7
|
||||||
|
in al, dx
|
||||||
|
mov dx, [IDE_BAR2_val] ;0x170
|
||||||
|
add dx, 0x7 ;0x177
|
||||||
|
in al, dx
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
push eax edx
|
||||||
|
mov dx, [IDEContrRegsBaseAddr]
|
||||||
|
xor eax, eax
|
||||||
|
add dx, 2
|
||||||
|
in al, dx
|
||||||
|
DEBUGF 1, "K : Primary Bus Master IDE Status Register %x\n", eax
|
||||||
|
|
||||||
|
add dx, 8
|
||||||
|
in al, dx
|
||||||
|
DEBUGF 1, "K : Secondary Bus Master IDE Status Register %x\n", eax
|
||||||
|
pop edx eax
|
||||||
|
|
||||||
|
cmp [IDEContrRegsBaseAddr], 0
|
||||||
|
setnz [dma_hdd]
|
||||||
|
|
||||||
|
cmp [IDEContrProgrammingInterface], 0
|
||||||
|
je set_interrupts_for_IDE_controllers.continue
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; set interrupts for IDE Controller
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
mov esi, boot_set_int_IDE
|
||||||
|
call boot_log
|
||||||
|
set_interrupts_for_IDE_controllers:
|
||||||
|
mov ax, [IDEContrProgrammingInterface]
|
||||||
|
cmp ax, 0x0180
|
||||||
|
je .pata_ide
|
||||||
|
|
||||||
|
cmp ax, 0x018a
|
||||||
|
jne .sata_ide
|
||||||
|
;--------------------------------------
|
||||||
|
.pata_ide:
|
||||||
|
cmp [IDEContrRegsBaseAddr], 0
|
||||||
|
je .end_set_interrupts
|
||||||
|
|
||||||
|
stdcall attach_int_handler, 14, IDE_irq_14_handler, 0
|
||||||
|
DEBUGF 1, "K : Set IDE IRQ14 return code %x\n", eax
|
||||||
|
stdcall attach_int_handler, 15, IDE_irq_15_handler, 0
|
||||||
|
DEBUGF 1, "K : Set IDE IRQ15 return code %x\n", eax
|
||||||
|
jmp .enable_IDE_interrupt
|
||||||
|
;--------------------------------------
|
||||||
|
.sata_ide:
|
||||||
|
cmp ax, 0x0185
|
||||||
|
je .sata_ide_1
|
||||||
|
|
||||||
|
cmp ax, 0x018f
|
||||||
|
jne .end_set_interrupts
|
||||||
|
;--------------------------------------
|
||||||
|
.sata_ide_1:
|
||||||
|
cmp [IDEContrRegsBaseAddr], 0
|
||||||
|
je .end_set_interrupts
|
||||||
|
|
||||||
|
mov ax, [IDE_Interrupt]
|
||||||
|
movzx eax, al
|
||||||
|
stdcall attach_int_handler, eax, IDE_common_irq_handler, 0
|
||||||
|
DEBUGF 1, "K : Set IDE IRQ%d return code %x\n", [IDE_Interrupt]:1, eax
|
||||||
|
;--------------------------------------
|
||||||
|
.enable_IDE_interrupt:
|
||||||
|
mov esi, boot_enabling_ide
|
||||||
|
call boot_log
|
||||||
|
; Enable interrupts in IDE controller for DMA
|
||||||
|
mov al, 0
|
||||||
|
mov ah, [DRIVE_DATA+1]
|
||||||
|
test ah, 10100000b
|
||||||
|
jz @f
|
||||||
|
|
||||||
|
DEBUGF 1, "K : IDE CH1 PIO, because ATAPI drive present\n"
|
||||||
|
jmp .ch2_check
|
||||||
|
@@:
|
||||||
|
mov dx, [IDE_BAR1_val] ;0x3F4
|
||||||
|
add dx, 2 ;0x3F6
|
||||||
|
out dx, al
|
||||||
|
DEBUGF 1, "K : IDE CH1 DMA enabled\n"
|
||||||
|
.ch2_check:
|
||||||
|
test ah, 1010b
|
||||||
|
jz @f
|
||||||
|
|
||||||
|
DEBUGF 1, "K : IDE CH2 PIO, because ATAPI drive present\n"
|
||||||
|
jmp .end_set_interrupts
|
||||||
|
@@:
|
||||||
|
mov dx, [IDE_BAR3_val] ;0x374
|
||||||
|
add dx, 2 ;0x376
|
||||||
|
out dx, al
|
||||||
|
DEBUGF 1, "K : IDE CH2 DMA enabled\n"
|
||||||
|
;--------------------------------------
|
||||||
|
.end_set_interrupts:
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
cmp [dma_hdd], 0
|
||||||
|
je .print_pio
|
||||||
|
.print_dma:
|
||||||
|
DEBUGF 1, "K : IDE DMA mode\n"
|
||||||
|
jmp .continue
|
||||||
|
|
||||||
|
.print_pio:
|
||||||
|
DEBUGF 1, "K : IDE PIO mode\n"
|
||||||
|
.continue:
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; END of initialisation IDE ATA code
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
mov esi, boot_init_sys
|
mov esi, boot_init_sys
|
||||||
call boot_log
|
call boot_log
|
||||||
call Parser_params
|
call Parser_params
|
||||||
@ -827,7 +974,6 @@ if ~ defined extended_primary_loader
|
|||||||
include 'boot/rdload.inc'
|
include 'boot/rdload.inc'
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
end if
|
end if
|
||||||
; mov [dma_hdd],1
|
|
||||||
|
|
||||||
if 0
|
if 0
|
||||||
mov ax, [OS_BASE+0x10000+bx_from_load]
|
mov ax, [OS_BASE+0x10000+bx_from_load]
|
||||||
@ -881,34 +1027,7 @@ end if
|
|||||||
|
|
||||||
mov [pci_access_enabled], 1
|
mov [pci_access_enabled], 1
|
||||||
call pci_enum
|
call pci_enum
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
mov dx, [IDEContrRegsBaseAddr]
|
|
||||||
; test whether it is our interrupt?
|
|
||||||
add dx, 2
|
|
||||||
in al, dx
|
|
||||||
test al, 100b
|
|
||||||
jz @f
|
|
||||||
; clear Bus Master IDE Status register
|
|
||||||
; clear Interrupt bit
|
|
||||||
out dx, al
|
|
||||||
@@:
|
|
||||||
add dx, 8
|
|
||||||
; test whether it is our interrupt?
|
|
||||||
in al, dx
|
|
||||||
test al, 100b
|
|
||||||
jz @f
|
|
||||||
; clear Bus Master IDE Status register
|
|
||||||
; clear Interrupt bit
|
|
||||||
out dx, al
|
|
||||||
@@:
|
|
||||||
; read status register and remove the interrupt request
|
|
||||||
mov dx, [IDE_BAR0_val] ;0x1F0
|
|
||||||
add dx, 0x7 ;0x1F7
|
|
||||||
in al, dx
|
|
||||||
mov dx, [IDE_BAR2_val] ;0x170
|
|
||||||
add dx, 0x7 ;0x177
|
|
||||||
in al, dx
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
include "detect/vortex86.inc" ; Vortex86 SoC detection code
|
include "detect/vortex86.inc" ; Vortex86 SoC detection code
|
||||||
|
|
||||||
stdcall load_driver, szVidintel
|
stdcall load_driver, szVidintel
|
||||||
@ -1126,25 +1245,6 @@ if defined debug_com_base
|
|||||||
out dx, al
|
out dx, al
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
mov eax, [version_inf.rev]
|
|
||||||
DEBUGF 1, "K : kernel SVN r%d\n", eax
|
|
||||||
|
|
||||||
mov eax, [cpu_count]
|
|
||||||
test eax, eax
|
|
||||||
jnz @F
|
|
||||||
mov al, 1 ; at least one CPU
|
|
||||||
@@:
|
|
||||||
DEBUGF 1, "K : %d CPU detected\n", eax
|
|
||||||
|
|
||||||
DEBUGF 1, "K : BAR0 %x \n", [IDE_BAR0_val]:4
|
|
||||||
DEBUGF 1, "K : BAR1 %x \n", [IDE_BAR1_val]:4
|
|
||||||
DEBUGF 1, "K : BAR2 %x \n", [IDE_BAR2_val]:4
|
|
||||||
DEBUGF 1, "K : BAR3 %x \n", [IDE_BAR3_val]:4
|
|
||||||
DEBUGF 1, "K : BAR4 %x \n", [IDEContrRegsBaseAddr]:4
|
|
||||||
DEBUGF 1, "K : IDEContrProgrammingInterface %x \n", [IDEContrProgrammingInterface]:4
|
|
||||||
DEBUGF 1, "K : IDE_Interrupt %x \n", [IDE_Interrupt]:4
|
|
||||||
|
|
||||||
; START MULTITASKING
|
; START MULTITASKING
|
||||||
|
|
||||||
; A 'All set - press ESC to start' messages if need
|
; A 'All set - press ESC to start' messages if need
|
||||||
@ -1157,102 +1257,6 @@ if preboot_blogesc
|
|||||||
jne .bll1
|
jne .bll1
|
||||||
end if
|
end if
|
||||||
|
|
||||||
push eax edx
|
|
||||||
mov dx, [IDEContrRegsBaseAddr]
|
|
||||||
xor eax, eax
|
|
||||||
add dx, 2
|
|
||||||
in al, dx
|
|
||||||
DEBUGF 1, "K : Primary Bus Master IDE Status Register %x\n", eax
|
|
||||||
|
|
||||||
add dx, 8
|
|
||||||
in al, dx
|
|
||||||
DEBUGF 1, "K : Secondary Bus Master IDE Status Register %x\n", eax
|
|
||||||
pop edx eax
|
|
||||||
|
|
||||||
cmp [IDEContrRegsBaseAddr], 0
|
|
||||||
setnz [dma_hdd]
|
|
||||||
|
|
||||||
cmp [IDEContrProgrammingInterface], 0
|
|
||||||
je set_interrupts_for_IDE_controllers.continue
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
; set interrupts for IDE Controller
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
mov esi, boot_set_int_IDE
|
|
||||||
call boot_log
|
|
||||||
set_interrupts_for_IDE_controllers:
|
|
||||||
mov ax, [IDEContrProgrammingInterface]
|
|
||||||
cmp ax, 0x0180
|
|
||||||
je .pata_ide
|
|
||||||
|
|
||||||
cmp ax, 0x018a
|
|
||||||
jne .sata_ide
|
|
||||||
;--------------------------------------
|
|
||||||
.pata_ide:
|
|
||||||
cmp [IDEContrRegsBaseAddr], 0
|
|
||||||
je .end_set_interrupts
|
|
||||||
|
|
||||||
stdcall attach_int_handler, 14, IDE_irq_14_handler, 0
|
|
||||||
DEBUGF 1, "K : Set IDE IRQ14 return code %x\n", eax
|
|
||||||
stdcall attach_int_handler, 15, IDE_irq_15_handler, 0
|
|
||||||
DEBUGF 1, "K : Set IDE IRQ15 return code %x\n", eax
|
|
||||||
jmp .enable_IDE_interrupt
|
|
||||||
;--------------------------------------
|
|
||||||
.sata_ide:
|
|
||||||
cmp ax, 0x0185
|
|
||||||
je .sata_ide_1
|
|
||||||
|
|
||||||
cmp ax, 0x018f
|
|
||||||
jne .end_set_interrupts
|
|
||||||
;--------------------------------------
|
|
||||||
.sata_ide_1:
|
|
||||||
cmp [IDEContrRegsBaseAddr], 0
|
|
||||||
je .end_set_interrupts
|
|
||||||
|
|
||||||
mov ax, [IDE_Interrupt]
|
|
||||||
movzx eax, al
|
|
||||||
stdcall attach_int_handler, eax, IDE_common_irq_handler, 0
|
|
||||||
DEBUGF 1, "K : Set IDE IRQ%d return code %x\n", [IDE_Interrupt]:1, eax
|
|
||||||
;--------------------------------------
|
|
||||||
.enable_IDE_interrupt:
|
|
||||||
mov esi, boot_enabling_ide
|
|
||||||
call boot_log
|
|
||||||
; Enable interrupts in IDE controller for DMA
|
|
||||||
mov al, 0
|
|
||||||
mov ah, [DRIVE_DATA+1]
|
|
||||||
test ah, 10100000b
|
|
||||||
jz @f
|
|
||||||
|
|
||||||
DEBUGF 1, "K : IDE CH1 PIO, because ATAPI drive present\n"
|
|
||||||
jmp .ch2_check
|
|
||||||
@@:
|
|
||||||
mov dx, [IDE_BAR1_val] ;0x3F4
|
|
||||||
add dx, 2 ;0x3F6
|
|
||||||
out dx, al
|
|
||||||
DEBUGF 1, "K : IDE CH1 DMA enabled\n"
|
|
||||||
.ch2_check:
|
|
||||||
test ah, 1010b
|
|
||||||
jz @f
|
|
||||||
|
|
||||||
DEBUGF 1, "K : IDE CH2 PIO, because ATAPI drive present\n"
|
|
||||||
jmp .end_set_interrupts
|
|
||||||
@@:
|
|
||||||
mov dx, [IDE_BAR3_val] ;0x374
|
|
||||||
add dx, 2 ;0x376
|
|
||||||
out dx, al
|
|
||||||
DEBUGF 1, "K : IDE CH2 DMA enabled\n"
|
|
||||||
;--------------------------------------
|
|
||||||
.end_set_interrupts:
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
cmp [dma_hdd], 0
|
|
||||||
je .print_pio
|
|
||||||
.print_dma:
|
|
||||||
DEBUGF 1, "K : IDE DMA mode\n"
|
|
||||||
jmp .continue
|
|
||||||
|
|
||||||
.print_pio:
|
|
||||||
DEBUGF 1, "K : IDE PIO mode\n"
|
|
||||||
.continue:
|
|
||||||
|
|
||||||
mov [timer_ticks_enable], 1 ; for cd driver
|
mov [timer_ticks_enable], 1 ; for cd driver
|
||||||
|
|
||||||
sti
|
sti
|
||||||
|
Loading…
Reference in New Issue
Block a user