#ifndef _TRANSPORT_H_
#define _TRANSPORT_H_

#include <linux/blkdev.h>

/* Bulk only data structures */

/* command block wrapper */
struct bulk_cb_wrap {
	__le32	Signature;			/* contains 'USBC' */
	__u32	Tag;					/* unique per command id */
	__le32	DataTransferLength;	/* size of data */
	__u8	Flags;				/* direction in bit 0 */
	__u8	Lun;					/* LUN normally 0 */
	__u8	Length;				/* of of the CDB */
	__u8	CDB[16];				/* max command */
};

#define US_BULK_CB_WRAP_LEN	31
#define US_BULK_CB_SIGN		0x43425355	/*spells out USBC */
#define US_BULK_FLAG_IN		1
#define US_BULK_FLAG_OUT	0

/* command status wrapper */
struct bulk_cs_wrap {
	__le32	Signature;		/* should = 'USBS' */
	__u32		Tag;			/* same as original command */
	__le32	Residue;		/* amount not transferred */
	__u8		Status;		/* see below */
	__u8		Filler[18];
};

#define US_BULK_CS_WRAP_LEN	13
#define US_BULK_CS_SIGN		0x53425355	/* spells out 'USBS' */
#define US_BULK_STAT_OK		0
#define US_BULK_STAT_FAIL	1
#define US_BULK_STAT_PHASE	2

/* bulk-only class specific requests */
#define US_BULK_RESET_REQUEST	0xff
#define US_BULK_GET_MAX_LUN	0xfe

/* usb_stor_bulk_transfer_xxx() return codes, in order of severity */
#define USB_STOR_XFER_GOOD	0	/* good transfer                 */
#define USB_STOR_XFER_SHORT	1	/* transferred less than expected */
#define USB_STOR_XFER_STALLED	2	/* endpoint stalled              */
#define USB_STOR_XFER_LONG	3	/* device tried to send too much */
#define USB_STOR_XFER_ERROR	4	/* transfer died in the middle   */

/* Transport return codes */
#define USB_STOR_TRANSPORT_GOOD	0	/* Transport good, command good	*/
#define USB_STOR_TRANSPORT_FAILED	1	/* Transport good, command failed   */
#define USB_STOR_TRANSPORT_NO_SENSE	2	/* Command failed, no auto-sense    */
#define USB_STOR_TRANSPORT_ERROR	3	/* Transport bad (i.e. device dead) */

/*
 * We used to have USB_STOR_XFER_ABORTED and USB_STOR_TRANSPORT_ABORTED
 * return codes.  But now the transport and low-level transfer routines
 * treat an abort as just another error (-ENOENT for a cancelled URB).
 * It is up to the invoke_transport() function to test for aborts and
 * distinguish them from genuine communication errors.
 */

/* CBI accept device specific command */
#define US_CBI_ADSC		0
extern int usb_stor_Bulk_transport(struct scsi_cmnd *, struct us_data*);
extern int usb_stor_Bulk_max_lun(struct us_data*);
extern int usb_stor_Bulk_reset(struct us_data*);
extern void usb_stor_print_cmd(struct scsi_cmnd *);
extern void usb_stor_invoke_transport(struct scsi_cmnd *, struct us_data*);
extern void usb_stor_stop_transport(struct us_data*);
extern int usb_stor_control_msg(struct us_data *us, unsigned int pipe,
		u8 request, u8 requesttype, u16 value, u16 index,
		void *data, u16 size, int timeout);
extern int usb_stor_clear_halt(struct us_data *us, unsigned int pipe);
extern int usb_stor_bulk_transfer_buf(struct us_data *us, unsigned int pipe,
		void *buf, unsigned int length, unsigned int *act_len);
extern int usb_stor_bulk_transfer_sg(struct us_data *us, unsigned int pipe,
		void *buf, unsigned int length, int use_sg, int *residual);
extern int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe,
		struct scsi_cmnd* srb);
extern int usb_stor_port_reset(struct us_data *us);

/* Protocol handling routines */
enum xfer_buf_dir	{TO_XFER_BUF, FROM_XFER_BUF};
extern unsigned int usb_stor_access_xfer_buf(struct us_data*, unsigned char *buffer,
	unsigned int buflen, struct scsi_cmnd *srb, struct scatterlist **,
	unsigned int *offset, enum xfer_buf_dir dir);
extern void usb_stor_set_xfer_buf(struct us_data*, unsigned char *buffer, unsigned int buflen, struct scsi_cmnd *srb,
	unsigned int dir);

// ENE scsi function
extern void ENE_stor_invoke_transport(struct scsi_cmnd *, struct us_data*);
extern int ENE_InitMedia(struct us_data*);
extern int ENE_SDInit(struct us_data*);
extern int ENE_MSInit(struct us_data*);
extern int ENE_SMInit(struct us_data*);
extern int ENE_ReadSDReg(struct us_data*, u8*);
extern int ENE_SendScsiCmd(struct us_data*, BYTE, void*, int);
extern int ENE_LoadBinCode(struct us_data*, BYTE);
extern int ENE_Read_BYTE(struct us_data*, WORD index, void *buf);
extern int ENE_Read_Data(struct us_data*, void *buf, unsigned int length);
extern int ENE_Write_Data(struct us_data*, void *buf, unsigned int length);
extern void BuildSenseBuffer(struct scsi_cmnd *, int);

// ENE scsi function
extern int SD_SCSIIrp(struct us_data *us, struct scsi_cmnd *srb);
extern int MS_SCSIIrp(struct us_data *us, struct scsi_cmnd *srb);
extern int SM_SCSIIrp(struct us_data *us, struct scsi_cmnd *srb);

// ENE MS function
extern int 	MS_CardInit(struct us_data *us);
extern void	MS_LibFreeAllocatedArea(struct us_data *us);
extern void	MS_LibFreeWriteBuf(struct us_data *us);
extern int	MS_LibFreeLogicalMap(struct us_data *us);
extern int	MS_LibForceSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk);
extern int	MS_ReaderReadPage(struct us_data *us, DWORD PhyBlockAddr, BYTE PageNum, DWORD *PageBuf, MS_LibTypeExtdat *ExtraDat);
extern int	MS_ReaderCopyBlock(struct us_data *us, WORD oldphy, WORD newphy, WORD PhyBlockAddr, BYTE PageNum, PBYTE buf, WORD len);
extern int	MS_ReaderEraseBlock(struct us_data *us, DWORD PhyBlockAddr);
extern int	MS_LibProcessBootBlock(struct us_data *us, WORD PhyBlock, BYTE *PageData);
extern int	MS_LibAllocLogicalMap(struct us_data *us);
extern int	MS_LibSetBootBlockMark(struct us_data *us, WORD phyblk);
extern int	MS_LibSetLogicalBlockMark(struct us_data *us, WORD phyblk, WORD mark);
extern int	MS_LibSetInitialErrorBlock(struct us_data *us, WORD phyblk);
extern int	MS_LibScanLogicalBlockNumber(struct us_data *us, WORD phyblk);
extern int	MS_LibAllocWriteBuf(struct us_data *us);
void		MS_LibClearWriteBuf(struct us_data *us);
void		MS_LibPhy2LogRange(WORD PhyBlock, WORD *LogStart, WORD *LogEnde);
extern int	MS_LibReadExtra(struct us_data *us, DWORD PhyBlock, BYTE PageNum, MS_LibTypeExtdat *ExtraDat);
extern int	MS_LibReadExtraBlock(struct us_data *us, DWORD PhyBlock, BYTE PageNum, BYTE blen, void *buf);
extern int	MS_LibSetAcquiredErrorBlock(struct us_data *us, WORD phyblk);
extern int	MS_LibErasePhyBlock(struct us_data *us, WORD phyblk);
extern int	MS_LibErrorPhyBlock(struct us_data *us, WORD phyblk);
extern int	MS_LibOverwriteExtra(struct us_data *us, DWORD PhyBlockAddr, BYTE PageNum, BYTE OverwriteFlag);
extern int	MS_LibSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk);
extern int	MS_LibCheckDisableBlock(struct us_data *us, WORD PhyBlock);
extern int	MS_CountFreeBlock(struct us_data *us, WORD PhyBlock);
extern int	MS_LibSearchBlockFromLogical(struct us_data *us, WORD logblk);
extern int	MS_LibSearchBlockFromPhysical(struct us_data *us, WORD phyblk);

// ENE SM function
extern int	SM_FreeMem(void);

#endif
