create_futex()

git-svn-id: svn://kolibrios.org@5577 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2015-07-17 14:16:36 +00:00
parent cdf5c48fbb
commit e9583ee97f
11 changed files with 457 additions and 1106 deletions

View File

@ -7,8 +7,7 @@
$Revision: 4420 $
; Access through BIOS by diamond
; Disk access through BIOS
iglobal
align 4
bd_callbacks:
@ -23,6 +22,16 @@ bd_callbacks:
.end:
endg
uglobal
bios_hdpos dd 0
bios_cur_sector dd ?
bios_read_len dd ?
cache_chain_ptr dd ?
int13_regs_in rb sizeof.v86_regs
int13_regs_out rb sizeof.v86_regs
cache_chain_size db ?
endg
;-----------------------------------------------------------------
proc bd_read_interface stdcall uses edi, \
userdata, buffer, startsector:qword, numsectors
; userdata = old [hdpos] = 80h + index in NumBiosDisks
@ -76,7 +85,7 @@ endl
xor eax, eax
ret
endp
;-----------------------------------------------------------------
proc bd_write_interface stdcall uses esi edi, \
userdata, buffer, startsector:qword, numsectors
; userdata = old [hdpos] = 80h + index in NumBiosDisks
@ -142,7 +151,7 @@ endl
xor eax, eax
ret
endp
;-----------------------------------------------------------------
; This is a stub.
proc bd_querymedia stdcall, hd_data, mediainfo
mov eax, [mediainfo]
@ -153,16 +162,7 @@ proc bd_querymedia stdcall, hd_data, mediainfo
xor eax, eax
ret
endp
;-----------------------------------------------------------------------------
; \begin{diamond}
uglobal
bios_hdpos dd 0 ; 0 is invalid value for [hdpos]
bios_cur_sector dd ?
bios_read_len dd ?
endg
;-----------------------------------------------------------------------------
align 4
;-----------------------------------------------------------------
bd_read:
push eax
push edx
@ -209,8 +209,7 @@ bd_read:
.v86err:
mov [hd_error], 1
jmp hd_read_error
;-----------------------------------------------------------------------------
align 4
;-----------------------------------------------------------------
bd_write_cache_chain:
pusha
mov edi, OS_BASE + 0x9A000
@ -234,13 +233,7 @@ bd_write_cache_chain:
popa
mov [hd_error], 1
jmp hd_write_error
;-----------------------------------------------------------------------------
uglobal
int13_regs_in rb sizeof.v86_regs
int13_regs_out rb sizeof.v86_regs
endg
;-----------------------------------------------------------------------------
align 4
;-----------------------------------------------------------------
int13_call:
; Because this code uses fixed addresses,
; it can not be run simultaniously by many threads.
@ -290,4 +283,3 @@ int13_call:
mov edx, ecx
@@:
ret
; \end{diamond}

File diff suppressed because it is too large Load Diff

View File

@ -165,7 +165,6 @@ pci_read_reg:
call pci_make_config_cmd
mov ebx, eax
; get current state
mov dx, 0xcf8
in eax, dx
push eax
@ -692,7 +691,7 @@ end virtual
test eax, eax
jz .nomemory
mov edi, eax
mov [edi+PCIDEV.vid_did], ecx
mov [edi+PCIDEV.vendor_device_id], ecx
mov edx, pcidev_list
list_add_tail edi, edx
mov eax, dword [.devfn]
@ -704,19 +703,19 @@ end virtual
shr eax, 8 ;FIXME use byte mask
mov [edi+PCIDEV.class], eax
mov ah, [.bus]
mov bh, byte [.devfn]
mov al, 2
mov bl, PCI_SUBSYSTEM_VENDOR_ID
call pci_read_reg
mov [edi+PCIDEV.svid_sdid], eax
; mov ah, [.bus]
; mov bh, byte [.devfn]
; mov al, 2
; mov bl, PCI_SUBSYSTEM_VENDOR_ID
; call pci_read_reg
; mov [edi+PCIDEV.svid_sdid], eax
mov ah, [.bus]
mov al, 0
mov bh, [.devfn]
mov bl, PCI_IRQ_LINE
call pci_read_reg
mov [edi+PCIDEV.irq_line], al
; mov ah, [.bus]
; mov al, 0
; mov bh, [.devfn]
; mov bl, PCI_IRQ_LINE
; call pci_read_reg
; mov [edi+PCIDEV.irq_line], al
test byte [.devfn], 7
jnz .next_func
@ -739,6 +738,11 @@ end virtual
ret
endp
; Export for drivers. Just returns the pointer to the pci-devices list.
proc get_pcidev_list
mov eax, pcidev_list
ret
endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@ -229,7 +229,6 @@ SLOT_BASE equ (OS_BASE+0x0080000)
VGABasePtr equ (OS_BASE+0x00A0000)
CLEAN_ZONE equ (_CLEAN_ZONE-OS_BASE)
IDE_DMA equ (_IDE_DMA-OS_BASE)
UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000)
@ -496,6 +495,18 @@ struct RWSEM
count dd ?
ends
struct FUTEX
list LHEAD
magic dd ?
handle dd ?
destroy dd ?
wait_list LHEAD
pointer dd ?
flags dd ?
ends
struct display_t
x dd ?
y dd ?

View File

@ -1340,3 +1340,72 @@ destroy_kernel_object:
call free ;release object memory
ret
; param
; eñõ= size
align 4
create_object:
push esi
push edi
pushfd
cli
mov esi, [current_process]
mov eax, [esi+PROC.ht_free]
mov edi, [esi+PROC.ht_next]
dec eax
js .err0
mov [esi+PROC.ht_free], eax
mov eax, [esi+PROC.htab+edi*4]
mov [esi+PROC.ht_next], eax
popfd
mov eax, ecx
call malloc
test eax, eax
jz .err1
mov [eax+FUTEX.handle], edi
mov [esi+PROC.htab+edi*4], eax
pop edi
pop esi
ret
.err1:
pushfd
cli
mov eax, [esi+PROC.ht_next]
mov [esi+PROC.htab+edi*4], eax
mov [esi+PROC.ht_next], edi
inc [esi+PROC.ht_free]
.err0:
popfd
pop edi
pop esi
xor eax, eax
ret
align 4
create_futex:
mov ecx, sizeof.FUTEX
call create_object
test eax, eax
jz .fail
mov [eax+FUTEX.magic], 'FUTX'
mov [eax+FUTEX.destroy], 0
lea ecx, [eax+FUTEX.wait_list]
list_init ecx
mov [eax+FUTEX.pointer], 0
mov [eax+FUTEX.flags], 0
.fail:
ret

View File

@ -469,10 +469,11 @@ proc create_process stdcall, app_size:dword,img_base:dword,img_size:dword
stdcall kernel_alloc, 0x2000
test eax, eax
jz .fail
mov [process], eax
lea edi, [eax+PROC.heap_lock]
mov ecx, (PROC.ht_next-PROC.heap_lock)/4
mov ecx, (PROC.ht_free-PROC.heap_lock)/4
list_init eax
add eax, PROC.thr_list
@ -482,14 +483,17 @@ proc create_process stdcall, app_size:dword,img_base:dword,img_size:dword
cld
rep stosd
mov [edi], dword (PROC.pdt_0 - PROC.htab)/4 - 3
mov [edi+4], dword 3 ;reserve handles for stdin stdout and stderr
mov ecx, (PROC.pdt_0 - PROC.htab)/4
add edi, 8
inc eax
@@:
stosd
inc eax
cmp eax, ecx
jbe @B
mov [edi-4096+PROC.ht_next], 3 ;reserve handles for stdin stdout and stderr
mov eax, edi
call get_pg_addr
mov [edi-4096+PROC.pdt_0_phys], eax

View File

@ -533,7 +533,6 @@ align 65536
SB16Buffer rb 65536
align 4096
_IDE_DMA rb 16*512
BUTTON_INFO rb 64*1024
RESERVED_PORTS: rb 64*1024

View File

@ -702,11 +702,30 @@ setvideomode:
mov esi, boot_setostask
call boot_log
mov edi, sys_proc
list_init edi
lea ecx, [edi+PROC.thr_list]
list_init ecx
mov [edi+PROC.pdt_0_phys], sys_proc-OS_BASE+PROC.pdt_0
mov eax, sys_proc
lea edi, [eax+PROC.heap_lock]
mov ecx, (PROC.ht_free-PROC.heap_lock)/4
list_init eax
add eax, PROC.thr_list
list_init eax
xor eax, eax
cld
rep stosd
mov [edi], dword (PROC.pdt_0 - PROC.htab)/4 - 3
mov [edi+4], dword 3 ;reserve handles for stdin stdout and stderr
mov ecx, (PROC.pdt_0 - PROC.htab)/4
add edi, 8
inc eax
@@:
stosd
inc eax
cmp eax, ecx
jbe @B
mov [sys_proc+PROC.pdt_0_phys], sys_proc-OS_BASE+PROC.pdt_0
mov eax, -1
mov edi, thr_slot_map+4
@ -807,7 +826,6 @@ endg
call free_page
.no_wake_cpus:
; REDIRECT ALL IRQ'S TO INT'S 0x20-0x2f
mov esi, boot_initirq
call boot_log

View File

@ -111,7 +111,8 @@ struct PROC
io_map_0 rd 1
io_map_1 rd 1
ht_lock rd 1 ;htab[0] stdin
ht_lock rd 1
ht_free rd 1 ;htab[0] stdin
ht_next rd 1 ;htab[1] stdout
htab rd (4096-$)/4 ;htab[2] stderr
pdt_0 rd 1024

View File

@ -1508,9 +1508,9 @@ SOCKET_ring_create:
add eax, SOCKET_MAXDATA
mov [esi + RING_BUFFER.end_ptr], eax
mov eax, esi
pop esi
.fail:
pop esi
ret
;-----------------------------------------------------------------

View File

@ -281,7 +281,7 @@ blit_32:
mov ebp, [d_width_calc_area+ebp*4]
add ebp, ebx
add ebp, [_WinMapAddress]
add ebp, [_display.win_map]
mov eax, [esp+BLITTER.src_y]
imul eax, [esp+BLITTER.stride]
@ -370,7 +370,7 @@ align 4
jnz .inner32
add esi, [esp+BLITTER.stride]
add edi, [_display.pitch]
add edi, [_display.lfb_pitch]
add ebp, [_display.width]
inc dword [esp+.x_y]
@ -432,7 +432,7 @@ align 4
jnz .inner32
add esi, [esp+BLITTER.stride]
add edi, [_display.pitch]
add edi, [_display.lfb_pitch]
add ebp, [_display.width]
inc dword [esp+.x_y]