Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
Pull SCSI target updates from Nicholas Bellinger: "Lots of activity in target land the last months. The highlights include: - Convert fabric drivers tree-wide to target_register_template() (hch + bart) - iser-target hardening fixes + v1.0 improvements (sagi) - Convert iscsi_thread_set usage to kthread.h + kill iscsi_target_tq.c (sagi + nab) - Add support for T10-PI WRITE_STRIP + READ_INSERT operation (mkp + sagi + nab) - DIF fixes for CONFIG_DEBUG_SG=y + UNMAP file emulation (akinobu + sagi + mkp) - Extended TCMU ABI v2 for future BIDI + DIF support (andy + ilias) - Fix COMPARE_AND_WRITE handling for NO_ALLLOC drivers (hch + nab) Thanks to everyone who contributed this round with new features, bug-reports, fixes, cleanups and improvements. Looking forward, it's currently shaping up to be a busy v4.2 as well" * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (69 commits) target: Put TCMU under a new config option target: Version 2 of TCMU ABI target: fix tcm_mod_builder.py target/file: Fix UNMAP with DIF protection support target/file: Fix SG table for prot_buf initialization target/file: Fix BUG() when CONFIG_DEBUG_SG=y and DIF protection enabled target: Make core_tmr_abort_task() skip TMFs target/sbc: Update sbc_dif_generate pr_debug output target/sbc: Make internal DIF emulation honor ->prot_checks target/sbc: Return INVALID_CDB_FIELD if DIF + sess_prot_type disabled target: Ensure sess_prot_type is saved across session restart target/rd: Don't pass incomplete scatterlist entries to sbc_dif_verify_* target: Remove the unused flag SCF_ACK_KREF target: Fix two sparse warnings target: Fix COMPARE_AND_WRITE with SG_TO_MEM_NOALLOC handling target: simplify the target template registration API target: simplify target_xcopy_init_pt_lun target: remove the unused SCF_CMD_XCOPY_PASSTHROUGH flag target/rd: reduce code duplication in rd_execute_rw() tcm_loop: fixup tpgt string to integer conversion ...
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/uio.h>
|
||||
|
||||
#define TCMU_VERSION "1.0"
|
||||
#define TCMU_VERSION "2.0"
|
||||
|
||||
/*
|
||||
* Ring Design
|
||||
@@ -39,9 +39,13 @@
|
||||
* should process the next packet the same way, and so on.
|
||||
*/
|
||||
|
||||
#define TCMU_MAILBOX_VERSION 1
|
||||
#define TCMU_MAILBOX_VERSION 2
|
||||
#define ALIGN_SIZE 64 /* Should be enough for most CPUs */
|
||||
|
||||
/* See https://gcc.gnu.org/onlinedocs/cpp/Stringification.html */
|
||||
#define xstr(s) str(s)
|
||||
#define str(s) #s
|
||||
|
||||
struct tcmu_mailbox {
|
||||
__u16 version;
|
||||
__u16 flags;
|
||||
@@ -64,31 +68,36 @@ enum tcmu_opcode {
|
||||
* Only a few opcodes, and length is 8-byte aligned, so use low bits for opcode.
|
||||
*/
|
||||
struct tcmu_cmd_entry_hdr {
|
||||
__u32 len_op;
|
||||
__u32 len_op;
|
||||
__u16 cmd_id;
|
||||
__u8 kflags;
|
||||
#define TCMU_UFLAG_UNKNOWN_OP 0x1
|
||||
__u8 uflags;
|
||||
|
||||
} __packed;
|
||||
|
||||
#define TCMU_OP_MASK 0x7
|
||||
|
||||
static inline enum tcmu_opcode tcmu_hdr_get_op(struct tcmu_cmd_entry_hdr *hdr)
|
||||
static inline enum tcmu_opcode tcmu_hdr_get_op(__u32 len_op)
|
||||
{
|
||||
return hdr->len_op & TCMU_OP_MASK;
|
||||
return len_op & TCMU_OP_MASK;
|
||||
}
|
||||
|
||||
static inline void tcmu_hdr_set_op(struct tcmu_cmd_entry_hdr *hdr, enum tcmu_opcode op)
|
||||
static inline void tcmu_hdr_set_op(__u32 *len_op, enum tcmu_opcode op)
|
||||
{
|
||||
hdr->len_op &= ~TCMU_OP_MASK;
|
||||
hdr->len_op |= (op & TCMU_OP_MASK);
|
||||
*len_op &= ~TCMU_OP_MASK;
|
||||
*len_op |= (op & TCMU_OP_MASK);
|
||||
}
|
||||
|
||||
static inline __u32 tcmu_hdr_get_len(struct tcmu_cmd_entry_hdr *hdr)
|
||||
static inline __u32 tcmu_hdr_get_len(__u32 len_op)
|
||||
{
|
||||
return hdr->len_op & ~TCMU_OP_MASK;
|
||||
return len_op & ~TCMU_OP_MASK;
|
||||
}
|
||||
|
||||
static inline void tcmu_hdr_set_len(struct tcmu_cmd_entry_hdr *hdr, __u32 len)
|
||||
static inline void tcmu_hdr_set_len(__u32 *len_op, __u32 len)
|
||||
{
|
||||
hdr->len_op &= TCMU_OP_MASK;
|
||||
hdr->len_op |= len;
|
||||
*len_op &= TCMU_OP_MASK;
|
||||
*len_op |= len;
|
||||
}
|
||||
|
||||
/* Currently the same as SCSI_SENSE_BUFFERSIZE */
|
||||
@@ -97,13 +106,14 @@ static inline void tcmu_hdr_set_len(struct tcmu_cmd_entry_hdr *hdr, __u32 len)
|
||||
struct tcmu_cmd_entry {
|
||||
struct tcmu_cmd_entry_hdr hdr;
|
||||
|
||||
uint16_t cmd_id;
|
||||
uint16_t __pad1;
|
||||
|
||||
union {
|
||||
struct {
|
||||
uint32_t iov_cnt;
|
||||
uint32_t iov_bidi_cnt;
|
||||
uint32_t iov_dif_cnt;
|
||||
uint64_t cdb_off;
|
||||
uint64_t iov_cnt;
|
||||
uint64_t __pad1;
|
||||
uint64_t __pad2;
|
||||
struct iovec iov[0];
|
||||
} req;
|
||||
struct {
|
||||
|
Reference in New Issue
Block a user