38 #if !defined(__OCS_RAMDISC_H__)
39 #define __OCS_RAMDISC_H__
41 #define DIF_POOL_SIZE OCS_MAX_DMA_ALLOC
42 #define RAMDISC_MIN_BLOCK_SIZE 512
45 #define ENABLE_DIF_VERIFICATION 0
101 char t10_vendor_id[8];
119 typedef struct ocs_ramdisc_sgl_s {
127 uint64_t block_count);
129 #define SGL_REQ_FLAGS_PHYS (1U << 0)
131 uint32_t max_sgl, uint32_t max_sge_size,
132 uint32_t lba, uint32_t *block_count, uint32_t req_flags,
133 uint8_t dump_buffer);
135 uint32_t lba, uint32_t lba_offset,
136 uint8_t *buffer, uint32_t buffer_size);
138 uint8_t p_type, uint8_t prot_en, uint8_t separate);
151 #if ENABLE_DIF_VERIFICATION == 1
152 extern int32_t ocs_ramdisc_dif_verify(ocs_t *ocs,
ocs_ramdisc_t *ramdisc,
153 uint64_t lba, uint32_t block_count);
156 #endif // __OCS_RAMDISC_H__
void dif_pool_init(ocs_t *ocs, ocs_list_t *head)
initialize the DIF memory pool
int32_t ocs_new_ramdisc(ocs_t *ocs, ocs_ramdisc_t *ramdisc, uint32_t block_size, uint32_t blocks_per_segment, uint64_t block_count)
Create a new ramdisc instance (LUN).
ocs_list_t ocs_list_link_t
uint8_t * ocs_ramdisc_lba_address(ocs_ramdisc_t *ramdisc, uint64_t lba)
Return the address of a ramdisc logical block.
int32_t dif_pool_alloc(ocs_t *ocs, ocs_list_t *head, uint32_t size, ocs_difdma_t *difdma)
Allocate memory for the DIF memory pool.
int32_t ocs_ramdisc_sgl(ocs_t *ocs, ocs_ramdisc_t *ramdisc, ocs_ramdisc_sgl_t *sgl, uint32_t max_sgl, uint32_t max_sge_size, uint32_t lba, uint32_t *block_count, uint32_t req_flags, uint8_t dump_buffer)
Build an SGL list for blocks in a ramdisc.
uint32_t blocks_per_segment
void ocs_set_ramdisc_blocksize(ocs_t *ocs, ocs_ramdisc_t *ramdisc, uint32_t block_size)
Set the ramdisc block size.
uint8_t force_dif_separate
ramdisc instance structure
ramdisc segment structure
int32_t ocs_del_ramdisc(ocs_t *ocs, ocs_ramdisc_t *ramdisc)
Delete a ramdisc instance.
int32_t ocs_ramdisc_first_burst(ocs_t *ocs, ocs_ramdisc_t *ramdisc, uint32_t lba, uint32_t lba_offset, uint8_t *buffer, uint32_t buffer_size)
ramdisc_segment_t ** segments
generic ramdisc scatter-gather list
dif_t * ocs_ramdisc_dif_address(ocs_ramdisc_t *ramdisc, uint64_t lba)
Return the address of the DIF block if protection is enabled.
uint32_t pending_block_size
DIF separates allocation pool.
uint32_t segment_block_size
int32_t ocs_format_ramdisc(ocs_t *ocs, ocs_ramdisc_t *ramdisc, uint32_t block_size, uint8_t p_type, uint8_t prot_en, uint8_t dif_separate)
Reformat an existing ramdisc, possibly the changing block size and/or protection. ...
uint32_t ocs_get_ramdisc_blocksize(ocs_t *ocs, ocs_ramdisc_t *ramdisc)
Get the ramdisc block size.
ocs_pool_t * segment_pool
void ocs_ddump_ramdisc(ocs_textbuf_t *textbuf, ocs_ramdisc_t *ramdisc)
void dif_pool_free(ocs_t *ocs, ocs_list_t *head)
Free the DIF memory pool.