/***************************************************************************

 scsidev.h - Header which defines the interface between SCSI device handlers
             and SCSI interfaces.

***************************************************************************/

#ifndef _SCSIDEV_H_
#define _SCSIDEV_H_

#define SCSI_MAX_DEVICES	(16)

typedef int (* pSCSIDispatch)(int operation, void *file, INT64 intparm, data8_t *ptrparm);

typedef struct scsiconfigitem
{
	int scsiID;
	int diskID;
	pSCSIDispatch handler;
} SCSIConfigItem;

typedef struct scsiconfigtable
{
	int devs_present;
	SCSIConfigItem devices[SCSI_MAX_DEVICES];
} SCSIConfigTable;

/* SCSI IDs */
enum
{
	SCSI_ID_0 = 0,
	SCSI_ID_1,
	SCSI_ID_2,
	SCSI_ID_3,
	SCSI_ID_4,
	SCSI_ID_5,
	SCSI_ID_6,
	SCSI_ID_7
};

/* commands accepted by a SCSI device's dispatch handler */
enum
{
	SCSIOP_EXEC_COMMAND = 0,	/* execute a command packet */
	SCSIOP_READ_DATA,		/* data transfer from the device */
	SCSIOP_WRITE_DATA,		/* data transfer to the device */
	SCSIOP_ALLOC_INSTANCE,		/* allocate an instance of the device */
	SCSIOP_DELETE_INSTANCE,		/* delete an instance of the device */
	SCSIOP_GET_DEVICE		/* get the device's internal device (CDROM or HDD pointer) */
};

/* macros to make config structs cleaner */
#define SCSI_DEVICE_CDROM scsicd_dispatch
#define SCSI_DEVICE_HARDDISK scsihd_dispatch

/* CD-ROM handler */
int scsicd_dispatch(int operation, void *file, INT64 intparm, data8_t *ptrparm);

/* hard disk handler */
int scsihd_dispatch(int operation, void *file, INT64 intparm, data8_t *ptrparm);

#endif

