- SysFuncs docs updated;

- PCI Expansion ROM is now readable via uMMIO.

git-svn-id: svn://kolibrios.org@1353 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Artem Jerdev (art_zh)
2010-01-03 21:38:39 +00:00
parent a41482cf9d
commit 10f720429e
4 changed files with 127 additions and 6 deletions

View File

@@ -431,18 +431,21 @@ align 4
pci_mmio_map:
and edx,0x0ffff
cmp ah,6
jc @f
jc .bar_0_5
jz .bar_rom
mov eax,-2
ret
@@:
.bar_rom:
mov ah, 8 ; bar6 = Expansion ROM base address
.bar_0_5:
push ecx
add ebx, 4095
and ebx,-4096
push ebx
mov bl, ah ; bl = BAR# (0..5)
mov bl, ah ; bl = BAR# (0..5), however bl=8 for BAR6
shl bl, 1
shl bl, 1
add bl, 0x10 ; bl = BARs offset in PCI config. space
add bl, 0x10 ; now bl = BAR offset in PCI config. space
mov ax,word [mmio_pci_addr]
mov bh, al ; bh = dddddfff
mov al, 2 ; al : DW to read

View File

@@ -3289,6 +3289,63 @@ IPC
<20><EFBFBD><E5AEA4>, <20><><EFBFBD><EFBFBD><E0A8AC>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Interrupt List by Ralf Brown;
ᯨ᮪ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E3ACA5><EFBFBD><20><> <20><><EFBFBD><EFBFBD><E0AEA9><EFBFBD><EFBFBD>.
======================================================================
====================== <20><EFBFBD><E3ADAA><EFBFBD> 62, <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 11 =====================
== <20><><EFBFBD><EFBFBD><E6A8A0><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD> <20><><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD> <20>/<2F> <20> <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ==
======================================================================
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* eax = 62 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
* bl = 11 - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樨
* cx = <20><><EFBFBD><EFBFBD><EFBFBD> PCI-<2D><><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* eax = -1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PCI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
* eax = -2 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> MMIO-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><><E0A0A7><EFBFBD><EFBFBD><EFBFBD>;
* eax = -3 - <20><EFBFBD><E8A8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD> <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; <20><><EFBFBD><EFBFBD><EFBFBD>
* eax = ࠧ<><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E3AFAD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* <20><EFBFBD><E0A5A4><EFBFBD><EFBFBD>⥫쭮 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PCI
<20><><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樥<E3ADAA> 12 <20>㭪樨 21.
* <20><><EFBFBD><EFBFBD><EFBFBD> PCI-<2D><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1AEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E2A5AC><EFBFBD> <20><><EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
mmio_pci_addr
======================================================================
====================== <20><EFBFBD><E3ADAA><EFBFBD> 62, <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 12 =====================
== <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD> <20><><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><E1AAAE> MMIO ==
======================================================================
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* eax = 62 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
* bl = 12 - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樨
* bh = <20><><EFBFBD><EFBFBD><EFBFBD> BAR-ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E4A8A3><EFBFBD><EFBFBD><E6A8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> PCI
* ecx = ࠧ<><E0A0A7><EFBFBD> MMIO-<2D><><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
* edx = ᬥ饭<E1ACA5><E9A5AD> <20><EFBFBD><E2ADAE>⥫쭮 <20><><EFBFBD> MMIO-<2D><><EFBFBD><EFBFBD><EFBFBD> (<28> 4K-<2D><><EFBFBD><E0A0AD><EFBFBD><EFBFBD>!)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* eax = -1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PCI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
* eax = -2 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> BAR-ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>;
* eax = -3 - BAR <20><><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IO;
* eax = -4 - BAR <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> IO;
* eax = -5 - <20><EFBFBD><E8A8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨; <20><><EFBFBD><EFBFBD><EFBFBD>
* eax = <20><><EFBFBD><E7A0AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> MMIO <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* <20><EFBFBD><E0A5A4><EFBFBD><EFBFBD>⥫쭮 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PCI
<20><><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樥<E3ADAA> 12 <20>㭪樨 21.
* <20><><EFBFBD><EFBFBD><EFBFBD> PCI-<2D><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2A5AC><EFBFBD> <20><><EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> mmio_pci_addr.
* <20><EFBFBD><E0A5A4><EFBFBD><E2A0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBA7AE> <20>㭪樨 62:13
======================================================================
====================== <20><EFBFBD><E3ADAA><EFBFBD> 62, <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 13 =====================
== <20><EFBFBD><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><E1AAAE> MMIO ==
======================================================================
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* eax = 62 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
* bl = 12 - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樨
* ecx = <20><><EFBFBD><E7A0AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MMIO-<2D><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* eax = 1 - <20><><EFBFBD><EFBFBD> <20>ᯥ譮 <20><EFBFBD><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* <20><EFBFBD><E0A5A4><EFBFBD><EFBFBD>⥫쭮 <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD> uMMIO-<2D><><EFBFBD><EFBFBD> (fn62:12)
======================================================================
================ <20><EFBFBD><E3ADAA><EFBFBD> 63 - ࠡ<><E0A0A1><EFBFBD> <20> <20><><EFBFBD> <20><EFBFBD><E2ABA0><EFBFBD>. ===============
======================================================================

View File

@@ -3260,6 +3260,59 @@ Remarks:
Ralf Brown; registers of the second type must be listed
in the device documentation.
======================================================================
===================== Function 62, subfunction 11 ====================
== Initialize user-accessible MMIO channel ==
======================================================================
Parameters:
* eax = 62 - function
* bl = 11 - subfunction
* cx = PCI-address (bbbbbbbb dddddfff)
Returns:
* eax = -1 - PCI access not granted;
* eax = -2 - no user MMIO access to this PCI address;
* eax = -3 - memory allocation error; otherwise
* eax = available user heap size.
Remarks:
* Low-level PCI access must be allowed (fn21:12)
* PCI-address should correspond the system var [mmio_pci_addr]
======================================================================
===================== Function 62, subfunction 12 ====================
== Request user-accessible MMIO address space ==
======================================================================
Parameters:
* eax = 62 - function
* bl = 12 - subfunction
* bh = BAR number in PCI configuration space
* ecx = MMIO-block size needed (bytes)
* edx = MMIO-offset (number of whole 4Kb-pages!)
Returns:
* eax = -1 - user PCI access denied;
* eax = -2 - invalid BAR number;
* eax = -3 - BAR contains no valid IO addres;
* eax = -4 - BAR addresses IO ports;
* eax = -5 - dynamic allocation error; otherwise
* eax = MMIO start address (in application's linear space).
Remarks:
* Low-level PCI access must be allowed (fn21:12)
* The system var [mmio_pci_addr] sets the actual PCI-address
* The granted MMIO addresses should be released after use (fn62:13)
======================================================================
===================== Function 62, subfunction 13 ====================
== Release a block of user MMIO addresses ==
======================================================================
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* eax = 62 - function
* bl = 12 - subfunction
* ecx = MMIO start address (in application's linear space).
Returns:
* eax = 1 if the block is successfully released;
* eax = 0 in case of reallocation error;
Remarks:
* A valid uMMIO block should exist at this address (fn62:12)
======================================================================
============== Function 63 - work with the debug board. ==============
======================================================================

View File

@@ -473,11 +473,19 @@ Try_MMIO:
mcall 4
jmp mmio_next_bar
@@:
cmp bh, '6' ; expansion ROM ?
je @f
mov [bar_ram+3], bh
mov ebx, [gr_pos]
mov edx, bar_ram
mcall 4
jump mmio_dump
@@:
mov ebx, [gr_pos]
mov edx, bar_rom
mcall 4
mmio_dump:
mov edx, eax
mov esi, 64
mov ecx, 0x099 ; dump color : blue
@@ -490,7 +498,7 @@ Try_MMIO:
mmio_next_bar:
mov bh, [MMIO_BAR]
inc bh
cmp bh,6
cmp bh,7
je @f
mov [MMIO_BAR], bh
add [gr_pos], 10
@@ -529,7 +537,7 @@ PCIWin mls \
bar_ram db 'BARx: MMIO block', 0
bar_io db 'BARx: IO ports',0
bar_um db 'BARx: unmapped',0
bar_rom db 'BAR6: Onboard ROM', 0 ; << no ROM test yet
bar_rom db 'BAR6: Expansion ROM', 0
;------------------------------------------------------------------
; UNINITIALIZED DATA AREA