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

◆ 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 139 of file blocktrans.c.

139  {
140  struct block_translator *blktrans;
141  int rc;
142 
143  /* Allocate and initialise structure */
144  blktrans = zalloc ( sizeof ( *blktrans ) );
145  if ( ! blktrans ) {
146  rc = -ENOMEM;
147  goto err_alloc;
148  }
149  ref_init ( &blktrans->refcnt, NULL );
150  intf_init ( &blktrans->block, &blktrans_block_desc, &blktrans->refcnt );
151  intf_init ( &blktrans->xfer, &blktrans_xfer_desc, &blktrans->refcnt );
152  if ( buffer ) {
153  xferbuf_fixed_init ( &blktrans->xferbuf, buffer, size );
154  } else {
155  xferbuf_void_init ( &blktrans->xferbuf );
156  blktrans->blksize = size;
157  }
158 
159  /* Attach to interfaces, mortalise self, and return */
160  intf_insert ( block, &blktrans->block, &blktrans->xfer );
161  ref_put ( &blktrans->refcnt );
162 
163  DBGC2 ( blktrans, "BLKTRANS %p created", blktrans );
164  if ( buffer ) {
165  DBGC2 ( blktrans, " for %#lx+%#zx",
166  virt_to_phys ( buffer ), size );
167  }
168  DBGC2 ( blktrans, "\n" );
169  return 0;
170 
171  ref_put ( &blktrans->refcnt );
172  err_alloc:
173  return rc;
174 }
struct refcnt refcnt
Reference count.
Definition: blocktrans.h:20
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:115
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition: refcnt.h:64
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:95
#define ENOMEM
Not enough space.
Definition: errno.h:534
A block device translator.
Definition: blocktrans.h:18
struct interface xfer
Data transfer interface.
Definition: blocktrans.h:24
void * zalloc(size_t size)
Allocate cleared memory.
Definition: malloc.c:661
static struct interface_descriptor blktrans_xfer_desc
Block device translator data transfer interface descriptor.
Definition: blocktrans.c:127
void intf_insert(struct interface *intf, struct interface *upper, struct interface *lower)
Insert a filter interface.
Definition: interface.c:401
#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:27
size_t blksize
Block size.
Definition: blocktrans.h:29
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
Definition: interface.h:203
static void xferbuf_fixed_init(struct xfer_buffer *xferbuf, void *data, size_t len)
Initialise fixed-size data transfer buffer.
Definition: xferbuf.h:80
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
#define ref_put(refcnt)
Drop reference to object.
Definition: refcnt.h:106
struct interface block
Block device interface.
Definition: blocktrans.h:22

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