43 { .
name =
"xferbuf.deliver" };
47 { .
name =
"xferbuf.write" };
51 { .
name =
"xferbuf.read" };
90 if ( len <= xferbuf->
len )
95 DBGC ( xferbuf,
"XFERBUF %p could not extend buffer to " 113 const void *
data,
size_t len ) {
127 if (
len && ( ! xferbuf->
data ) )
155 if (
len && ( ! xferbuf->
data ) )
194 xferbuf->
pos = ( pos +
len );
215 xferbuf->
data = new_data;
237 xferbuf->
data = new_udata;
256 if (
len > xferbuf->
len ) {
318 if (
op && (
dest == xfer_deliver_dest ) ) {
319 xferbuf =
op (
object );
struct arbelprm_rc_send_wqe rc
int xferbuf_deliver(struct xfer_buffer *xferbuf, struct io_buffer *iobuf, struct xfer_metadata *meta)
Add received data to data transfer buffer.
#define XFER_FL_ABS_OFFSET
Offset is absolute.
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
#define ENOENT
No such file or directory.
size_t pos
Current offset within data.
static int xferbuf_void_realloc(struct xfer_buffer *xferbuf, size_t len __unused)
Reallocate void data transfer buffer.
A data structure for storing profiling information.
void xferbuf_free(struct xfer_buffer *xferbuf)
Free data transfer buffer.
static void profile_stop(struct profiler *profiler)
Stop profiling.
int xferbuf_write(struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len)
Write to data transfer buffer.
static int xferbuf_malloc_realloc(struct xfer_buffer *xferbuf, size_t len)
Reallocate malloc()-based data transfer buffer.
void * intf_object(struct interface *intf)
Get pointer to object containing object interface.
Data transfer interfaces.
struct interface * intf
Original interface.
Data transfer buffer operations.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
struct xfer_buffer_operations xferbuf_void_operations
Void data buffer operations.
#define xfer_buffer_TYPE(object_type)
#define __unused
Declare a variable or data structure as unused.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
struct xfer_buffer_operations xferbuf_fixed_operations
Fixed-size data buffer operations.
static void profile_start(struct profiler *profiler)
Start profiling.
struct xfer_buffer_operations * op
Data transfer buffer operations.
#define ERANGE
Result too large.
char * strerror(int errno)
Retrieve string representation of error number.
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
#define EOVERFLOW
Value too large to be stored in data type.
int xfer_deliver(struct interface *intf, struct io_buffer *iobuf, struct xfer_metadata *meta)
Deliver datagram.
struct xfer_buffer * xfer_buffer(struct interface *intf)
Get underlying data transfer buffer.
void xferbuf_detach(struct xfer_buffer *xferbuf)
Detach data from data transfer buffer.
static int xferbuf_fixed_realloc(struct xfer_buffer *xferbuf, size_t len)
Reallocate fixed-size data transfer buffer.
int xferbuf_read(struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len)
Read from data transfer buffer.
static int xferbuf_umalloc_realloc(struct xfer_buffer *xferbuf, size_t len)
Reallocate umalloc()-based data transfer buffer.
static uint16_t struct vmbus_xfer_pages_operations * op
#define ENOSPC
No space left on device.
struct xfer_buffer_operations xferbuf_umalloc_operations
umalloc()-based data buffer operations
static struct profiler xferbuf_deliver_profiler __profiler
Data delivery profiler.
#define ENOTTY
Inappropriate I/O control operation.
void * data
Start of data.
int(* realloc)(struct xfer_buffer *xferbuf, size_t len)
Reallocate data buffer.
void intf_put(struct interface *intf)
Decrement reference count on an object interface.
static int xferbuf_ensure_size(struct xfer_buffer *xferbuf, size_t len)
Ensure that data transfer buffer is large enough for the specified size.
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
uint8_t data[48]
Additional event data.
void * realloc(void *old_ptr, size_t new_size)
Reallocate memory.
void * urealloc(void *ptr, size_t new_size)
Reallocate external memory.
uint16_t offset
Offset to command line.
uint8_t meta
Metadata flags.
#define NULL
NULL pointer (VOID *)
#define intf_get_dest_op(intf, type, dest)
Get object interface destination and operation method.
struct bofm_section_header done
struct xfer_buffer_operations xferbuf_malloc_operations
malloc()-based data buffer operations