summaryrefslogtreecommitdiff
path: root/lume-legacy/include/kernel/buf.h
diff options
context:
space:
mode:
Diffstat (limited to 'lume-legacy/include/kernel/buf.h')
-rw-r--r--lume-legacy/include/kernel/buf.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/lume-legacy/include/kernel/buf.h b/lume-legacy/include/kernel/buf.h
new file mode 100644
index 0000000..d0d849c
--- /dev/null
+++ b/lume-legacy/include/kernel/buf.h
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2026 Richard QIn
+ */
+
+#pragma once
+#include "common/types.h"
+#include "kernel/spinlock.h"
+
+#define BSIZE 1024
+#define NBUF 30
+
+struct Buf
+{
+ int valid; // Whether the data has been read from the disk (1=valid, 0=invalid)
+ int disk; // Whether it has been held by the driver (dirty bit/write-back flag is usually extended here)
+ uint32 dev; // Device Number
+ uint32 blockno; // Block number
+ uint32 refcnt; // Reference Counting
+ struct Buf *prev; // LRU linked list
+ struct Buf *next;
+ uchar data[BSIZE];
+
+ Mutex lock; // Sleep Lock
+};
+
+namespace BufferCache
+{
+ void init();
+ struct Buf *bread(uint32 dev, uint32 blockno);
+ void bwrite(struct Buf *b);
+ void brelse(struct Buf *b);
+ void bpin(struct Buf *b);
+ void bunpin(struct Buf *b);
+} // namespace BufferCache