chain.c32, libcom32: Move write_verify_sector() as disk_write_verify_sector()
authorShao Miller <shao.miller@yrdsb.edu.on.ca>
Mon, 28 Jun 2010 06:26:11 +0000 (02:26 -0400)
committerShao Miller <shao.miller@yrdsb.edu.on.ca>
Sat, 10 Jul 2010 05:03:05 +0000 (01:03 -0400)
Moving portions of chain.c32 into libcom32.

Signed-off-by: Shao Miller <shao.miller@yrdsb.edu.on.ca>
com32/include/syslinux/disk.h
com32/lib/syslinux/disk.c
com32/modules/chain.c

index ef002e2..82513ce 100644 (file)
@@ -63,5 +63,7 @@ extern void *disk_read_sectors(struct disk_info *diskinfo, uint64_t lba,
                               uint8_t count);
 extern int disk_write_sector(struct disk_info *diskinfo, unsigned int lba,
                             const void *data);
+extern int disk_write_verify_sector(struct disk_info *diskinfo,
+                                   unsigned int lba, const void *buf);
 
 #endif /* _SYSLINUX_DISK_H */
index 7b7cbe4..8223534 100644 (file)
@@ -254,3 +254,32 @@ int disk_write_sector(struct disk_info *diskinfo, unsigned int lba,
 
     return 0;                  /* ok */
 }
+
+/**
+ * Write a disk block and verify it was written.
+ *
+ * @v diskinfo                 The disk drive to write to
+ * @v lba                      The logical block address to begin writing at
+ * @v buf                      The data to write
+ * @ret rv                     0 upon success, -1 upon failure
+ *
+ * Uses the disk number and information from diskinfo.
+ * Writes a sector to a disk drive starting at lba, then reads it back
+ * to verify it was written correctly.
+ */
+int disk_write_verify_sector(struct disk_info *diskinfo, unsigned int lba,
+                            const void *buf)
+{
+    char *rb;
+    int rv;
+
+    rv = disk_write_sector(diskinfo, lba, buf);
+    if (rv)
+       return rv;              /* Write failure */
+    rb = disk_read_sectors(diskinfo, lba, 1);
+    if (!rb)
+       return -1;              /* Readback failure */
+    rv = memcmp(buf, rb, SECTOR);
+    free(rb);
+    return rv ? -1 : 0;
+}
index de827a2..6bf8827 100644 (file)
@@ -147,22 +147,6 @@ static inline void error(const char *msg)
 
 static struct disk_info diskinfo;
 
-static int write_verify_sector(unsigned int lba, const void *buf)
-{
-    char *rb;
-    int rv;
-
-    rv = disk_write_sector(&diskinfo, lba, buf);
-    if (rv)
-       return rv;              /* Write failure */
-    rb = disk_read_sectors(&diskinfo, lba, 1);
-    if (!rb)
-       return -1;              /* Readback failure */
-    rv = memcmp(buf, rb, SECTOR);
-    free(rb);
-    return rv ? -1 : 0;
-}
-
 /*
  * CHS (cylinder, head, sector) value extraction macros.
  * Taken from WinVBlock.  Does not expand to an lvalue
@@ -1008,7 +992,7 @@ static int hide_unhide(struct mbr *mbr, int part)
     }
 
     if (write_back)
-       return write_verify_sector(0, mbr);
+       return disk_write_verify_sector(&diskinfo, 0, mbr);
 
     return 0;                  /* ok */
 }