43 { .
name =
"xferbuf.deliver" };
47 { .
name =
"xferbuf.write" };
51 { .
name =
"xferbuf.read" };
76 if ( len <= xferbuf->
len )
81 DBGC ( xferbuf,
"XFERBUF %p could not extend buffer to " 99 const void *
data,
size_t len ) {
172 xferbuf->
pos = ( pos +
len );
193 xferbuf->
data = new_data;
206 const void *
data,
size_t len ) {
259 const void *
data,
size_t len ) {
314 if (
op && (
dest == xfer_deliver_dest ) ) {
315 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.
static __always_inline void copy_from_user(void *dest, userptr_t src, off_t src_off, size_t len)
Copy data from user buffer.
void(* read)(struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len)
Read data from buffer.
#define ENOENT
No such file or directory.
size_t pos
Current offset within data.
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 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.
static void xferbuf_umalloc_write(struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len)
Write data to umalloc()-based data buffer.
static void xferbuf_malloc_read(struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len)
Read data from malloc()-based data buffer.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
uint32_t userptr_t
A pointer to a user buffer.
void(* write)(struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len)
Write data to buffer.
#define xfer_buffer_TYPE(object_type)
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
static void profile_start(struct profiler *profiler)
Start profiling.
userptr_t urealloc(userptr_t userptr, size_t new_size)
Reallocate external memory.
struct xfer_buffer_operations * op
Data transfer buffer operations.
char * strerror(int errno)
Retrieve string representation of error number.
static void xferbuf_malloc_write(struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len)
Write data to malloc()-based data buffer.
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
static __always_inline void copy_to_user(userptr_t dest, off_t dest_off, const void *src, size_t len)
Copy data to user 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.
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 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.
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.
uint16_t offset
Offset to command line.
static void xferbuf_umalloc_read(struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len)
Read data from umalloc()-based data buffer.
#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