mirror of
https://github.com/ipxe/ipxe
synced 2026-01-01 17:34:42 +03:00
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).
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <gpxe/blockdev.h>
|
||||
#include <gpxe/uaccess.h>
|
||||
|
||||
/**
|
||||
* @defgroup scsiops SCSI operation codes
|
||||
@@ -123,14 +124,14 @@ struct scsi_command {
|
||||
/** CDB for this command */
|
||||
union scsi_cdb cdb;
|
||||
/** Data-out buffer (may be NULL) */
|
||||
const void *data_out;
|
||||
userptr_t data_out;
|
||||
/** Data-out buffer length
|
||||
*
|
||||
* Must be zero if @c data_out is NULL
|
||||
*/
|
||||
size_t data_out_len;
|
||||
/** Data-in buffer (may be NULL) */
|
||||
void *data_in;
|
||||
userptr_t data_in;
|
||||
/** Data-in buffer length
|
||||
*
|
||||
* Must be zero if @c data_in is NULL
|
||||
|
||||
Reference in New Issue
Block a user