#include <target/target_core_base.h>

#define XCOPY_HDR_LEN			16
#define XCOPY_TARGET_DESC_LEN		32
#define XCOPY_SEGMENT_DESC_LEN		28
#define XCOPY_NAA_IEEE_REGEX_LEN	16
#define XCOPY_MAX_SECTORS		1024

/*
 * SPC4r37 6.4.6.1
 * Table 150 — CSCD descriptor ID values
 */
#define XCOPY_CSCD_DESC_ID_LIST_OFF_MAX	0x07FF

enum xcopy_origin_list {
	XCOL_SOURCE_RECV_OP = 0x01,
	XCOL_DEST_RECV_OP = 0x02,
};

struct xcopy_pt_cmd;

struct xcopy_op {
	int op_origin;

	struct se_cmd *xop_se_cmd;
	struct se_device *src_dev;
	unsigned char src_tid_wwn[XCOPY_NAA_IEEE_REGEX_LEN];
	struct se_device *dst_dev;
	unsigned char dst_tid_wwn[XCOPY_NAA_IEEE_REGEX_LEN];
	unsigned char local_dev_wwn[XCOPY_NAA_IEEE_REGEX_LEN];

	sector_t src_lba;
	sector_t dst_lba;
	unsigned short stdi;
	unsigned short dtdi;
	unsigned short nolb;
	unsigned int dbl;

	struct xcopy_pt_cmd *src_pt_cmd;
	struct xcopy_pt_cmd *dst_pt_cmd;

	u32 xop_data_nents;
	struct scatterlist *xop_data_sg;
	struct work_struct xop_work;
};

/*
 * Receive Copy Results Sevice Actions
 */
#define RCR_SA_COPY_STATUS		0x00
#define RCR_SA_RECEIVE_DATA		0x01
#define RCR_SA_OPERATING_PARAMETERS	0x03
#define RCR_SA_FAILED_SEGMENT_DETAILS	0x04

/*
 * Receive Copy Results defs for Operating Parameters
 */
#define RCR_OP_MAX_TARGET_DESC_COUNT	0x2
#define RCR_OP_MAX_SG_DESC_COUNT	0x1
#define RCR_OP_MAX_DESC_LIST_LEN	1024
#define RCR_OP_MAX_SEGMENT_LEN		268435456 /* 256 MB */
#define RCR_OP_TOTAL_CONCURR_COPIES	0x1 /* Must be <= 16384 */
#define RCR_OP_MAX_CONCURR_COPIES	0x1 /* Must be <= 255 */
#define RCR_OP_DATA_SEG_GRAN_LOG2	9 /* 512 bytes in log 2 */
#define RCR_OP_INLINE_DATA_GRAN_LOG2	9 /* 512 bytes in log 2 */
#define RCR_OP_HELD_DATA_GRAN_LOG2	9 /* 512 bytes in log 2 */

extern int target_xcopy_setup_pt(void);
extern void target_xcopy_release_pt(void);
extern sense_reason_t target_do_xcopy(struct se_cmd *);
extern sense_reason_t target_do_receive_copy_results(struct se_cmd *);
ec'>commit</a><a class='active' href='/cgit.cgi/linux/net-next.git/diff/sound/core/seq/seq_memory.h?id=81917bad86a66f2bdcb12b4c10ab1bf333ed25ec'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/sound/core/seq/seq_memory.h'>
<input type='hidden' name='id' value='81917bad86a66f2bdcb12b4c10ab1bf333ed25ec'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/diff/?id=81917bad86a66f2bdcb12b4c10ab1bf333ed25ec'>root</a>/<a href='/cgit.cgi/linux/net-next.git/diff/sound?id=81917bad86a66f2bdcb12b4c10ab1bf333ed25ec'>sound</a>/<a href='/cgit.cgi/linux/net-next.git/diff/sound/core?id=81917bad86a66f2bdcb12b4c10ab1bf333ed25ec'>core</a>/<a href='/cgit.cgi/linux/net-next.git/diff/sound/core/seq?id=81917bad86a66f2bdcb12b4c10ab1bf333ed25ec'>seq</a>/<a href='/cgit.cgi/linux/net-next.git/diff/sound/core/seq/seq_memory.h?id=81917bad86a66f2bdcb12b4c10ab1bf333ed25ec'>seq_memory.h</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='id' value='81917bad86a66f2bdcb12b4c10ab1bf333ed25ec'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><div class='diffstat-header'><a href='/cgit.cgi/linux/net-next.git/diff/?id=81917bad86a66f2bdcb12b4c10ab1bf333ed25ec'>Diffstat</a> (limited to 'sound/core/seq/seq_memory.h')</div><table summary='diffstat' class='diffstat'>