kernel: map_io_mem

git-svn-id: svn://kolibrios.org@741 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge)
2008-02-16 08:46:57 +00:00
parent 2c7785b277
commit a24875d50b
6 changed files with 55 additions and 48 deletions

View File

@@ -33,6 +33,7 @@ iglobal
szGetPgAddr db 'GetPgAddr',0
szMapPage db 'MapPage',0
szMapSpace db 'MapSpace',0
szMapIoMem db 'MapIoMem',0
szCommitPages db 'CommitPages',0
szReleasePages db 'ReleasePages',0
@@ -101,6 +102,7 @@ kernel_export:
dd szFreePage , free_page
dd szMapPage , map_page ;stdcall
dd szMapSpace , map_space
dd szMapIoMem , map_io_mem ;stdcall
dd szGetPgAddr , get_pg_addr
dd szCommitPages , commit_pages ;not implemented
dd szReleasePages , release_pages

View File

@@ -143,6 +143,45 @@ proc free_page
ret
endp
proc map_io_mem stdcall, base:dword, size:dword, flags:dword
push ebx
push edi
mov eax, [size]
add eax, 4095
and eax, -4096
mov [size], eax
stdcall alloc_kernel_space, eax
test eax, eax
jz .fail
push eax
mov edi, 0x1000
mov ebx, eax
mov ecx,[size]
mov edx, [base]
shr eax, 12
shr ecx, 12
and edx, -4096
or edx, [flags]
@@:
mov [page_tabs+eax*4], edx
invlpg [ebx]
inc eax
add ebx, edi
add edx, edi
loop @B
pop eax
mov edx, [base]
and edx, 4095
add eax, edx
.fail:
pop edi
pop ebx
ret
endp
; param
; eax= page base + page flags
; ebx= liear address
@@ -150,7 +189,7 @@ endp
align 4
commit_pages:
push edi
test ecx, ecx
jz .fail
@@ -171,6 +210,7 @@ commit_pages:
jnz @B
mov [pg_data.pg_mutex],ecx
.fail:
pop edi
ret

View File

@@ -275,6 +275,7 @@ __exports:
free_kernel_space, 'FreeKernelSpace', \ ; stdcall
kernel_alloc, 'KernelAlloc', \ ; stdcall
kernel_free, 'KernelFree', \ ; stdcall
map_io_mem, 'MapIoMem', \ ; stdcall
pci_api, 'PciApi', \
pci_read32, 'PciRead32', \ ; stdcall
reg_service, 'RegService', \