From ef977fdf268582521cd363ed154174186a179695 Mon Sep 17 00:00:00 2001 From: "Sergey Semyonov (Serge)" Date: Tue, 13 Mar 2007 22:09:38 +0000 Subject: [PATCH] 1)fixed hangup on reboot/restart/poweroff 2)drivers git-svn-id: svn://kolibrios.org@417 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/branches/flat_kernel/bus/pci/pci32.inc | 10 +++--- kernel/branches/flat_kernel/const.inc | 3 ++ kernel/branches/flat_kernel/core/dll.inc | 32 +++++++++---------- kernel/branches/flat_kernel/core/memory.inc | 14 ++++---- kernel/branches/flat_kernel/drivers/ati2d.asm | 5 ++- .../branches/flat_kernel/drivers/infinity.asm | 32 ++++++++----------- kernel/branches/flat_kernel/drivers/sis.asm | 17 ++++------ kernel/branches/flat_kernel/drivers/sound.asm | 6 +--- kernel/branches/flat_kernel/drivers/uart.inc | 10 +++++- kernel/branches/flat_kernel/kernel.asm | 2 +- kernel/branches/flat_kernel/kernel32.inc | 2 +- 11 files changed, 64 insertions(+), 69 deletions(-) diff --git a/kernel/branches/flat_kernel/bus/pci/pci32.inc b/kernel/branches/flat_kernel/bus/pci/pci32.inc index c224880fe7..a968b3fbd5 100644 --- a/kernel/branches/flat_kernel/bus/pci/pci32.inc +++ b/kernel/branches/flat_kernel/bus/pci/pci32.inc @@ -34,7 +34,7 @@ pci_api: or al,al jnz pci_fn_1 ; PCI function 0: get pci version (AH.AL) - movzx eax,word [0x2F0000+0x9022] + movzx eax,word [BOOT_VAR+0x9022] ret pci_fn_1: @@ -42,14 +42,14 @@ pci_fn_1: jnz pci_fn_2 ; PCI function 1: get last bus in AL - mov al,[0x2F0000+0x9021] + mov al,[BOOT_VAR+0x9021] ret pci_fn_2: cmp al,2 jne pci_fn_3 ; PCI function 2: get pci access mechanism - mov al,[0x2F0000+0x9020] + mov al,[BOOT_VAR+0x9020] ret pci_fn_3: @@ -108,7 +108,7 @@ pci_make_config_cmd: align 4 pci_read_reg: - cmp byte [0x2F0000+0x9020],2 ;what mechanism will we use? + cmp byte [BOOT_VAR+0x9020],2 ;what mechanism will we use? je pci_read_reg_2 ; mechanism 1 @@ -238,7 +238,7 @@ pci_read_reg_err: align 4 pci_write_reg: - cmp byte [0x2F0000+0x9020],2 ;what mechanism will we use? + cmp byte [BOOT_VAR+0x9020],2 ;what mechanism will we use? je pci_write_reg_2 ; mechanism 1 diff --git a/kernel/branches/flat_kernel/const.inc b/kernel/branches/flat_kernel/const.inc index 11c5a841ae..0864ee0209 100644 --- a/kernel/branches/flat_kernel/const.inc +++ b/kernel/branches/flat_kernel/const.inc @@ -484,6 +484,9 @@ struc SRV SRV_FD_OFFSET equ 0x18 SRV_SIZE equ 44 +DRV_ENTRY equ 1 +DRV_EXIT equ -1 + struc COFF_HEADER { .machine dw ? .nSections dw ? diff --git a/kernel/branches/flat_kernel/core/dll.inc b/kernel/branches/flat_kernel/core/dll.inc index adecaa636d..a428df5472 100644 --- a/kernel/branches/flat_kernel/core/dll.inc +++ b/kernel/branches/flat_kernel/core/dll.inc @@ -1,6 +1,4 @@ -DRV_ENTRY equ 1 -DRV_EXIT equ -1 DRV_COMPAT equ 4 ;minimal required drivers version DRV_CURRENT equ 4 ;current drivers model version @@ -698,23 +696,23 @@ proc load_driver stdcall, driver_name:dword file_name rb 14+16+4+1 ; '/rd/1/drivers/.obj' endl - lea edx, [file_name] - mov dword [edx], '/rd/' - mov dword [edx+4], '1/dr' - mov dword [edx+8], 'iver' - mov word [edx+12], 's/' - mov esi, [driver_name] - lea edi, [edx+14] - mov ecx, 16 + lea edx, [file_name] + mov dword [edx], '/rd/' + mov dword [edx+4], '1/dr' + mov dword [edx+8], 'iver' + mov word [edx+12], 's/' + mov esi, [driver_name] + lea edi, [edx+14] + mov ecx, 16 @@: - lodsb - test al, al - jz @f - stosb - loop @b + lodsb + test al, al + jz @f + stosb + loop @b @@: - mov dword [edi], '.obj' - mov byte [edi+4], 0 + mov dword [edi], '.obj' + mov byte [edi+4], 0 stdcall load_file, edx test eax, eax diff --git a/kernel/branches/flat_kernel/core/memory.inc b/kernel/branches/flat_kernel/core/memory.inc index 704eafb9f1..dbead4aeb6 100644 --- a/kernel/branches/flat_kernel/core/memory.inc +++ b/kernel/branches/flat_kernel/core/memory.inc @@ -452,13 +452,13 @@ align 4 proc page_fault_handler pushad -; push eax -; push edx -; mov edx, 0x400 ;bocsh -; mov al,0xff ;bocsh -; out dx, al ;bocsh -; pop edx -; pop eax + push eax + push edx + mov edx, 0x400 ;bocsh + mov al,0xff ;bocsh + out dx, al ;bocsh + pop edx + pop eax mov ebp, esp mov eax, cr2 diff --git a/kernel/branches/flat_kernel/drivers/ati2d.asm b/kernel/branches/flat_kernel/drivers/ati2d.asm index 73ce044d7f..ad5941d0ba 100644 --- a/kernel/branches/flat_kernel/drivers/ati2d.asm +++ b/kernel/branches/flat_kernel/drivers/ati2d.asm @@ -65,9 +65,8 @@ R9800 equ 0x4E49 ;R350 R9800P equ 0x4E48 ;R350 R9800XT equ 0x4E4A ;R360 -OS_BASE equ 0 -new_app_base equ 0x80000000 -SLOT_BASE equ 0x0080000 +OS_BASE equ 0x80000000 +SLOT_BASE equ (OS_BASE+0x0080000) PG_SW equ 0x003 PG_NOCACHE equ 0x018 diff --git a/kernel/branches/flat_kernel/drivers/infinity.asm b/kernel/branches/flat_kernel/drivers/infinity.asm index 5fe722b789..709a7476b0 100644 --- a/kernel/branches/flat_kernel/drivers/infinity.asm +++ b/kernel/branches/flat_kernel/drivers/infinity.asm @@ -27,9 +27,11 @@ FORCE_MMX_128 equ 0 ;integer sse2 extensions DEBUG equ 1 -OS_BASE equ 0 -new_app_base equ 0x80000000 -SLOT_BASE equ OS_BASE+0x0080000 +OS_BASE equ 0x80000000 +SLOT_BASE equ (OS_BASE+0x0080000) +TASK_COUNT equ (OS_BASE+0x0003004) +CURRENT_TASK equ (OS_BASE+0x0003000) + CAPS_SSE2 equ 26 PG_SW equ 0x003 @@ -165,7 +167,7 @@ proc service_proc stdcall, ioctl:dword jne @F mov eax, [edi+output] mov eax, [eax] - mov [eax+new_app_base], dword SOUND_VERSION + mov [eax], dword SOUND_VERSION xor eax, eax ret @@: @@ -177,7 +179,7 @@ proc service_proc stdcall, ioctl:dword pop edi mov ecx, [edi+output] mov ecx, [ecx] - mov [ecx+new_app_base], ebx + mov [ecx], ebx ret @@: mov ebx, [edi+input] @@ -206,7 +208,7 @@ proc service_proc stdcall, ioctl:dword movzx eax, word [edx+STREAM.format] mov ecx, [edi+output] mov ecx, [ecx] - mov [ecx+new_app_base], eax + mov [ecx], eax xor eax, eax ret @@: @@ -227,13 +229,12 @@ proc service_proc stdcall, ioctl:dword pop edi mov ecx, [edi+output] mov ecx, [ecx] - mov [ecx+new_app_base], ebx + mov [ecx], ebx ret @@: cmp eax, SND_SETBUFF jne @F mov eax, [ebx+4] - add eax, new_app_base stdcall set_buffer, [ebx],eax,[ebx+8],[ebx+12] ret @@: @@ -248,8 +249,6 @@ proc service_proc stdcall, ioctl:dword mov eax, [edi+output] mov ecx, [eax] mov eax, [eax+4] - add ecx, new_app_base - add eax, new_app_base stdcall GetBufferVol,[ebx],ecx,eax ret @@: @@ -263,7 +262,7 @@ proc service_proc stdcall, ioctl:dword mov eax, [edx+STREAM.pan] mov ebx, [edi+output] mov ebx, [ebx] - mov [ebx+new_app_base], eax + mov [ebx], eax xor eax, eax ret @@: @@ -271,7 +270,6 @@ proc service_proc stdcall, ioctl:dword jne @F mov eax, [ebx+4] - add eax, new_app_base stdcall wave_out, [ebx],eax,[ebx+8] ret @@: @@ -292,7 +290,7 @@ proc service_proc stdcall, ioctl:dword mov eax, [edx+STREAM.in_size] mov ecx, [edi+output] mov ecx, [ecx] - mov [ecx+new_app_base], eax + mov [ecx], eax xor eax, eax ret @@: @@ -308,10 +306,6 @@ restore inp_size restore output restore out_size -TASK_COUNT equ 0x0003004 -CURRENT_TASK equ 0x0003000 - - align 4 proc CreateBuffer stdcall, format:dword, size:dword locals @@ -653,8 +647,8 @@ proc wave_out stdcall, str:dword,src:dword,size:dword test esi, esi jz .fail - cmp esi, new_app_base - jb .fail + cmp esi, OS_BASE + ja .fail mov [state_saved], 0 diff --git a/kernel/branches/flat_kernel/drivers/sis.asm b/kernel/branches/flat_kernel/drivers/sis.asm index 5e500eb03b..3ea1141ff1 100644 --- a/kernel/branches/flat_kernel/drivers/sis.asm +++ b/kernel/branches/flat_kernel/drivers/sis.asm @@ -84,7 +84,6 @@ CTRL_CNT_GIE equ 0x00000001 ; GPI Interrupt Enable CODEC_REG_POWERDOWN equ 0x26 CODEC_REG_ST equ 0x26 - DEV_PLAY equ 1 DEV_STOP equ 2 DEV_CALLBACK equ 3 @@ -243,9 +242,8 @@ end virtual EVENT_NOTIFY equ 0x00000200 -OS_BASE equ 0; 0x80400000 +OS_BASE equ 0x80000000 SLOT_BASE equ OS_BASE+0x0080000 -new_app_base equ 0x80000000 public START public service_proc @@ -369,15 +367,14 @@ proc service_proc stdcall, ioctl:dword cmp eax, DEV_GET_MASTERVOL jne @F mov ebx, [edi+output] - add ebx, new_app_base stdcall get_master_vol, ebx ret -@@: - cmp eax, DEV_GET_INFO - jne @F - mov ebx, [edi+output] - stdcall get_dev_info, ebx - ret +;@@: +; cmp eax, DEV_GET_INFO +; jne @F +; mov ebx, [edi+output] +; stdcall get_dev_info, ebx +; ret @@: .fail: or eax, -1 diff --git a/kernel/branches/flat_kernel/drivers/sound.asm b/kernel/branches/flat_kernel/drivers/sound.asm index 045118a29b..15c8fcaf65 100644 --- a/kernel/branches/flat_kernel/drivers/sound.asm +++ b/kernel/branches/flat_kernel/drivers/sound.asm @@ -270,9 +270,8 @@ end virtual EVENT_NOTIFY equ 0x00000200 -OS_BASE equ 0; +OS_BASE equ 0x80000000 SLOT_BASE equ OS_BASE+0x0080000 -new_app_base equ 0x80000000 public START public service_proc @@ -413,7 +412,6 @@ proc service_proc stdcall, ioctl:dword cmp eax, DEV_GET_MASTERVOL jne @F mov ebx, [edi+output] - add ebx, new_app_base stdcall get_master_vol, ebx ret ;@@: @@ -1409,5 +1407,3 @@ ctrl AC_CNTRL lpc_bus rd 1 civ_val rd 1 - - diff --git a/kernel/branches/flat_kernel/drivers/uart.inc b/kernel/branches/flat_kernel/drivers/uart.inc index e8e1812562..b22c992dd1 100644 --- a/kernel/branches/flat_kernel/drivers/uart.inc +++ b/kernel/branches/flat_kernel/drivers/uart.inc @@ -164,7 +164,11 @@ CONNECTION_SIZE equ 7*4 UART_VERSION equ 0x12345678 ;debug -init_uart_service: +proc init_uart_service stdcall, state:dword + + cmp [state], 1 + jne .stop + mov eax, UART_SIZE call malloc test eax, eax @@ -241,10 +245,14 @@ init_uart_service: stdcall attach_int_handler, COM_1_IRQ, com_1_isr stdcall reg_service, sz_uart_srv, uart_proc + mov [eax+SRV.entry], init_uart_service ret .fail: +.stop: xor eax, eax ret +endp + handle equ IOCTL.handle io_code equ IOCTL.io_code diff --git a/kernel/branches/flat_kernel/kernel.asm b/kernel/branches/flat_kernel/kernel.asm index 2ec3ea0e9b..741bd91960 100644 --- a/kernel/branches/flat_kernel/kernel.asm +++ b/kernel/branches/flat_kernel/kernel.asm @@ -721,7 +721,7 @@ first_app_found: cmp [IDEContrRegsBaseAddr], 0 setnz [dma_hdd] - call init_uart_service + stdcall init_uart_service, DRV_ENTRY sti jmp $ ; wait here for timer to take control diff --git a/kernel/branches/flat_kernel/kernel32.inc b/kernel/branches/flat_kernel/kernel32.inc index b772a0244d..bd1a48619d 100644 --- a/kernel/branches/flat_kernel/kernel32.inc +++ b/kernel/branches/flat_kernel/kernel32.inc @@ -264,7 +264,7 @@ include "video/cursors.inc" ; cursors functions include "network/stack.inc" -include "drivers/comport.asm" +include "drivers/uart.inc" ; Mouse pointer