109 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * SCSI target kernel/user interface
 | 
						|
 *
 | 
						|
 * Copyright (C) 2005 FUJITA Tomonori <tomof@acm.org>
 | 
						|
 * Copyright (C) 2005 Mike Christie <michaelc@cs.wisc.edu>
 | 
						|
 *
 | 
						|
 * 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.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful, but
 | 
						|
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
 * General Public License for more details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU General Public License
 | 
						|
 * along with this program; if not, write to the Free Software
 | 
						|
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 | 
						|
 * 02110-1301 USA
 | 
						|
 */
 | 
						|
#ifndef __SCSI_TARGET_IF_H
 | 
						|
#define __SCSI_TARGET_IF_H
 | 
						|
 | 
						|
/* user -> kernel */
 | 
						|
#define	TGT_UEVENT_CMD_RSP		0x0001
 | 
						|
#define	TGT_UEVENT_IT_NEXUS_RSP		0x0002
 | 
						|
#define	TGT_UEVENT_TSK_MGMT_RSP		0x0003
 | 
						|
 | 
						|
/* kernel -> user */
 | 
						|
#define	TGT_KEVENT_CMD_REQ		0x1001
 | 
						|
#define	TGT_KEVENT_CMD_DONE		0x1002
 | 
						|
#define	TGT_KEVENT_IT_NEXUS_REQ		0x1003
 | 
						|
#define	TGT_KEVENT_TSK_MGMT_REQ		0x1004
 | 
						|
 | 
						|
struct tgt_event_hdr {
 | 
						|
	uint16_t version;
 | 
						|
	uint16_t status;
 | 
						|
	uint16_t type;
 | 
						|
	uint16_t len;
 | 
						|
} __attribute__ ((aligned (sizeof(uint64_t))));
 | 
						|
 | 
						|
struct tgt_event {
 | 
						|
	struct tgt_event_hdr hdr;
 | 
						|
 | 
						|
	union {
 | 
						|
		/* user-> kernel */
 | 
						|
		struct {
 | 
						|
			int host_no;
 | 
						|
			int result;
 | 
						|
			aligned_u64 itn_id;
 | 
						|
			aligned_u64 tag;
 | 
						|
			aligned_u64 uaddr;
 | 
						|
			aligned_u64 sense_uaddr;
 | 
						|
			uint32_t len;
 | 
						|
			uint32_t sense_len;
 | 
						|
			uint8_t rw;
 | 
						|
		} cmd_rsp;
 | 
						|
		struct {
 | 
						|
			int host_no;
 | 
						|
			int result;
 | 
						|
			aligned_u64 itn_id;
 | 
						|
			aligned_u64 mid;
 | 
						|
		} tsk_mgmt_rsp;
 | 
						|
		struct {
 | 
						|
			__s32 host_no;
 | 
						|
			__s32 result;
 | 
						|
			aligned_u64 itn_id;
 | 
						|
			__u32 function;
 | 
						|
		} it_nexus_rsp;
 | 
						|
 | 
						|
		/* kernel -> user */
 | 
						|
		struct {
 | 
						|
			int host_no;
 | 
						|
			uint32_t data_len;
 | 
						|
			aligned_u64 itn_id;
 | 
						|
			uint8_t scb[16];
 | 
						|
			uint8_t lun[8];
 | 
						|
			int attribute;
 | 
						|
			aligned_u64 tag;
 | 
						|
		} cmd_req;
 | 
						|
		struct {
 | 
						|
			int host_no;
 | 
						|
			int result;
 | 
						|
			aligned_u64 itn_id;
 | 
						|
			aligned_u64 tag;
 | 
						|
		} cmd_done;
 | 
						|
		struct {
 | 
						|
			int host_no;
 | 
						|
			int function;
 | 
						|
			aligned_u64 itn_id;
 | 
						|
			aligned_u64 tag;
 | 
						|
			uint8_t lun[8];
 | 
						|
			aligned_u64 mid;
 | 
						|
		} tsk_mgmt_req;
 | 
						|
		struct {
 | 
						|
			__s32 host_no;
 | 
						|
			__u32 function;
 | 
						|
			aligned_u64 itn_id;
 | 
						|
			__u32 max_cmds;
 | 
						|
			__u8 initiator_id[16];
 | 
						|
		} it_nexus_req;
 | 
						|
	} p;
 | 
						|
} __attribute__ ((aligned (sizeof(uint64_t))));
 | 
						|
 | 
						|
#define TGT_RING_SIZE (1UL << 16)
 | 
						|
 | 
						|
#endif
 |