iPXE
Data Structures | Functions
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. More...
 

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 
)

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 }
struct refcnt refcnt
Reference count.
Definition: blocktrans.h:21
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
static struct interface_descriptor blktrans_block_desc
Block device translator block device interface descriptor.
Definition: blocktrans.c:116
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition: refcnt.h:65
uint16_t size
Buffer size.
Definition: dwmac.h:14
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
Definition: netvsc.h:16
static void xferbuf_void_init(struct xfer_buffer *xferbuf)
Initialise void data transfer buffer.
Definition: xferbuf.h:96
#define ENOMEM
Not enough space.
Definition: errno.h:535
A block device translator.
Definition: blocktrans.h:19
struct interface xfer
Data transfer interface.
Definition: blocktrans.h:25
void * zalloc(size_t size)
Allocate cleared memory.
Definition: malloc.c:662
static struct interface_descriptor blktrans_xfer_desc
Block device translator data transfer interface descriptor.
Definition: blocktrans.c:128
void intf_insert(struct interface *intf, struct interface *upper, struct interface *lower)
Insert a filter interface.
Definition: interface.c:402
#define DBGC2(...)
Definition: compiler.h:522
uint8_t block[3][8]
DES-encrypted blocks.
Definition: mschapv2.h:12
struct xfer_buffer xferbuf
Data transfer buffer.
Definition: blocktrans.h:28
size_t blksize
Block size.
Definition: blocktrans.h:30
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
Definition: interface.h:204
static void xferbuf_fixed_init(struct xfer_buffer *xferbuf, void *data, size_t len)
Initialise fixed-size data transfer buffer.
Definition: xferbuf.h:81
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
#define ref_put(refcnt)
Drop reference to object.
Definition: refcnt.h:107
struct interface block
Block device interface.
Definition: blocktrans.h:23

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().