mirror of
https://github.com/ipxe/ipxe
synced 2026-01-30 16:40:24 +03:00
[block] Remove userptr_t from block device abstraction
Simplify the block device code by assuming that all read/write buffers are directly accessible via pointer dereferences. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -45,8 +45,8 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int block_read ( struct interface *control, struct interface *data,
|
||||
uint64_t lba, unsigned int count,
|
||||
userptr_t buffer, size_t len ) {
|
||||
uint64_t lba, unsigned int count, void *buffer,
|
||||
size_t len ) {
|
||||
struct interface *dest;
|
||||
block_read_TYPE ( void * ) *op =
|
||||
intf_get_dest_op ( control, block_read, &dest );
|
||||
@@ -76,8 +76,8 @@ int block_read ( struct interface *control, struct interface *data,
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int block_write ( struct interface *control, struct interface *data,
|
||||
uint64_t lba, unsigned int count,
|
||||
userptr_t buffer, size_t len ) {
|
||||
uint64_t lba, unsigned int count, void *buffer,
|
||||
size_t len ) {
|
||||
struct interface *dest;
|
||||
block_write_TYPE ( void * ) *op =
|
||||
intf_get_dest_op ( control, block_write, &dest );
|
||||
|
||||
@@ -81,7 +81,7 @@ static void blktrans_xferbuf_write ( struct xfer_buffer *xferbuf, size_t offset,
|
||||
if ( blktrans->buffer ) {
|
||||
|
||||
/* Write data to buffer */
|
||||
copy_to_user ( blktrans->buffer, offset, data, len );
|
||||
memcpy ( ( blktrans->buffer + offset ), data, len );
|
||||
|
||||
} else {
|
||||
|
||||
@@ -107,7 +107,7 @@ static void blktrans_xferbuf_read ( struct xfer_buffer *xferbuf, size_t offset,
|
||||
if ( blktrans->buffer ) {
|
||||
|
||||
/* Read data from buffer */
|
||||
copy_from_user ( data, blktrans->buffer, offset, len );
|
||||
memcpy ( data, ( blktrans->buffer + offset ), len );
|
||||
|
||||
} else {
|
||||
|
||||
@@ -216,11 +216,11 @@ static struct interface_descriptor blktrans_xfer_desc =
|
||||
* Insert block device translator
|
||||
*
|
||||
* @v block Block device interface
|
||||
* @v buffer Data buffer (or UNULL)
|
||||
* @v buffer Data buffer (or NULL)
|
||||
* @v size Length of data buffer, or block size
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int block_translate ( struct interface *block, userptr_t buffer, size_t size ) {
|
||||
int block_translate ( struct interface *block, void *buffer, size_t size ) {
|
||||
struct block_translator *blktrans;
|
||||
int rc;
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||
*
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <ipxe/sanboot.h>
|
||||
|
||||
|
||||
@@ -424,10 +424,10 @@ int sandev_reopen ( struct san_device *sandev ) {
|
||||
struct san_command_rw_params {
|
||||
/** SAN device read/write operation */
|
||||
int ( * block_rw ) ( struct interface *control, struct interface *data,
|
||||
uint64_t lba, unsigned int count,
|
||||
userptr_t buffer, size_t len );
|
||||
uint64_t lba, unsigned int count, void *buffer,
|
||||
size_t len );
|
||||
/** Data buffer */
|
||||
userptr_t buffer;
|
||||
void *buffer;
|
||||
/** Starting LBA */
|
||||
uint64_t lba;
|
||||
/** Block count */
|
||||
@@ -594,11 +594,11 @@ int sandev_reset ( struct san_device *sandev ) {
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
static int sandev_rw ( struct san_device *sandev, uint64_t lba,
|
||||
unsigned int count, userptr_t buffer,
|
||||
unsigned int count, void *buffer,
|
||||
int ( * block_rw ) ( struct interface *control,
|
||||
struct interface *data,
|
||||
uint64_t lba, unsigned int count,
|
||||
userptr_t buffer, size_t len ) ) {
|
||||
void *buffer, size_t len ) ) {
|
||||
union san_command_params params;
|
||||
unsigned int remaining;
|
||||
size_t frag_len;
|
||||
@@ -643,11 +643,12 @@ static int sandev_rw ( struct san_device *sandev, uint64_t lba,
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int sandev_read ( struct san_device *sandev, uint64_t lba,
|
||||
unsigned int count, userptr_t buffer ) {
|
||||
unsigned int count, void *buffer ) {
|
||||
int rc;
|
||||
|
||||
/* Read from device */
|
||||
if ( ( rc = sandev_rw ( sandev, lba, count, buffer, block_read ) ) != 0 )
|
||||
if ( ( rc = sandev_rw ( sandev, lba, count, buffer,
|
||||
block_read ) ) != 0 )
|
||||
return rc;
|
||||
|
||||
return 0;
|
||||
@@ -663,11 +664,12 @@ int sandev_read ( struct san_device *sandev, uint64_t lba,
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int sandev_write ( struct san_device *sandev, uint64_t lba,
|
||||
unsigned int count, userptr_t buffer ) {
|
||||
unsigned int count, void *buffer ) {
|
||||
int rc;
|
||||
|
||||
/* Write to device */
|
||||
if ( ( rc = sandev_rw ( sandev, lba, count, buffer, block_write ) ) != 0 )
|
||||
if ( ( rc = sandev_rw ( sandev, lba, count, buffer,
|
||||
block_write ) ) != 0 )
|
||||
return rc;
|
||||
|
||||
/* Quiesce system. This is a heuristic designed to ensure
|
||||
@@ -799,8 +801,7 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) {
|
||||
}
|
||||
|
||||
/* Read primary volume descriptor */
|
||||
if ( ( rc = sandev_read ( sandev, lba, count,
|
||||
virt_to_user ( scratch ) ) ) != 0 ) {
|
||||
if ( ( rc = sandev_read ( sandev, lba, count, scratch ) ) != 0 ) {
|
||||
DBGC ( sandev->drive, "SAN %#02x could not read ISO9660 "
|
||||
"primary volume descriptor: %s\n",
|
||||
sandev->drive, strerror ( rc ) );
|
||||
|
||||
Reference in New Issue
Block a user