- 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:
@@ -431,18 +431,21 @@ align 4
|
|||||||
pci_mmio_map:
|
pci_mmio_map:
|
||||||
and edx,0x0ffff
|
and edx,0x0ffff
|
||||||
cmp ah,6
|
cmp ah,6
|
||||||
jc @f
|
jc .bar_0_5
|
||||||
|
jz .bar_rom
|
||||||
mov eax,-2
|
mov eax,-2
|
||||||
ret
|
ret
|
||||||
@@:
|
.bar_rom:
|
||||||
|
mov ah, 8 ; bar6 = Expansion ROM base address
|
||||||
|
.bar_0_5:
|
||||||
push ecx
|
push ecx
|
||||||
add ebx, 4095
|
add ebx, 4095
|
||||||
and ebx,-4096
|
and ebx,-4096
|
||||||
push ebx
|
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
|
||||||
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 ax,word [mmio_pci_addr]
|
||||||
mov bh, al ; bh = dddddfff
|
mov bh, al ; bh = dddddfff
|
||||||
mov al, 2 ; al : DW to read
|
mov al, 2 ; al : DW to read
|
||||||
|
@@ -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><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><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>. ===============
|
================ <20>㭪<EFBFBD><E3ADAA><EFBFBD> 63 - ࠡ<><E0A0A1><EFBFBD> <20> <20><><EFBFBD> <20>⫠<EFBFBD><E2ABA0><EFBFBD>. ===============
|
||||||
======================================================================
|
======================================================================
|
||||||
|
@@ -3260,6 +3260,59 @@ Remarks:
|
|||||||
Ralf Brown; registers of the second type must be listed
|
Ralf Brown; registers of the second type must be listed
|
||||||
in the device documentation.
|
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. ==============
|
============== Function 63 - work with the debug board. ==============
|
||||||
======================================================================
|
======================================================================
|
||||||
|
@@ -473,11 +473,19 @@ Try_MMIO:
|
|||||||
mcall 4
|
mcall 4
|
||||||
jmp mmio_next_bar
|
jmp mmio_next_bar
|
||||||
@@:
|
@@:
|
||||||
|
cmp bh, '6' ; expansion ROM ?
|
||||||
|
je @f
|
||||||
mov [bar_ram+3], bh
|
mov [bar_ram+3], bh
|
||||||
mov ebx, [gr_pos]
|
mov ebx, [gr_pos]
|
||||||
mov edx, bar_ram
|
mov edx, bar_ram
|
||||||
mcall 4
|
mcall 4
|
||||||
|
jump mmio_dump
|
||||||
|
@@:
|
||||||
|
mov ebx, [gr_pos]
|
||||||
|
mov edx, bar_rom
|
||||||
|
mcall 4
|
||||||
|
|
||||||
|
mmio_dump:
|
||||||
mov edx, eax
|
mov edx, eax
|
||||||
mov esi, 64
|
mov esi, 64
|
||||||
mov ecx, 0x099 ; dump color : blue
|
mov ecx, 0x099 ; dump color : blue
|
||||||
@@ -490,7 +498,7 @@ Try_MMIO:
|
|||||||
mmio_next_bar:
|
mmio_next_bar:
|
||||||
mov bh, [MMIO_BAR]
|
mov bh, [MMIO_BAR]
|
||||||
inc bh
|
inc bh
|
||||||
cmp bh,6
|
cmp bh,7
|
||||||
je @f
|
je @f
|
||||||
mov [MMIO_BAR], bh
|
mov [MMIO_BAR], bh
|
||||||
add [gr_pos], 10
|
add [gr_pos], 10
|
||||||
@@ -529,7 +537,7 @@ PCIWin mls \
|
|||||||
bar_ram db 'BARx: MMIO block', 0
|
bar_ram db 'BARx: MMIO block', 0
|
||||||
bar_io db 'BARx: IO ports',0
|
bar_io db 'BARx: IO ports',0
|
||||||
bar_um db 'BARx: unmapped',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
|
; UNINITIALIZED DATA AREA
|
||||||
|
Reference in New Issue
Block a user