iPXE
blocktrans.h File Reference

Block device translator. More...

#include <stdint.h>
#include <ipxe/refcnt.h>
#include <ipxe/interface.h>
#include <ipxe/xferbuf.h>

Go to the source code of this file.

Data Structures

struct  block_translator
 A block device translator. More...

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
int block_translate (struct interface *block, void *buffer, size_t size)
 Insert block device translator.

Detailed Description

Block device translator.

Definition in file blocktrans.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ block_translate()

int block_translate ( struct interface * block,
void * buffer,
size_t size )
extern

Insert block device translator.

Parameters
blockBlock device interface
bufferData buffer (or NULL)
sizeLength of data buffer, or block size
Return values
rcReturn status code

Definition at line 140 of file blocktrans.c.

140 {
141 struct block_translator *blktrans;
142 int rc;
143
144 /* Allocate and initialise structure */
145 blktrans = zalloc ( sizeof ( *blktrans ) );
146 if ( ! blktrans ) {
147 rc = -ENOMEM;
148 goto err_alloc;
149 }
150 ref_init ( &blktrans->refcnt, NULL );
151 intf_init ( &blktrans->block, &blktrans_block_desc, &blktrans->refcnt );
152 intf_init ( &blktrans->xfer, &blktrans_xfer_desc, &blktrans->refcnt );
153 if ( buffer ) {
154 xferbuf_fixed_init ( &blktrans->xferbuf, buffer, size );
155 } else {
156 xferbuf_void_init ( &blktrans->xferbuf );
157 blktrans->blksize = size;
158 }
159
160 /* Attach to interfaces, mortalise self, and return */
161 intf_insert ( block, &blktrans->block, &blktrans->xfer );
162 ref_put ( &blktrans->refcnt );
163
164 DBGC2 ( blktrans, "BLKTRANS %p created", blktrans );
165 if ( buffer ) {
166 DBGC2 ( blktrans, " for %#lx+%#zx",
167 virt_to_phys ( buffer ), size );
168 }
169 DBGC2 ( blktrans, "\n" );
170 return 0;
171
172 ref_put ( &blktrans->refcnt );
173 err_alloc:
174 return rc;
175}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
struct arbelprm_rc_send_wqe rc
Definition arbel.h:3
static struct interface_descriptor blktrans_xfer_desc
Block device translator data transfer interface descriptor.
Definition blocktrans.c:128
static struct interface_descriptor blktrans_block_desc
Block device translator block device interface descriptor.
Definition blocktrans.c:116
#define DBGC2(...)
Definition compiler.h:522
uint16_t size
Buffer size.
Definition dwmac.h:3
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
Definition netvsc.h:5
#define ENOMEM
Not enough space.
Definition errno.h:535
void intf_insert(struct interface *intf, struct interface *upper, struct interface *lower)
Insert a filter interface.
Definition interface.c:402
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
Definition interface.h:204
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:662
uint8_t block[3][8]
DES-encrypted blocks.
Definition mschapv2.h:1
#define ref_put(refcnt)
Drop reference to object.
Definition refcnt.h:107
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition refcnt.h:65
A block device translator.
Definition blocktrans.h:19
struct interface xfer
Data transfer interface.
Definition blocktrans.h:25
size_t blksize
Block size.
Definition blocktrans.h:30
struct xfer_buffer xferbuf
Data transfer buffer.
Definition blocktrans.h:28
struct refcnt refcnt
Reference count.
Definition blocktrans.h:21
struct interface block
Block device interface.
Definition blocktrans.h:23
static void xferbuf_fixed_init(struct xfer_buffer *xferbuf, void *data, size_t len)
Initialise fixed-size data transfer buffer.
Definition xferbuf.h:81
static void xferbuf_void_init(struct xfer_buffer *xferbuf)
Initialise void data transfer buffer.
Definition xferbuf.h:96

References block_translator::blksize, blktrans_block_desc, blktrans_xfer_desc, block, block_translator::block, buffer, DBGC2, ENOMEM, intf_init(), intf_insert(), NULL, rc, ref_init, ref_put, block_translator::refcnt, size, block_translator::xfer, block_translator::xferbuf, xferbuf_fixed_init(), xferbuf_void_init(), and zalloc().

Referenced by http_block_read(), and http_block_read_capacity().