76 const void *
data,
size_t len ) {
136 if ( (
rc == 0 ) && ( blktrans->
blksize ) ) {
169 DBGC ( blktrans,
"BLKTRANS %p could not deliver: %s\n",
228 blktrans =
zalloc (
sizeof ( *blktrans ) );
248 DBGC2 ( blktrans,
"BLKTRANS %p created", blktrans );
250 DBGC2 ( blktrans,
" for %#lx+%#zx",
253 DBGC2 ( blktrans,
"\n" );
An object interface operation.
struct refcnt refcnt
Reference count.
struct arbelprm_rc_send_wqe rc
void intf_close(struct interface *intf, int rc)
Close an object interface.
int xferbuf_deliver(struct xfer_buffer *xferbuf, struct io_buffer *iobuf, struct xfer_metadata *meta)
Add received data to data transfer buffer.
void intf_shutdown(struct interface *intf, int rc)
Shut down an object interface.
unsigned int max_count
Maximum number of blocks per single transfer.
static struct interface_descriptor blktrans_block_desc
Block device translator block device interface descriptor.
static void blktrans_close(struct block_translator *blktrans, int rc)
Close block device translator.
#define ref_init(refcnt, free)
Initialise a reference counter.
void block_capacity(struct interface *intf, struct block_device_capacity *capacity)
Report block device capacity.
static __always_inline void copy_from_user(void *dest, userptr_t src, off_t src_off, size_t len)
Copy data from user buffer.
uint8_t size
Entry size (in 32-bit words)
unsigned long user_to_phys(userptr_t userptr, off_t offset)
Convert user pointer to physical address.
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
int block_translate(struct interface *block, userptr_t buffer, size_t size)
Insert block device translator.
#define ENOTSUP
Operation not supported.
Data transfer interfaces.
Data transfer buffer operations.
#define ENOMEM
Not enough space.
#define iob_disown(iobuf)
Disown an I/O buffer.
uint32_t userptr_t
A pointer to a user buffer.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
#define container_of(ptr, type, field)
Get containing structure.
A block device translator.
uint64_t blocks
Total number of blocks.
static int blktrans_xferbuf_realloc(struct xfer_buffer *xferbuf, size_t len)
Reallocate block device translator data buffer.
static struct xfer_buffer * blktrans_buffer(struct block_translator *blktrans)
Get underlying data transfer buffer.
struct interface xfer
Data transfer interface.
An object interface descriptor.
struct xfer_buffer_operations * op
Data transfer buffer operations.
char * strerror(int errno)
Retrieve string representation of error number.
void * zalloc(size_t size)
Allocate cleared memory.
#define INTF_OP(op_type, object_type, op_func)
Define an object interface operation.
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.
int xfer_deliver(struct interface *intf, struct io_buffer *iobuf, struct xfer_metadata *meta)
Deliver datagram.
static struct interface_descriptor blktrans_xfer_desc
Block device translator data transfer interface descriptor.
static int blktrans_deliver(struct block_translator *blktrans, struct io_buffer *iobuf, struct xfer_metadata *meta)
Deliver data.
static struct interface_operation blktrans_xfer_operations[]
Block device translator data transfer interface operations.
static struct interface_operation blktrans_block_operations[]
Block device translator block device interface operations.
void intf_insert(struct interface *intf, struct interface *upper, struct interface *lower)
Insert a filter interface.
static void blktrans_xferbuf_read(struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len)
Read data from block device translator data buffer.
uint8_t block[3][8]
DES-encrypted blocks.
int(* realloc)(struct xfer_buffer *xferbuf, size_t len)
Reallocate data buffer.
uint8_t data[48]
Additional event data.
struct xfer_buffer xferbuf
Data transfer buffer.
#define INTF_DESC_PASSTHRU(object_type, intf, operations, passthru)
Define an object interface descriptor with pass-through interface.
size_t blksize
Block size.
uint16_t offset
Offset to command line.
static struct xfer_buffer_operations blktrans_xferbuf_operations
Block device translator data transfer buffer operations.
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
static void blktrans_xferbuf_write(struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len)
Write data to block device translator data buffer.
#define NULL
NULL pointer (VOID *)
userptr_t buffer
Data buffer.
#define ref_put(refcnt)
Drop reference to object.
size_t blksize
Block size.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
struct interface block
Block device interface.