:: commit bbfc5d36af5329722a6f7dff5355b90a8ea8264e

mintsuki <mintsuki@protonmail.com> — 2019-06-01 21:48

parents: fc6c21ec77

Adjustments to disk driver

diff --git a/drivers/disk.c b/drivers/disk.c
index 911ea89e..9c8d403e 100644
--- a/drivers/disk.c
+++ b/drivers/disk.c
@@ -1,70 +1,45 @@
 #include <stdint.h>
 #include <stddef.h>
 #include <lib/libc.h>
-#include <lib/disk.h>
+#include <drivers/disk.h>
 #include <lib/real.h>
 #include <lib/print.h>
 
-#define DAP_SIZE 16
 #define SECTOR_SIZE 512
 
-static struct {
-    unsigned short size;
-    unsigned short count;
-    unsigned short offset;
-    unsigned short segment;
-    unsigned long long lba;
-} dap = { DAP_SIZE, 0, 0, 0, 0 };
-
-static unsigned char sector_buf[512];
+static uint8_t sector_buf[512];
 
-static inline void setup_dap(int lba, int count, int off, int seg) {
-    dap.lba = lba;
-    dap.count = count;
-    dap.offset = off;
-    dap.segment = seg;
-}
+static struct {
+    uint16_t size;
+    uint16_t count;
+    uint16_t offset;
+    uint16_t segment;
+    uint64_t lba;
+} dap = { 16, 1, 0, 0, 0 };
 
 static int check_results(struct rm_regs *out) {
     int ah = (out->eax >> 8) & 0xFF;
-    
-    if (ah) 
+
+    if (ah)
         print("Disk error %x\n", ah);
 
     return ah;
-} 
+}
+
+int read_sector(int drive, int lba, int count, uint8_t *buffer) {
+    dap.offset = (uint16_t)(size_t)sector_buf;
 
-int read_sector(int drive, int lba, int count, unsigned char *buffer) {
     while (count--) {
-        setup_dap(lba++, 1, sector_buf, 0);
+        dap.lba = lba++;
         struct rm_regs r = {0};
         r.eax = 0x4200;
         r.edx = drive;
         r.esi = (unsigned int)&dap;
         rm_int(0x13, &r, &r);
-        if (check_results(&r)) 
+        if (check_results(&r))
             return (r.eax >> 8) & 0xFF;
 
         memcpy(buffer, sector_buf, SECTOR_SIZE);
-        
-        buffer += SECTOR_SIZE;
-    }
-        
-    return 0;
-}
-
-int write_sector(int drive, int lba, int count, const unsigned char *buffer) {
-    while (count--) {
-        memcpy(sector_buf, buffer, SECTOR_SIZE);
-
-        setup_dap(lba++, 1, sector_buf, 0);
-        struct rm_regs r = {0};
-        r.eax = 0x4300;
-        r.edx = drive;
-        r.esi = (unsigned int)&dap;
-        rm_int(0x13, &r, &r);
-        if (check_results(&r)) 
-            return (r.eax >> 8) & 0xFF;
 
         buffer += SECTOR_SIZE;
     }
diff --git a/drivers/disk.h b/drivers/disk.h
index 0fb0844c..90ac6799 100644
--- a/drivers/disk.h
+++ b/drivers/disk.h
@@ -1,7 +1,8 @@
 #ifndef __DISK_H__
 #define __DISK_H__
 
-int read_sector(int drive, int lba, int count, unsigned char *buffer);
-int write_sector(int drive, int lba, int count, unsigned char *buffer);
+#include <stdint.h>
+
+int read_sector(int, int, int, uint8_t *);
 
 #endif
tab: 248 wrap: offon