forked from KolibriOS/kolibrios
Set Bus_Master bit in PCI Command register for drives in DMA mode git-svn-id: svn://kolibrios.org@6816 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
5b3bbe5c9c
commit
5b61094dc6
@ -747,6 +747,7 @@ struct IDE_DATA
|
|||||||
BAR3_val dw ?
|
BAR3_val dw ?
|
||||||
dma_hdd_channel_1 db ?
|
dma_hdd_channel_1 db ?
|
||||||
dma_hdd_channel_2 db ?
|
dma_hdd_channel_2 db ?
|
||||||
|
pcidev dd ? ; pointer to corresponding PCIDEV structure
|
||||||
ends
|
ends
|
||||||
|
|
||||||
struct IDE_CACHE
|
struct IDE_CACHE
|
||||||
|
@ -31,6 +31,7 @@ align 4
|
|||||||
mov eax, [esi+PCIDEV.class]
|
mov eax, [esi+PCIDEV.class]
|
||||||
DEBUGF 1, 'K : IDE controller programming interface %x\n', eax
|
DEBUGF 1, 'K : IDE controller programming interface %x\n', eax
|
||||||
mov [ecx+IDE_DATA.ProgrammingInterface], eax
|
mov [ecx+IDE_DATA.ProgrammingInterface], eax
|
||||||
|
mov [ecx+IDE_DATA.pcidev], esi
|
||||||
|
|
||||||
mov ah, [esi+PCIDEV.bus]
|
mov ah, [esi+PCIDEV.bus]
|
||||||
mov al, 2
|
mov al, 2
|
||||||
@ -137,6 +138,31 @@ IDE_device_2 rd 2
|
|||||||
IDE_device_3 rd 2
|
IDE_device_3 rd 2
|
||||||
;--------------------------------------
|
;--------------------------------------
|
||||||
endg
|
endg
|
||||||
|
|
||||||
|
;--------------------------------------
|
||||||
|
; set Bus Master bit of Command PCI register
|
||||||
|
;--------------------------------------
|
||||||
|
set_pci_command_bus_master:
|
||||||
|
PCI_COMMAND_BUS_MASTER = 0x0004
|
||||||
|
push eax ecx
|
||||||
|
|
||||||
|
mov ecx, [ecx+IDE_DATA.pcidev]
|
||||||
|
mov ah, [ecx+PCIDEV.bus]
|
||||||
|
mov al, 1 ; word
|
||||||
|
mov bh, [ecx+PCIDEV.devfn]
|
||||||
|
mov bl, 0x4 ; Command register
|
||||||
|
push eax
|
||||||
|
call pci_read_reg
|
||||||
|
mov ecx, eax
|
||||||
|
pop eax
|
||||||
|
test ecx, PCI_COMMAND_BUS_MASTER ; already set?
|
||||||
|
jnz @f
|
||||||
|
or ecx, PCI_COMMAND_BUS_MASTER
|
||||||
|
call pci_write_reg
|
||||||
|
@@:
|
||||||
|
pop ecx eax
|
||||||
|
ret
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
; START of initialisation IDE ATA code
|
; START of initialisation IDE ATA code
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
@ -302,6 +328,7 @@ Init_IDE_ATA_controller_2:
|
|||||||
mov dx, [ecx+IDE_DATA.BAR1_val] ;0x3F4
|
mov dx, [ecx+IDE_DATA.BAR1_val] ;0x3F4
|
||||||
add dx, 2 ;0x3F6
|
add dx, 2 ;0x3F6
|
||||||
out dx, al
|
out dx, al
|
||||||
|
call set_pci_command_bus_master
|
||||||
DEBUGF 1, "K : IDE CH1 DMA enabled\n"
|
DEBUGF 1, "K : IDE CH1 DMA enabled\n"
|
||||||
mov [ecx+IDE_DATA.dma_hdd_channel_1], byte 1
|
mov [ecx+IDE_DATA.dma_hdd_channel_1], byte 1
|
||||||
;--------------------------------------
|
;--------------------------------------
|
||||||
@ -356,6 +383,7 @@ Init_IDE_ATA_controller_2:
|
|||||||
mov dx, [ecx+IDE_DATA.BAR3_val] ;0x374
|
mov dx, [ecx+IDE_DATA.BAR3_val] ;0x374
|
||||||
add dx, 2 ;0x376
|
add dx, 2 ;0x376
|
||||||
out dx, al
|
out dx, al
|
||||||
|
call set_pci_command_bus_master
|
||||||
DEBUGF 1, "K : IDE CH2 DMA enabled\n"
|
DEBUGF 1, "K : IDE CH2 DMA enabled\n"
|
||||||
mov [ecx+IDE_DATA.dma_hdd_channel_2], byte 1
|
mov [ecx+IDE_DATA.dma_hdd_channel_2], byte 1
|
||||||
;--------------------------------------
|
;--------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user