brintos

brintos / linux-shallow public Read only

0
0
Text · 9.9 KiB · 513da47 Raw
277 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */2/*3 * CXL Flash Device Driver4 *5 * Written by: Manoj N. Kumar <manoj@linux.vnet.ibm.com>, IBM Corporation6 *             Matthew R. Ochs <mrochs@linux.vnet.ibm.com>, IBM Corporation7 *8 * Copyright (C) 2015 IBM Corporation9 *10 * This program is free software; you can redistribute it and/or11 * modify it under the terms of the GNU General Public License12 * as published by the Free Software Foundation; either version13 * 2 of the License, or (at your option) any later version.14 */15 16#ifndef _CXLFLASH_IOCTL_H17#define _CXLFLASH_IOCTL_H18 19#include <linux/types.h>20 21/*22 * Structure and definitions for all CXL Flash ioctls23 */24#define CXLFLASH_WWID_LEN		1625 26/*27 * Structure and flag definitions CXL Flash superpipe ioctls28 */29 30#define DK_CXLFLASH_VERSION_0	031 32struct dk_cxlflash_hdr {33	__u16 version;			/* Version data */34	__u16 rsvd[3];			/* Reserved for future use */35	__u64 flags;			/* Input flags */36	__u64 return_flags;		/* Returned flags */37};38 39/*40 * Return flag definitions available to all superpipe ioctls41 *42 * Similar to the input flags, these are grown from the bottom-up with the43 * intention that ioctl-specific return flag definitions would grow from the44 * top-down, allowing the two sets to co-exist. While not required/enforced45 * at this time, this provides future flexibility.46 */47#define DK_CXLFLASH_ALL_PORTS_ACTIVE	0x0000000000000001ULL48#define DK_CXLFLASH_APP_CLOSE_ADAP_FD	0x0000000000000002ULL49#define DK_CXLFLASH_CONTEXT_SQ_CMD_MODE	0x0000000000000004ULL50 51/*52 * General Notes:53 * -------------54 * The 'context_id' field of all ioctl structures contains the context55 * identifier for a context in the lower 32-bits (upper 32-bits are not56 * to be used when identifying a context to the AFU). That said, the value57 * in its entirety (all 64-bits) is to be treated as an opaque cookie and58 * should be presented as such when issuing ioctls.59 */60 61/*62 * DK_CXLFLASH_ATTACH Notes:63 * ------------------------64 * Read/write access permissions are specified via the O_RDONLY, O_WRONLY,65 * and O_RDWR flags defined in the fcntl.h header file.66 *67 * A valid adapter file descriptor (fd >= 0) is only returned on the initial68 * attach (successful) of a context. When a context is shared(reused), the user69 * is expected to already 'know' the adapter file descriptor associated with the70 * context.71 */72#define DK_CXLFLASH_ATTACH_REUSE_CONTEXT	0x8000000000000000ULL73 74struct dk_cxlflash_attach {75	struct dk_cxlflash_hdr hdr;	/* Common fields */76	__u64 num_interrupts;		/* Requested number of interrupts */77	__u64 context_id;		/* Returned context */78	__u64 mmio_size;		/* Returned size of MMIO area */79	__u64 block_size;		/* Returned block size, in bytes */80	__u64 adap_fd;			/* Returned adapter file descriptor */81	__u64 last_lba;			/* Returned last LBA on the device */82	__u64 max_xfer;			/* Returned max transfer size, blocks */83	__u64 reserved[8];		/* Reserved for future use */84};85 86struct dk_cxlflash_detach {87	struct dk_cxlflash_hdr hdr;	/* Common fields */88	__u64 context_id;		/* Context to detach */89	__u64 reserved[8];		/* Reserved for future use */90};91 92struct dk_cxlflash_udirect {93	struct dk_cxlflash_hdr hdr;	/* Common fields */94	__u64 context_id;		/* Context to own physical resources */95	__u64 rsrc_handle;		/* Returned resource handle */96	__u64 last_lba;			/* Returned last LBA on the device */97	__u64 reserved[8];		/* Reserved for future use */98};99 100#define DK_CXLFLASH_UVIRTUAL_NEED_WRITE_SAME	0x8000000000000000ULL101 102struct dk_cxlflash_uvirtual {103	struct dk_cxlflash_hdr hdr;	/* Common fields */104	__u64 context_id;		/* Context to own virtual resources */105	__u64 lun_size;			/* Requested size, in 4K blocks */106	__u64 rsrc_handle;		/* Returned resource handle */107	__u64 last_lba;			/* Returned last LBA of LUN */108	__u64 reserved[8];		/* Reserved for future use */109};110 111struct dk_cxlflash_release {112	struct dk_cxlflash_hdr hdr;	/* Common fields */113	__u64 context_id;		/* Context owning resources */114	__u64 rsrc_handle;		/* Resource handle to release */115	__u64 reserved[8];		/* Reserved for future use */116};117 118struct dk_cxlflash_resize {119	struct dk_cxlflash_hdr hdr;	/* Common fields */120	__u64 context_id;		/* Context owning resources */121	__u64 rsrc_handle;		/* Resource handle of LUN to resize */122	__u64 req_size;			/* New requested size, in 4K blocks */123	__u64 last_lba;			/* Returned last LBA of LUN */124	__u64 reserved[8];		/* Reserved for future use */125};126 127struct dk_cxlflash_clone {128	struct dk_cxlflash_hdr hdr;	/* Common fields */129	__u64 context_id_src;		/* Context to clone from */130	__u64 context_id_dst;		/* Context to clone to */131	__u64 adap_fd_src;		/* Source context adapter fd */132	__u64 reserved[8];		/* Reserved for future use */133};134 135#define DK_CXLFLASH_VERIFY_SENSE_LEN	18136#define DK_CXLFLASH_VERIFY_HINT_SENSE	0x8000000000000000ULL137 138struct dk_cxlflash_verify {139	struct dk_cxlflash_hdr hdr;	/* Common fields */140	__u64 context_id;		/* Context owning resources to verify */141	__u64 rsrc_handle;		/* Resource handle of LUN */142	__u64 hint;			/* Reasons for verify */143	__u64 last_lba;			/* Returned last LBA of device */144	__u8 sense_data[DK_CXLFLASH_VERIFY_SENSE_LEN]; /* SCSI sense data */145	__u8 pad[6];			/* Pad to next 8-byte boundary */146	__u64 reserved[8];		/* Reserved for future use */147};148 149#define DK_CXLFLASH_RECOVER_AFU_CONTEXT_RESET	0x8000000000000000ULL150 151struct dk_cxlflash_recover_afu {152	struct dk_cxlflash_hdr hdr;	/* Common fields */153	__u64 reason;			/* Reason for recovery request */154	__u64 context_id;		/* Context to recover / updated ID */155	__u64 mmio_size;		/* Returned size of MMIO area */156	__u64 adap_fd;			/* Returned adapter file descriptor */157	__u64 reserved[8];		/* Reserved for future use */158};159 160#define DK_CXLFLASH_MANAGE_LUN_WWID_LEN			CXLFLASH_WWID_LEN161#define DK_CXLFLASH_MANAGE_LUN_ENABLE_SUPERPIPE		0x8000000000000000ULL162#define DK_CXLFLASH_MANAGE_LUN_DISABLE_SUPERPIPE	0x4000000000000000ULL163#define DK_CXLFLASH_MANAGE_LUN_ALL_PORTS_ACCESSIBLE	0x2000000000000000ULL164 165struct dk_cxlflash_manage_lun {166	struct dk_cxlflash_hdr hdr;			/* Common fields */167	__u8 wwid[DK_CXLFLASH_MANAGE_LUN_WWID_LEN];	/* Page83 WWID, NAA-6 */168	__u64 reserved[8];				/* Rsvd, future use */169};170 171union cxlflash_ioctls {172	struct dk_cxlflash_attach attach;173	struct dk_cxlflash_detach detach;174	struct dk_cxlflash_udirect udirect;175	struct dk_cxlflash_uvirtual uvirtual;176	struct dk_cxlflash_release release;177	struct dk_cxlflash_resize resize;178	struct dk_cxlflash_clone clone;179	struct dk_cxlflash_verify verify;180	struct dk_cxlflash_recover_afu recover_afu;181	struct dk_cxlflash_manage_lun manage_lun;182};183 184#define MAX_CXLFLASH_IOCTL_SZ	(sizeof(union cxlflash_ioctls))185 186#define CXL_MAGIC 0xCA187#define CXL_IOWR(_n, _s)	_IOWR(CXL_MAGIC, _n, struct _s)188 189/*190 * CXL Flash superpipe ioctls start at base of the reserved CXL_MAGIC191 * region (0x80) and grow upwards.192 */193#define DK_CXLFLASH_ATTACH		CXL_IOWR(0x80, dk_cxlflash_attach)194#define DK_CXLFLASH_USER_DIRECT		CXL_IOWR(0x81, dk_cxlflash_udirect)195#define DK_CXLFLASH_RELEASE		CXL_IOWR(0x82, dk_cxlflash_release)196#define DK_CXLFLASH_DETACH		CXL_IOWR(0x83, dk_cxlflash_detach)197#define DK_CXLFLASH_VERIFY		CXL_IOWR(0x84, dk_cxlflash_verify)198#define DK_CXLFLASH_RECOVER_AFU		CXL_IOWR(0x85, dk_cxlflash_recover_afu)199#define DK_CXLFLASH_MANAGE_LUN		CXL_IOWR(0x86, dk_cxlflash_manage_lun)200#define DK_CXLFLASH_USER_VIRTUAL	CXL_IOWR(0x87, dk_cxlflash_uvirtual)201#define DK_CXLFLASH_VLUN_RESIZE		CXL_IOWR(0x88, dk_cxlflash_resize)202#define DK_CXLFLASH_VLUN_CLONE		CXL_IOWR(0x89, dk_cxlflash_clone)203 204/*205 * Structure and flag definitions CXL Flash host ioctls206 */207 208#define HT_CXLFLASH_VERSION_0  0209 210struct ht_cxlflash_hdr {211	__u16 version;		/* Version data */212	__u16 subcmd;		/* Sub-command */213	__u16 rsvd[2];		/* Reserved for future use */214	__u64 flags;		/* Input flags */215	__u64 return_flags;	/* Returned flags */216};217 218/*219 * Input flag definitions available to all host ioctls220 *221 * These are grown from the bottom-up with the intention that ioctl-specific222 * input flag definitions would grow from the top-down, allowing the two sets223 * to co-exist. While not required/enforced at this time, this provides future224 * flexibility.225 */226#define HT_CXLFLASH_HOST_READ				0x0000000000000000ULL227#define HT_CXLFLASH_HOST_WRITE				0x0000000000000001ULL228 229#define HT_CXLFLASH_LUN_PROVISION_SUBCMD_CREATE_LUN	0x0001230#define HT_CXLFLASH_LUN_PROVISION_SUBCMD_DELETE_LUN	0x0002231#define HT_CXLFLASH_LUN_PROVISION_SUBCMD_QUERY_PORT	0x0003232 233struct ht_cxlflash_lun_provision {234	struct ht_cxlflash_hdr hdr; /* Common fields */235	__u16 port;		    /* Target port for provision request */236	__u16 reserved16[3];	    /* Reserved for future use */237	__u64 size;		    /* Size of LUN (4K blocks) */238	__u64 lun_id;		    /* SCSI LUN ID */239	__u8 wwid[CXLFLASH_WWID_LEN];/* Page83 WWID, NAA-6 */240	__u64 max_num_luns;	    /* Maximum number of LUNs provisioned */241	__u64 cur_num_luns;	    /* Current number of LUNs provisioned */242	__u64 max_cap_port;	    /* Total capacity for port (4K blocks) */243	__u64 cur_cap_port;	    /* Current capacity for port (4K blocks) */244	__u64 reserved[8];	    /* Reserved for future use */245};246 247#define	HT_CXLFLASH_AFU_DEBUG_MAX_DATA_LEN		262144	/* 256K */248#define HT_CXLFLASH_AFU_DEBUG_SUBCMD_LEN		12249struct ht_cxlflash_afu_debug {250	struct ht_cxlflash_hdr hdr; /* Common fields */251	__u8 reserved8[4];	    /* Reserved for future use */252	__u8 afu_subcmd[HT_CXLFLASH_AFU_DEBUG_SUBCMD_LEN]; /* AFU subcommand,253							    * (pass through)254							    */255	__u64 data_ea;		    /* Data buffer effective address */256	__u32 data_len;		    /* Data buffer length */257	__u32 reserved32;	    /* Reserved for future use */258	__u64 reserved[8];	    /* Reserved for future use */259};260 261union cxlflash_ht_ioctls {262	struct ht_cxlflash_lun_provision lun_provision;263	struct ht_cxlflash_afu_debug afu_debug;264};265 266#define MAX_HT_CXLFLASH_IOCTL_SZ	(sizeof(union cxlflash_ht_ioctls))267 268/*269 * CXL Flash host ioctls start at the top of the reserved CXL_MAGIC270 * region (0xBF) and grow downwards.271 */272#define HT_CXLFLASH_LUN_PROVISION CXL_IOWR(0xBF, ht_cxlflash_lun_provision)273#define HT_CXLFLASH_AFU_DEBUG	  CXL_IOWR(0xBE, ht_cxlflash_afu_debug)274 275 276#endif /* ifndef _CXLFLASH_IOCTL_H */277