StupidOS/kernel/bio.inc

75 lines
1.1 KiB
PHP
Raw Normal View History

2024-07-23 05:50:35 +00:00
;; File: bio.inc
;; Buffer cache
;; Struc: Buffer
2024-09-10 08:03:32 +00:00
;;
;; .dev - Device id
;; .block - Block number
;; .ulock - lock
;; .refcount - refcount
;; .data - block data
2024-07-23 05:50:35 +00:00
struc Buffer {
.dev dd ?
.block dd ?
.ulock dd ?
.refcount dd ?
2024-07-24 13:24:52 +00:00
.data db 1024 dup(?)
2024-07-23 05:50:35 +00:00
}
DEFN Buffer
;; Function: bio_init
bio_init:
mov ecx, sizeof.Buffer * 30
xor ax, ax
mov edi, aBuffers
rep stosb
ret
2024-07-22 15:32:12 +00:00
;; Function: bio_read
;;
2024-09-10 08:03:32 +00:00
;; In:
;; EAX - devid (AH major, AL minor)
;; ECX - block
2024-07-22 15:32:12 +00:00
bio_bread:
2024-09-10 08:03:32 +00:00
push eax
2024-07-23 05:50:35 +00:00
mov eax, uBIOLock
call lock_acquire
2024-09-10 08:03:32 +00:00
pop eax
2024-07-23 05:50:35 +00:00
2024-09-10 08:03:32 +00:00
movzx ecx, ah
shl ecx, 2
add ecx, aBlockDevices
cmp ecx, aBlockDevices.end
jb @f
mov esi, szErrorInvalidDevid
call klog
jmp .end
@@:
mov ecx, [ecx]
mov ecx, [ecx + BlkDev.strategy]
call ecx
.end:
2024-07-23 05:50:35 +00:00
mov eax, uBIOLock
call lock_release
ret
2024-09-10 08:03:32 +00:00
;; Function: bio_bwrite
bio_bwrite:
ret
2024-07-22 15:32:12 +00:00
;; Function: bio_brelse
;; Unbusy a buffer and release it to the free lists.
2024-07-23 05:50:35 +00:00
bio_brelse:
2024-07-22 15:32:12 +00:00
mov eax, uBIOLock
call lock_acquire
mov eax, uBIOLock
call lock_release
2024-07-23 05:50:35 +00:00
ret
uBIOLock dd 0
2024-09-10 08:03:32 +00:00
szErrorInvalidDevid db "Error: invalid devid", 0