forked from KolibriOS/kolibrios
create_futex()
git-svn-id: svn://kolibrios.org@5577 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
cdf5c48fbb
commit
e9583ee97f
@ -7,8 +7,7 @@
|
|||||||
|
|
||||||
$Revision: 4420 $
|
$Revision: 4420 $
|
||||||
|
|
||||||
|
; Disk access through BIOS
|
||||||
; Access through BIOS by diamond
|
|
||||||
iglobal
|
iglobal
|
||||||
align 4
|
align 4
|
||||||
bd_callbacks:
|
bd_callbacks:
|
||||||
@ -23,6 +22,16 @@ bd_callbacks:
|
|||||||
.end:
|
.end:
|
||||||
endg
|
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, \
|
proc bd_read_interface stdcall uses edi, \
|
||||||
userdata, buffer, startsector:qword, numsectors
|
userdata, buffer, startsector:qword, numsectors
|
||||||
; userdata = old [hdpos] = 80h + index in NumBiosDisks
|
; userdata = old [hdpos] = 80h + index in NumBiosDisks
|
||||||
@ -76,7 +85,7 @@ endl
|
|||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
;-----------------------------------------------------------------
|
||||||
proc bd_write_interface stdcall uses esi edi, \
|
proc bd_write_interface stdcall uses esi edi, \
|
||||||
userdata, buffer, startsector:qword, numsectors
|
userdata, buffer, startsector:qword, numsectors
|
||||||
; userdata = old [hdpos] = 80h + index in NumBiosDisks
|
; userdata = old [hdpos] = 80h + index in NumBiosDisks
|
||||||
@ -142,7 +151,7 @@ endl
|
|||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
;-----------------------------------------------------------------
|
||||||
; This is a stub.
|
; This is a stub.
|
||||||
proc bd_querymedia stdcall, hd_data, mediainfo
|
proc bd_querymedia stdcall, hd_data, mediainfo
|
||||||
mov eax, [mediainfo]
|
mov eax, [mediainfo]
|
||||||
@ -153,16 +162,7 @@ proc bd_querymedia stdcall, hd_data, mediainfo
|
|||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
endp
|
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:
|
bd_read:
|
||||||
push eax
|
push eax
|
||||||
push edx
|
push edx
|
||||||
@ -209,8 +209,7 @@ bd_read:
|
|||||||
.v86err:
|
.v86err:
|
||||||
mov [hd_error], 1
|
mov [hd_error], 1
|
||||||
jmp hd_read_error
|
jmp hd_read_error
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------
|
||||||
align 4
|
|
||||||
bd_write_cache_chain:
|
bd_write_cache_chain:
|
||||||
pusha
|
pusha
|
||||||
mov edi, OS_BASE + 0x9A000
|
mov edi, OS_BASE + 0x9A000
|
||||||
@ -234,13 +233,7 @@ bd_write_cache_chain:
|
|||||||
popa
|
popa
|
||||||
mov [hd_error], 1
|
mov [hd_error], 1
|
||||||
jmp hd_write_error
|
jmp hd_write_error
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------
|
||||||
uglobal
|
|
||||||
int13_regs_in rb sizeof.v86_regs
|
|
||||||
int13_regs_out rb sizeof.v86_regs
|
|
||||||
endg
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
align 4
|
|
||||||
int13_call:
|
int13_call:
|
||||||
; Because this code uses fixed addresses,
|
; Because this code uses fixed addresses,
|
||||||
; it can not be run simultaniously by many threads.
|
; it can not be run simultaniously by many threads.
|
||||||
@ -290,4 +283,3 @@ int13_call:
|
|||||||
mov edx, ecx
|
mov edx, ecx
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
; \end{diamond}
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -165,7 +165,6 @@ pci_read_reg:
|
|||||||
|
|
||||||
call pci_make_config_cmd
|
call pci_make_config_cmd
|
||||||
mov ebx, eax
|
mov ebx, eax
|
||||||
; get current state
|
|
||||||
mov dx, 0xcf8
|
mov dx, 0xcf8
|
||||||
in eax, dx
|
in eax, dx
|
||||||
push eax
|
push eax
|
||||||
@ -692,7 +691,7 @@ end virtual
|
|||||||
test eax, eax
|
test eax, eax
|
||||||
jz .nomemory
|
jz .nomemory
|
||||||
mov edi, eax
|
mov edi, eax
|
||||||
mov [edi+PCIDEV.vid_did], ecx
|
mov [edi+PCIDEV.vendor_device_id], ecx
|
||||||
mov edx, pcidev_list
|
mov edx, pcidev_list
|
||||||
list_add_tail edi, edx
|
list_add_tail edi, edx
|
||||||
mov eax, dword [.devfn]
|
mov eax, dword [.devfn]
|
||||||
@ -704,19 +703,19 @@ end virtual
|
|||||||
shr eax, 8 ;FIXME use byte mask
|
shr eax, 8 ;FIXME use byte mask
|
||||||
mov [edi+PCIDEV.class], eax
|
mov [edi+PCIDEV.class], eax
|
||||||
|
|
||||||
mov ah, [.bus]
|
; mov ah, [.bus]
|
||||||
mov bh, byte [.devfn]
|
; mov bh, byte [.devfn]
|
||||||
mov al, 2
|
; mov al, 2
|
||||||
mov bl, PCI_SUBSYSTEM_VENDOR_ID
|
; mov bl, PCI_SUBSYSTEM_VENDOR_ID
|
||||||
call pci_read_reg
|
; call pci_read_reg
|
||||||
mov [edi+PCIDEV.svid_sdid], eax
|
; mov [edi+PCIDEV.svid_sdid], eax
|
||||||
|
|
||||||
mov ah, [.bus]
|
; mov ah, [.bus]
|
||||||
mov al, 0
|
; mov al, 0
|
||||||
mov bh, [.devfn]
|
; mov bh, [.devfn]
|
||||||
mov bl, PCI_IRQ_LINE
|
; mov bl, PCI_IRQ_LINE
|
||||||
call pci_read_reg
|
; call pci_read_reg
|
||||||
mov [edi+PCIDEV.irq_line], al
|
; mov [edi+PCIDEV.irq_line], al
|
||||||
|
|
||||||
test byte [.devfn], 7
|
test byte [.devfn], 7
|
||||||
jnz .next_func
|
jnz .next_func
|
||||||
@ -739,6 +738,11 @@ end virtual
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
; Export for drivers. Just returns the pointer to the pci-devices list.
|
||||||
|
proc get_pcidev_list
|
||||||
|
mov eax, pcidev_list
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
@ -229,7 +229,6 @@ SLOT_BASE equ (OS_BASE+0x0080000)
|
|||||||
VGABasePtr equ (OS_BASE+0x00A0000)
|
VGABasePtr equ (OS_BASE+0x00A0000)
|
||||||
|
|
||||||
CLEAN_ZONE equ (_CLEAN_ZONE-OS_BASE)
|
CLEAN_ZONE equ (_CLEAN_ZONE-OS_BASE)
|
||||||
IDE_DMA equ (_IDE_DMA-OS_BASE)
|
|
||||||
|
|
||||||
UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000)
|
UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000)
|
||||||
|
|
||||||
@ -493,9 +492,21 @@ ends
|
|||||||
|
|
||||||
struct RWSEM
|
struct RWSEM
|
||||||
wait_list LHEAD
|
wait_list LHEAD
|
||||||
count dd ?
|
count dd ?
|
||||||
ends
|
ends
|
||||||
|
|
||||||
|
struct FUTEX
|
||||||
|
list LHEAD
|
||||||
|
magic dd ?
|
||||||
|
handle dd ?
|
||||||
|
destroy dd ?
|
||||||
|
|
||||||
|
wait_list LHEAD
|
||||||
|
pointer dd ?
|
||||||
|
flags dd ?
|
||||||
|
ends
|
||||||
|
|
||||||
|
|
||||||
struct display_t
|
struct display_t
|
||||||
x dd ?
|
x dd ?
|
||||||
y dd ?
|
y dd ?
|
||||||
|
@ -1340,3 +1340,72 @@ destroy_kernel_object:
|
|||||||
|
|
||||||
call free ;release object memory
|
call free ;release object memory
|
||||||
ret
|
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
|
||||||
|
|
||||||
|
@ -469,10 +469,11 @@ proc create_process stdcall, app_size:dword,img_base:dword,img_size:dword
|
|||||||
stdcall kernel_alloc, 0x2000
|
stdcall kernel_alloc, 0x2000
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz .fail
|
jz .fail
|
||||||
|
|
||||||
mov [process], eax
|
mov [process], eax
|
||||||
|
|
||||||
lea edi, [eax+PROC.heap_lock]
|
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
|
list_init eax
|
||||||
add eax, PROC.thr_list
|
add eax, PROC.thr_list
|
||||||
@ -482,14 +483,17 @@ proc create_process stdcall, app_size:dword,img_base:dword,img_size:dword
|
|||||||
cld
|
cld
|
||||||
rep stosd
|
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
|
mov ecx, (PROC.pdt_0 - PROC.htab)/4
|
||||||
|
add edi, 8
|
||||||
|
inc eax
|
||||||
@@:
|
@@:
|
||||||
stosd
|
stosd
|
||||||
inc eax
|
inc eax
|
||||||
cmp eax, ecx
|
cmp eax, ecx
|
||||||
jbe @B
|
jbe @B
|
||||||
|
|
||||||
mov [edi-4096+PROC.ht_next], 3 ;reserve handles for stdin stdout and stderr
|
|
||||||
mov eax, edi
|
mov eax, edi
|
||||||
call get_pg_addr
|
call get_pg_addr
|
||||||
mov [edi-4096+PROC.pdt_0_phys], eax
|
mov [edi-4096+PROC.pdt_0_phys], eax
|
||||||
|
@ -533,7 +533,6 @@ align 65536
|
|||||||
SB16Buffer rb 65536
|
SB16Buffer rb 65536
|
||||||
|
|
||||||
align 4096
|
align 4096
|
||||||
_IDE_DMA rb 16*512
|
|
||||||
BUTTON_INFO rb 64*1024
|
BUTTON_INFO rb 64*1024
|
||||||
RESERVED_PORTS: rb 64*1024
|
RESERVED_PORTS: rb 64*1024
|
||||||
|
|
||||||
|
@ -702,11 +702,30 @@ setvideomode:
|
|||||||
mov esi, boot_setostask
|
mov esi, boot_setostask
|
||||||
call boot_log
|
call boot_log
|
||||||
|
|
||||||
mov edi, sys_proc
|
mov eax, sys_proc
|
||||||
list_init edi
|
lea edi, [eax+PROC.heap_lock]
|
||||||
lea ecx, [edi+PROC.thr_list]
|
mov ecx, (PROC.ht_free-PROC.heap_lock)/4
|
||||||
list_init ecx
|
|
||||||
mov [edi+PROC.pdt_0_phys], sys_proc-OS_BASE+PROC.pdt_0
|
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 eax, -1
|
||||||
mov edi, thr_slot_map+4
|
mov edi, thr_slot_map+4
|
||||||
@ -807,7 +826,6 @@ endg
|
|||||||
call free_page
|
call free_page
|
||||||
.no_wake_cpus:
|
.no_wake_cpus:
|
||||||
|
|
||||||
|
|
||||||
; REDIRECT ALL IRQ'S TO INT'S 0x20-0x2f
|
; REDIRECT ALL IRQ'S TO INT'S 0x20-0x2f
|
||||||
mov esi, boot_initirq
|
mov esi, boot_initirq
|
||||||
call boot_log
|
call boot_log
|
||||||
|
@ -111,7 +111,8 @@ struct PROC
|
|||||||
io_map_0 rd 1
|
io_map_0 rd 1
|
||||||
io_map_1 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
|
ht_next rd 1 ;htab[1] stdout
|
||||||
htab rd (4096-$)/4 ;htab[2] stderr
|
htab rd (4096-$)/4 ;htab[2] stderr
|
||||||
pdt_0 rd 1024
|
pdt_0 rd 1024
|
||||||
|
@ -1508,9 +1508,9 @@ SOCKET_ring_create:
|
|||||||
add eax, SOCKET_MAXDATA
|
add eax, SOCKET_MAXDATA
|
||||||
mov [esi + RING_BUFFER.end_ptr], eax
|
mov [esi + RING_BUFFER.end_ptr], eax
|
||||||
mov eax, esi
|
mov eax, esi
|
||||||
pop esi
|
|
||||||
|
|
||||||
.fail:
|
.fail:
|
||||||
|
pop esi
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;-----------------------------------------------------------------
|
;-----------------------------------------------------------------
|
||||||
|
@ -281,7 +281,7 @@ blit_32:
|
|||||||
mov ebp, [d_width_calc_area+ebp*4]
|
mov ebp, [d_width_calc_area+ebp*4]
|
||||||
|
|
||||||
add ebp, ebx
|
add ebp, ebx
|
||||||
add ebp, [_WinMapAddress]
|
add ebp, [_display.win_map]
|
||||||
|
|
||||||
mov eax, [esp+BLITTER.src_y]
|
mov eax, [esp+BLITTER.src_y]
|
||||||
imul eax, [esp+BLITTER.stride]
|
imul eax, [esp+BLITTER.stride]
|
||||||
@ -370,7 +370,7 @@ align 4
|
|||||||
jnz .inner32
|
jnz .inner32
|
||||||
|
|
||||||
add esi, [esp+BLITTER.stride]
|
add esi, [esp+BLITTER.stride]
|
||||||
add edi, [_display.pitch]
|
add edi, [_display.lfb_pitch]
|
||||||
add ebp, [_display.width]
|
add ebp, [_display.width]
|
||||||
inc dword [esp+.x_y]
|
inc dword [esp+.x_y]
|
||||||
|
|
||||||
@ -432,7 +432,7 @@ align 4
|
|||||||
jnz .inner32
|
jnz .inner32
|
||||||
|
|
||||||
add esi, [esp+BLITTER.stride]
|
add esi, [esp+BLITTER.stride]
|
||||||
add edi, [_display.pitch]
|
add edi, [_display.lfb_pitch]
|
||||||
add ebp, [_display.width]
|
add ebp, [_display.width]
|
||||||
inc dword [esp+.x_y]
|
inc dword [esp+.x_y]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user