forked from Minki/linux
e2be04c7f9
Many user space API headers have licensing information, which is either incomplete, badly formatted or just a shorthand for referring to the license under which the file is supposed to be. This makes it hard for compliance tools to determine the correct license. Update these files with an SPDX license identifier. The identifier was chosen based on the license information in the file. GPL/LGPL licensed headers get the matching GPL/LGPL SPDX license identifier with the added 'WITH Linux-syscall-note' exception, which is the officially assigned exception identifier for the kernel syscall exception: NOTE! This copyright does *not* cover user programs that use kernel services by normal system calls - this is merely considered normal use of the kernel, and does *not* fall under the heading of "derived work". This exception makes it possible to include GPL headers into non GPL code, without confusing license compliance tools. Headers which have either explicit dual licensing or are just licensed under a non GPL license are updated with the corresponding SPDX identifier and the GPLv2 with syscall exception identifier. The format is: ((GPL-2.0 WITH Linux-syscall-note) OR SPDX-ID-OF-OTHER-LICENSE) SPDX license identifiers are a legally binding shorthand, which can be used instead of the full boiler plate text. The update does not remove existing license information as this has to be done on a case by case basis and the copyright holders might have to be consulted. This will happen in a separate step. This patch is based on work done by Thomas Gleixner and Kate Stewart and Philippe Ombredanne. See the previous patch in this series for the methodology of how this patch was researched. Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
277 lines
9.9 KiB
C
277 lines
9.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
|
|
/*
|
|
* CXL Flash Device Driver
|
|
*
|
|
* Written by: Manoj N. Kumar <manoj@linux.vnet.ibm.com>, IBM Corporation
|
|
* Matthew R. Ochs <mrochs@linux.vnet.ibm.com>, IBM Corporation
|
|
*
|
|
* Copyright (C) 2015 IBM Corporation
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*/
|
|
|
|
#ifndef _CXLFLASH_IOCTL_H
|
|
#define _CXLFLASH_IOCTL_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
/*
|
|
* Structure and definitions for all CXL Flash ioctls
|
|
*/
|
|
#define CXLFLASH_WWID_LEN 16
|
|
|
|
/*
|
|
* Structure and flag definitions CXL Flash superpipe ioctls
|
|
*/
|
|
|
|
#define DK_CXLFLASH_VERSION_0 0
|
|
|
|
struct dk_cxlflash_hdr {
|
|
__u16 version; /* Version data */
|
|
__u16 rsvd[3]; /* Reserved for future use */
|
|
__u64 flags; /* Input flags */
|
|
__u64 return_flags; /* Returned flags */
|
|
};
|
|
|
|
/*
|
|
* Return flag definitions available to all superpipe ioctls
|
|
*
|
|
* Similar to the input flags, these are grown from the bottom-up with the
|
|
* intention that ioctl-specific return flag definitions would grow from the
|
|
* top-down, allowing the two sets to co-exist. While not required/enforced
|
|
* at this time, this provides future flexibility.
|
|
*/
|
|
#define DK_CXLFLASH_ALL_PORTS_ACTIVE 0x0000000000000001ULL
|
|
#define DK_CXLFLASH_APP_CLOSE_ADAP_FD 0x0000000000000002ULL
|
|
#define DK_CXLFLASH_CONTEXT_SQ_CMD_MODE 0x0000000000000004ULL
|
|
|
|
/*
|
|
* General Notes:
|
|
* -------------
|
|
* The 'context_id' field of all ioctl structures contains the context
|
|
* identifier for a context in the lower 32-bits (upper 32-bits are not
|
|
* to be used when identifying a context to the AFU). That said, the value
|
|
* in its entirety (all 64-bits) is to be treated as an opaque cookie and
|
|
* should be presented as such when issuing ioctls.
|
|
*/
|
|
|
|
/*
|
|
* DK_CXLFLASH_ATTACH Notes:
|
|
* ------------------------
|
|
* Read/write access permissions are specified via the O_RDONLY, O_WRONLY,
|
|
* and O_RDWR flags defined in the fcntl.h header file.
|
|
*
|
|
* A valid adapter file descriptor (fd >= 0) is only returned on the initial
|
|
* attach (successful) of a context. When a context is shared(reused), the user
|
|
* is expected to already 'know' the adapter file descriptor associated with the
|
|
* context.
|
|
*/
|
|
#define DK_CXLFLASH_ATTACH_REUSE_CONTEXT 0x8000000000000000ULL
|
|
|
|
struct dk_cxlflash_attach {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u64 num_interrupts; /* Requested number of interrupts */
|
|
__u64 context_id; /* Returned context */
|
|
__u64 mmio_size; /* Returned size of MMIO area */
|
|
__u64 block_size; /* Returned block size, in bytes */
|
|
__u64 adap_fd; /* Returned adapter file descriptor */
|
|
__u64 last_lba; /* Returned last LBA on the device */
|
|
__u64 max_xfer; /* Returned max transfer size, blocks */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
struct dk_cxlflash_detach {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u64 context_id; /* Context to detach */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
struct dk_cxlflash_udirect {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u64 context_id; /* Context to own physical resources */
|
|
__u64 rsrc_handle; /* Returned resource handle */
|
|
__u64 last_lba; /* Returned last LBA on the device */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
#define DK_CXLFLASH_UVIRTUAL_NEED_WRITE_SAME 0x8000000000000000ULL
|
|
|
|
struct dk_cxlflash_uvirtual {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u64 context_id; /* Context to own virtual resources */
|
|
__u64 lun_size; /* Requested size, in 4K blocks */
|
|
__u64 rsrc_handle; /* Returned resource handle */
|
|
__u64 last_lba; /* Returned last LBA of LUN */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
struct dk_cxlflash_release {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u64 context_id; /* Context owning resources */
|
|
__u64 rsrc_handle; /* Resource handle to release */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
struct dk_cxlflash_resize {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u64 context_id; /* Context owning resources */
|
|
__u64 rsrc_handle; /* Resource handle of LUN to resize */
|
|
__u64 req_size; /* New requested size, in 4K blocks */
|
|
__u64 last_lba; /* Returned last LBA of LUN */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
struct dk_cxlflash_clone {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u64 context_id_src; /* Context to clone from */
|
|
__u64 context_id_dst; /* Context to clone to */
|
|
__u64 adap_fd_src; /* Source context adapter fd */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
#define DK_CXLFLASH_VERIFY_SENSE_LEN 18
|
|
#define DK_CXLFLASH_VERIFY_HINT_SENSE 0x8000000000000000ULL
|
|
|
|
struct dk_cxlflash_verify {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u64 context_id; /* Context owning resources to verify */
|
|
__u64 rsrc_handle; /* Resource handle of LUN */
|
|
__u64 hint; /* Reasons for verify */
|
|
__u64 last_lba; /* Returned last LBA of device */
|
|
__u8 sense_data[DK_CXLFLASH_VERIFY_SENSE_LEN]; /* SCSI sense data */
|
|
__u8 pad[6]; /* Pad to next 8-byte boundary */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
#define DK_CXLFLASH_RECOVER_AFU_CONTEXT_RESET 0x8000000000000000ULL
|
|
|
|
struct dk_cxlflash_recover_afu {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u64 reason; /* Reason for recovery request */
|
|
__u64 context_id; /* Context to recover / updated ID */
|
|
__u64 mmio_size; /* Returned size of MMIO area */
|
|
__u64 adap_fd; /* Returned adapter file descriptor */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
#define DK_CXLFLASH_MANAGE_LUN_WWID_LEN CXLFLASH_WWID_LEN
|
|
#define DK_CXLFLASH_MANAGE_LUN_ENABLE_SUPERPIPE 0x8000000000000000ULL
|
|
#define DK_CXLFLASH_MANAGE_LUN_DISABLE_SUPERPIPE 0x4000000000000000ULL
|
|
#define DK_CXLFLASH_MANAGE_LUN_ALL_PORTS_ACCESSIBLE 0x2000000000000000ULL
|
|
|
|
struct dk_cxlflash_manage_lun {
|
|
struct dk_cxlflash_hdr hdr; /* Common fields */
|
|
__u8 wwid[DK_CXLFLASH_MANAGE_LUN_WWID_LEN]; /* Page83 WWID, NAA-6 */
|
|
__u64 reserved[8]; /* Rsvd, future use */
|
|
};
|
|
|
|
union cxlflash_ioctls {
|
|
struct dk_cxlflash_attach attach;
|
|
struct dk_cxlflash_detach detach;
|
|
struct dk_cxlflash_udirect udirect;
|
|
struct dk_cxlflash_uvirtual uvirtual;
|
|
struct dk_cxlflash_release release;
|
|
struct dk_cxlflash_resize resize;
|
|
struct dk_cxlflash_clone clone;
|
|
struct dk_cxlflash_verify verify;
|
|
struct dk_cxlflash_recover_afu recover_afu;
|
|
struct dk_cxlflash_manage_lun manage_lun;
|
|
};
|
|
|
|
#define MAX_CXLFLASH_IOCTL_SZ (sizeof(union cxlflash_ioctls))
|
|
|
|
#define CXL_MAGIC 0xCA
|
|
#define CXL_IOWR(_n, _s) _IOWR(CXL_MAGIC, _n, struct _s)
|
|
|
|
/*
|
|
* CXL Flash superpipe ioctls start at base of the reserved CXL_MAGIC
|
|
* region (0x80) and grow upwards.
|
|
*/
|
|
#define DK_CXLFLASH_ATTACH CXL_IOWR(0x80, dk_cxlflash_attach)
|
|
#define DK_CXLFLASH_USER_DIRECT CXL_IOWR(0x81, dk_cxlflash_udirect)
|
|
#define DK_CXLFLASH_RELEASE CXL_IOWR(0x82, dk_cxlflash_release)
|
|
#define DK_CXLFLASH_DETACH CXL_IOWR(0x83, dk_cxlflash_detach)
|
|
#define DK_CXLFLASH_VERIFY CXL_IOWR(0x84, dk_cxlflash_verify)
|
|
#define DK_CXLFLASH_RECOVER_AFU CXL_IOWR(0x85, dk_cxlflash_recover_afu)
|
|
#define DK_CXLFLASH_MANAGE_LUN CXL_IOWR(0x86, dk_cxlflash_manage_lun)
|
|
#define DK_CXLFLASH_USER_VIRTUAL CXL_IOWR(0x87, dk_cxlflash_uvirtual)
|
|
#define DK_CXLFLASH_VLUN_RESIZE CXL_IOWR(0x88, dk_cxlflash_resize)
|
|
#define DK_CXLFLASH_VLUN_CLONE CXL_IOWR(0x89, dk_cxlflash_clone)
|
|
|
|
/*
|
|
* Structure and flag definitions CXL Flash host ioctls
|
|
*/
|
|
|
|
#define HT_CXLFLASH_VERSION_0 0
|
|
|
|
struct ht_cxlflash_hdr {
|
|
__u16 version; /* Version data */
|
|
__u16 subcmd; /* Sub-command */
|
|
__u16 rsvd[2]; /* Reserved for future use */
|
|
__u64 flags; /* Input flags */
|
|
__u64 return_flags; /* Returned flags */
|
|
};
|
|
|
|
/*
|
|
* Input flag definitions available to all host ioctls
|
|
*
|
|
* These are grown from the bottom-up with the intention that ioctl-specific
|
|
* input flag definitions would grow from the top-down, allowing the two sets
|
|
* to co-exist. While not required/enforced at this time, this provides future
|
|
* flexibility.
|
|
*/
|
|
#define HT_CXLFLASH_HOST_READ 0x0000000000000000ULL
|
|
#define HT_CXLFLASH_HOST_WRITE 0x0000000000000001ULL
|
|
|
|
#define HT_CXLFLASH_LUN_PROVISION_SUBCMD_CREATE_LUN 0x0001
|
|
#define HT_CXLFLASH_LUN_PROVISION_SUBCMD_DELETE_LUN 0x0002
|
|
#define HT_CXLFLASH_LUN_PROVISION_SUBCMD_QUERY_PORT 0x0003
|
|
|
|
struct ht_cxlflash_lun_provision {
|
|
struct ht_cxlflash_hdr hdr; /* Common fields */
|
|
__u16 port; /* Target port for provision request */
|
|
__u16 reserved16[3]; /* Reserved for future use */
|
|
__u64 size; /* Size of LUN (4K blocks) */
|
|
__u64 lun_id; /* SCSI LUN ID */
|
|
__u8 wwid[CXLFLASH_WWID_LEN];/* Page83 WWID, NAA-6 */
|
|
__u64 max_num_luns; /* Maximum number of LUNs provisioned */
|
|
__u64 cur_num_luns; /* Current number of LUNs provisioned */
|
|
__u64 max_cap_port; /* Total capacity for port (4K blocks) */
|
|
__u64 cur_cap_port; /* Current capacity for port (4K blocks) */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
#define HT_CXLFLASH_AFU_DEBUG_MAX_DATA_LEN 262144 /* 256K */
|
|
#define HT_CXLFLASH_AFU_DEBUG_SUBCMD_LEN 12
|
|
struct ht_cxlflash_afu_debug {
|
|
struct ht_cxlflash_hdr hdr; /* Common fields */
|
|
__u8 reserved8[4]; /* Reserved for future use */
|
|
__u8 afu_subcmd[HT_CXLFLASH_AFU_DEBUG_SUBCMD_LEN]; /* AFU subcommand,
|
|
* (pass through)
|
|
*/
|
|
__u64 data_ea; /* Data buffer effective address */
|
|
__u32 data_len; /* Data buffer length */
|
|
__u32 reserved32; /* Reserved for future use */
|
|
__u64 reserved[8]; /* Reserved for future use */
|
|
};
|
|
|
|
union cxlflash_ht_ioctls {
|
|
struct ht_cxlflash_lun_provision lun_provision;
|
|
struct ht_cxlflash_afu_debug afu_debug;
|
|
};
|
|
|
|
#define MAX_HT_CXLFLASH_IOCTL_SZ (sizeof(union cxlflash_ht_ioctls))
|
|
|
|
/*
|
|
* CXL Flash host ioctls start at the top of the reserved CXL_MAGIC
|
|
* region (0xBF) and grow downwards.
|
|
*/
|
|
#define HT_CXLFLASH_LUN_PROVISION CXL_IOWR(0xBF, ht_cxlflash_lun_provision)
|
|
#define HT_CXLFLASH_AFU_DEBUG CXL_IOWR(0xBE, ht_cxlflash_afu_debug)
|
|
|
|
|
|
#endif /* ifndef _CXLFLASH_IOCTL_H */
|