
On 17.01.18 20:16, Heinrich Schuchardt wrote:
Add the revision constants. Depending on the revision additional fields are needed in the media descriptor. Use efi_uintn_t for number of bytes to read or write.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
v2 no change
include/efi_api.h | 10 ++++++++-- lib/efi_loader/efi_disk.c | 8 ++++---- 2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/include/efi_api.h b/include/efi_api.h index 502fffed20..0bc244444d 100644 --- a/include/efi_api.h +++ b/include/efi_api.h @@ -424,18 +424,24 @@ struct efi_block_io_media u32 io_align; u8 pad2[4]; u64 last_block;
Please add comments on each field which revision it's available in. Or alternatively revision cut lines, like /* Below is available as of revision 2 */.
Alex
- u64 lowest_aligned_lba;
- u32 logical_blocks_per_physical_block;
- u32 optimal_transfer_length_granualarity;
};
+#define EFI_BLOCK_IO_PROTOCOL_REVISION2 0x00020001 +#define EFI_BLOCK_IO_PROTOCOL_REVISION3 0x0002001f
struct efi_block_io { u64 revision; struct efi_block_io_media *media; efi_status_t (EFIAPI *reset)(struct efi_block_io *this, char extended_verification); efi_status_t (EFIAPI *read_blocks)(struct efi_block_io *this,
u32 media_id, u64 lba, unsigned long buffer_size,
efi_status_t (EFIAPI *write_blocks)(struct efi_block_io *this,u32 media_id, u64 lba, efi_uintn_t buffer_size, void *buffer);
u32 media_id, u64 lba, unsigned long buffer_size,
efi_status_t (EFIAPI *flush_blocks)(struct efi_block_io *this);u32 media_id, u64 lba, efi_uintn_t buffer_size, void *buffer);
}; diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index 92c3f45ca5..8f84e7788e 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -91,7 +91,7 @@ static efi_status_t efi_disk_rw_blocks(struct efi_block_io *this, }
static efi_status_t EFIAPI efi_disk_read_blocks(struct efi_block_io *this,
u32 media_id, u64 lba, unsigned long buffer_size,
u32 media_id, u64 lba, efi_uintn_t buffer_size, void *buffer)
{ void *real_buffer = buffer; @@ -112,7 +112,7 @@ static efi_status_t EFIAPI efi_disk_read_blocks(struct efi_block_io *this, real_buffer = efi_bounce_buffer; #endif
- EFI_ENTRY("%p, %x, %"PRIx64", %lx, %p", this, media_id, lba,
EFI_ENTRY("%p, %x, %" PRIx64 ", %zx, %p", this, media_id, lba, buffer_size, buffer);
r = efi_disk_rw_blocks(this, media_id, lba, buffer_size, real_buffer,
@@ -126,7 +126,7 @@ static efi_status_t EFIAPI efi_disk_read_blocks(struct efi_block_io *this, }
static efi_status_t EFIAPI efi_disk_write_blocks(struct efi_block_io *this,
u32 media_id, u64 lba, unsigned long buffer_size,
u32 media_id, u64 lba, efi_uintn_t buffer_size, void *buffer)
{ void *real_buffer = buffer; @@ -147,7 +147,7 @@ static efi_status_t EFIAPI efi_disk_write_blocks(struct efi_block_io *this, real_buffer = efi_bounce_buffer; #endif
- EFI_ENTRY("%p, %x, %"PRIx64", %lx, %p", this, media_id, lba,
EFI_ENTRY("%p, %x, %" PRIx64 ", %zx, %p", this, media_id, lba, buffer_size, buffer);
/* Populate bounce buffer if necessary */