1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2c66ac9dbSNicholas Bellinger #ifndef TARGET_CORE_RD_H
3c66ac9dbSNicholas Bellinger #define TARGET_CORE_RD_H
4c66ac9dbSNicholas Bellinger 
58dcf07beSBart Van Assche #include <linux/module.h>
68dcf07beSBart Van Assche #include <linux/types.h>
78dcf07beSBart Van Assche #include <target/target_core_base.h>
88dcf07beSBart Van Assche 
9c66ac9dbSNicholas Bellinger #define RD_HBA_VERSION		"v4.0"
10c66ac9dbSNicholas Bellinger #define RD_MCP_VERSION		"4.0"
11c66ac9dbSNicholas Bellinger 
12c66ac9dbSNicholas Bellinger /* Largest piece of memory kmalloc can allocate */
13c66ac9dbSNicholas Bellinger #define RD_MAX_ALLOCATION_SIZE	65536
14c66ac9dbSNicholas Bellinger #define RD_DEVICE_QUEUE_DEPTH	32
15c66ac9dbSNicholas Bellinger #define RD_MAX_DEVICE_QUEUE_DEPTH 128
16c66ac9dbSNicholas Bellinger #define RD_BLOCKSIZE		512
17c66ac9dbSNicholas Bellinger 
18c66ac9dbSNicholas Bellinger /* Used in target_core_init_configfs() for virtual LUN 0 access */
19c66ac9dbSNicholas Bellinger int __init rd_module_init(void);
20c66ac9dbSNicholas Bellinger void rd_module_exit(void);
21c66ac9dbSNicholas Bellinger 
22c66ac9dbSNicholas Bellinger struct rd_dev_sg_table {
23c66ac9dbSNicholas Bellinger 	u32		page_start_offset;
24c66ac9dbSNicholas Bellinger 	u32		page_end_offset;
25c66ac9dbSNicholas Bellinger 	u32		rd_sg_count;
26c66ac9dbSNicholas Bellinger 	struct scatterlist *sg_table;
27c66ac9dbSNicholas Bellinger } ____cacheline_aligned;
28c66ac9dbSNicholas Bellinger 
29c66ac9dbSNicholas Bellinger #define RDF_HAS_PAGE_COUNT	0x01
3052c07423SNicholas Bellinger #define RDF_NULLIO		0x02
31*0aecfa66SKonstantin Shelekhin #define RDF_DUMMY		0x04
32c66ac9dbSNicholas Bellinger 
33c66ac9dbSNicholas Bellinger struct rd_dev {
340fd97ccfSChristoph Hellwig 	struct se_device dev;
35c66ac9dbSNicholas Bellinger 	u32		rd_flags;
36c66ac9dbSNicholas Bellinger 	/* Unique Ramdisk Device ID in Ramdisk HBA */
37c66ac9dbSNicholas Bellinger 	u32		rd_dev_id;
38c66ac9dbSNicholas Bellinger 	/* Total page count for ramdisk device */
39c66ac9dbSNicholas Bellinger 	u32		rd_page_count;
40c66ac9dbSNicholas Bellinger 	/* Number of SG tables in sg_table_array */
41c66ac9dbSNicholas Bellinger 	u32		sg_table_count;
42d7e8eb5dSNicholas Bellinger 	/* Number of SG tables in sg_prot_array */
43d7e8eb5dSNicholas Bellinger 	u32		sg_prot_count;
44c66ac9dbSNicholas Bellinger 	/* Array of rd_dev_sg_table_t containing scatterlists */
45c66ac9dbSNicholas Bellinger 	struct rd_dev_sg_table *sg_table_array;
46d7e8eb5dSNicholas Bellinger 	/* Array of rd_dev_sg_table containing protection scatterlists */
47d7e8eb5dSNicholas Bellinger 	struct rd_dev_sg_table *sg_prot_array;
48c66ac9dbSNicholas Bellinger 	/* Ramdisk HBA device is connected to */
49c66ac9dbSNicholas Bellinger 	struct rd_host *rd_host;
50c66ac9dbSNicholas Bellinger } ____cacheline_aligned;
51c66ac9dbSNicholas Bellinger 
52c66ac9dbSNicholas Bellinger struct rd_host {
53c66ac9dbSNicholas Bellinger 	u32		rd_host_dev_id_count;
54c66ac9dbSNicholas Bellinger 	u32		rd_host_id;		/* Unique Ramdisk Host ID */
55c66ac9dbSNicholas Bellinger } ____cacheline_aligned;
56c66ac9dbSNicholas Bellinger 
57c66ac9dbSNicholas Bellinger #endif /* TARGET_CORE_RD_H */
58