From d48d0fb1bb53262bf44a03dbe8388529f1566a1c Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 19 May 2006 15:06:51 +0000 Subject: Add the concept of a "user pointer" (similar to the void __user * in the kernel), which encapsulates the information needed to refer to an external buffer. Under normal operation, this can just be a void * equivalent, but under -DKEEP_IT_REAL it would be a segoff_t equivalent. Use this concept to avoid the need for bounce buffers in int13.c, which reduces memory usage and opens up the possibility of using multi-sector reads. Extend the block-device API and the SCSI block device implementation to support multi-sector reads. Update iscsi.c to use user buffers. Move the obsolete portions of realmode.h to old_realmode.h. MS-DOS now boots an order of magnitude faster over iSCSI (~10 seconds from power-up to C:> prompt in bochs). --- src/include/gpxe/blockdev.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/include/gpxe/blockdev.h') diff --git a/src/include/gpxe/blockdev.h b/src/include/gpxe/blockdev.h index 59f5bf746..467ed1d9d 100644 --- a/src/include/gpxe/blockdev.h +++ b/src/include/gpxe/blockdev.h @@ -8,6 +8,8 @@ * */ +#include + /** A block device */ struct block_device { /** Block size */ @@ -19,21 +21,23 @@ struct block_device { * * @v blockdev Block device * @v block Block number + * @v count Block count * @v buffer Data buffer * @ret rc Return status code */ int ( * read ) ( struct block_device *blockdev, uint64_t block, - void *buffer ); + unsigned long count, userptr_t buffer ); /** * Write block * * @v blockdev Block device * @v block Block number + * @v count Block count * @v buffer Data buffer * @ret rc Return status code */ int ( * write ) ( struct block_device *blockdev, uint64_t block, - const void *buffer ); + unsigned long count, userptr_t buffer ); }; #endif /* _GPXE_BLOCKDEV_H */ -- cgit v1.2.3-55-g7522