summaryrefslogtreecommitdiff
path: root/kernel/fs/block.c
diff options
context:
space:
mode:
authorJake Mannens <jake72360@gmail.com>2018-12-23 17:22:14 +1100
committerJake Mannens <jake72360@gmail.com>2018-12-23 17:22:14 +1100
commitce91afe04bd24fe9277a3f7b68ddf0654f1634ac (patch)
tree428ca2ee2ca73e5c24c45c724178d2cdc9320c4d /kernel/fs/block.c
parenta8a4f0710210ed91097a30fc26308c50be73d4de (diff)
Corrected a bug in the hard-disk driver where calls to hd_read_block()
after hd_init() failed (on a system without a disk), would hang. Now, hd_read_block() will fail if no hard disk is present on the system (as indicated by the nblocks count being equal to zero). The same fix also applies to the hd_write_block() function. The hd_init() function now returns a status indicating either successful drive detection and initialization, or failure. This return status won't likely be needed due to the above bug-fix, but may prove useful in the future. Added framework for a block buffer subsystem. This subsystem uses pre-allocated memory to cache blocks that are requested from the block device subsystem. Cached blocks are stored on a linked list sorted in order of usage frequency. Modified the block read/write functions so that they no longer accept a length parameter. The block I/O functions will only read or write a single block at a time. If multiple blocks are required, multiple calls will have to be made. This is to reduce complexity of block device drivers and make integration with the new buffer subsystem easier. Removed all calls to the ATA hard-disk driver. For now, it seems that floppy media will be best as it allows for real-world hardware testing. Furthermore, large portions of the hard-disk driver will need to be re-written anyway once the block buffer subsystem is complete as it only supports PIO transfers, whilst a buffer system will require DMA transfers. As the hard-disk was previously the only supported block device, the block device read/write functions will now always fail, returning -1.
Diffstat (limited to 'kernel/fs/block.c')
-rw-r--r--kernel/fs/block.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/fs/block.c b/kernel/fs/block.c
index b3f7386..caf97d2 100644
--- a/kernel/fs/block.c
+++ b/kernel/fs/block.c
@@ -1,10 +1,9 @@
-#include <kernel/hd.h>
#include <sys/types.h>
-size_t block_read(void *buf, size_t block, size_t len) {
- return hd_read_block(buf, block, len);
+int block_read(void *buf, size_t block) {
+ return -1;
}
-size_t block_write(void *buf, size_t block, size_t len) {
- return hd_write_block(buf, block, len);
+int block_write(void *buf, size_t block) {
+ return -1;
}