StupidOS/kernel/bio.inc

97 lines
1.4 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 {
2024-09-11 13:52:55 +00:00
.dev dw ?
.flags db ?
.bcount db ?
2024-07-23 05:50:35 +00:00
.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
2024-09-11 13:52:55 +00:00
;; Constants: Buffer flags
;;
;; BUFFER_WRITE - XXX
;; BUFFER_READ - XXX
;; BUFFER_ERROR - XXX
;; BUFFER_DIRTY - XXX
;; BUFFER_INVAL - mark buffer as invalid
BUFFER_WRITE = 0x0
BUFFER_READ = 0x1
BUFFER_ERROR = 0x2
BUFFER_DIRTY = 0x4
BUFFER_INVAL = 0x8
2024-07-23 05:50:35 +00:00
;; Function: bio_init
bio_init:
mov ecx, sizeof.Buffer * 30
xor ax, ax
mov edi, aBuffers
rep stosb
ret
2024-09-11 13:52:55 +00:00
;; Function: bio_getblk
;;
bio_getblk:
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
@@:
2024-09-11 13:52:55 +00:00
xchg bx, bx
mov eax, aBuffers
2024-09-10 08:03:32 +00:00
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