1c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#ifndef TARGET_CORE_RD_H 2c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define TARGET_CORE_RD_H 3c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 4c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RD_HBA_VERSION "v4.0" 5c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RD_DR_VERSION "4.0" 6c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RD_MCP_VERSION "4.0" 7c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 8c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger/* Largest piece of memory kmalloc can allocate */ 9c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RD_MAX_ALLOCATION_SIZE 65536 10c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RD_DEVICE_QUEUE_DEPTH 32 11c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RD_MAX_DEVICE_QUEUE_DEPTH 128 12c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RD_BLOCKSIZE 512 13c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RD_MAX_SECTORS 1024 14c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 15c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger/* Used in target_core_init_configfs() for virtual LUN 0 access */ 16c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingerint __init rd_module_init(void); 17c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingervoid rd_module_exit(void); 18c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 19c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RRF_EMULATE_CDB 0x01 20c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RRF_GOT_LBA 0x02 21c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 22c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingerstruct rd_request { 23c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger struct se_task rd_task; 24c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 25c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger /* Offset from start of page */ 26c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_offset; 27c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger /* Starting page in Ramdisk for request */ 28c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_page; 29c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger /* Total number of pages needed for request */ 30c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_page_count; 31c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger /* Scatterlist count */ 32c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_size; 33c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger} ____cacheline_aligned; 34c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 35c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingerstruct rd_dev_sg_table { 36c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 page_start_offset; 37c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 page_end_offset; 38c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_sg_count; 39c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger struct scatterlist *sg_table; 40c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger} ____cacheline_aligned; 41c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 42c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define RDF_HAS_PAGE_COUNT 0x01 43c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 44c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingerstruct rd_dev { 45c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger int rd_direct; 46c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_flags; 47c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger /* Unique Ramdisk Device ID in Ramdisk HBA */ 48c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_dev_id; 49c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger /* Total page count for ramdisk device */ 50c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_page_count; 51c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger /* Number of SG tables in sg_table_array */ 52c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 sg_table_count; 53c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_queue_depth; 54c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger /* Array of rd_dev_sg_table_t containing scatterlists */ 55c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger struct rd_dev_sg_table *sg_table_array; 56c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger /* Ramdisk HBA device is connected to */ 57c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger struct rd_host *rd_host; 58c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger} ____cacheline_aligned; 59c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 60c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingerstruct rd_host { 61c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_host_dev_id_count; 62c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger u32 rd_host_id; /* Unique Ramdisk Host ID */ 63c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger} ____cacheline_aligned; 64c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger 65c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#endif /* TARGET_CORE_RD_H */ 66