iPXE
Functions
iobpad.c File Reference

I/O buffer padding. More...

#include <string.h>
#include <ipxe/iobuf.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
void iob_pad (struct io_buffer *iobuf, size_t min_len)
 Pad I/O buffer. More...
 

Detailed Description

I/O buffer padding.

Definition in file iobpad.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ iob_pad()

void iob_pad ( struct io_buffer iobuf,
size_t  min_len 
)

Pad I/O buffer.

Parameters
iobufI/O buffer
min_lenMinimum length

This function pads and aligns I/O buffers, for devices that aren't capable of padding in hardware, or that require specific alignment in TX buffers. The packet data will end up aligned to a multiple of IOB_ALIGN.

min_len must not exceed

Parameters
IOB_ZLEN.

Definition at line 49 of file iobpad.c.

49  {
50  void *data;
51  size_t len;
52  size_t headroom;
53  signed int pad_len;
54 
55  assert ( min_len <= IOB_ZLEN );
56 
57  /* Move packet data to start of I/O buffer. This will both
58  * align the data (since I/O buffers are aligned to
59  * IOB_ALIGN) and give us sufficient space for the
60  * zero-padding
61  */
62  data = iobuf->data;
63  len = iob_len ( iobuf );
64  headroom = iob_headroom ( iobuf );
65  iob_push ( iobuf, headroom );
66  memmove ( iobuf->data, data, len );
67  iob_unput ( iobuf, headroom );
68 
69  /* Pad to minimum packet length */
70  pad_len = ( min_len - iob_len ( iobuf ) );
71  if ( pad_len > 0 )
72  memset ( iob_put ( iobuf, pad_len ), 0, pad_len );
73 }
#define iob_put(iobuf, len)
Definition: iobuf.h:120
#define iob_push(iobuf, len)
Definition: iobuf.h:84
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
#define iob_unput(iobuf, len)
Definition: iobuf.h:135
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
Definition: iobuf.h:155
void * memmove(void *dest, const void *src, size_t len) __nonnull
long pad_len
Definition: bigint.h:30
static size_t iob_headroom(struct io_buffer *iobuf)
Calculate available space at start of an I/O buffer.
Definition: iobuf.h:165
uint32_t len
Length.
Definition: ena.h:14
#define IOB_ZLEN
Minimum I/O buffer length.
Definition: iobuf.h:24
void * data
Start of data.
Definition: iobuf.h:48
uint8_t data[48]
Additional event data.
Definition: ena.h:22
void * memset(void *dest, int character, size_t len) __nonnull

References assert(), data, io_buffer::data, iob_headroom(), iob_len(), iob_push, iob_put, iob_unput, IOB_ZLEN, len, memmove(), memset(), and pad_len.

Referenced by bnxt_tx_adjust_pkt(), eoib_transmit(), forcedeth_transmit(), legacy_transmit(), myri10ge_net_transmit(), nii_transmit(), pnic_transmit(), rdc_transmit(), realtek_transmit(), rhine_transmit(), sis190_transmit(), snpnet_transmit(), tg3_transmit(), and velocity_transmit().