/* ATAPI/SCSI Commands */
#define TEST_UNIT_READY			0x00
#define REQUEST_SENSE         	0x03
#define READ_6      			0x08
#define INQUIRY					0x12
#define MODE_SELECT				0x15
#define MODE_SENSE				0x1a /*actually MODE_SENSE_6 but I want to match QEMU's scheme*/
#define START_STOP            	0x1b /*LOAD_UNLOAD is the same*/
#define ALLOW_MEDIUM_REMOVAL 	0x1e
#define READ_CAPACITY_10      	0x25
#define READ_10					0x28
#define SEEK_10					0x2b
#define READ_SUBCHANNEL			0x42 /*unimplemented on QEMU, so I came up with this name for this command*/
#define READ_TOC				0x43
#define READ_HEADER				0x44 /*unimplemented on QEMU, so I came up with this name for this command*/
#define	PLAY_AUDIO_10	        0x45
#define GET_CONFIGURATION		0x46
#define PLAY_AUDIO_MSF			0x47
#define GET_EVENT_NOTIFICATION	0x4a
#define PAUSE_RESUME			0x4b
#define STOP_PLAY_SCAN		0x4e
#define READ_DISC_INFORMATION	0x51
#define MODE_SELECT_10			0x55
#define MODE_SENSE_10			0x5a
#define PLAY_AUDIO_12			0xa5 /*deprecated*/
#define READ_12					0xa8
#define READ_DVD_STRUCTURE		0xad
#define SET_CD_SPEED			0xbb
#define MECHANISM_STATUS		0xbd
#define READ_CD					0xbe
#define SEND_DVD_STRUCTURE		0xbf

/* SCSI Sense Keys */
#define SENSE_NONE				0
#define SENSE_NOT_READY			2
#define SENSE_ILLEGAL_REQUEST	5
#define SENSE_UNIT_ATTENTION	6

/* SCSI Additional Sense Codes */
#define ASC_ILLEGAL_OPCODE		0x20
#define	ASC_INV_FIELD_IN_CMD_PACKET	0x24
#define ASC_MEDIUM_MAY_HAVE_CHANGED	0x28
#define ASC_MEDIUM_NOT_PRESENT		0x3a

/* Mode page codes for mode sense/set */
#define GPMODE_R_W_ERROR_PAGE		0x01
#define GPMODE_CDROM_PAGE		0x0d
#define GPMODE_CDROM_AUDIO_PAGE		0x0e
#define GPMODE_CAPABILITIES_PAGE	0x2a
#define GPMODE_ALL_PAGES		0x3f

/*
 *  SCSI Status codes
*/
#define GOOD                 0x00
#define CHECK_CONDITION      0x02
#define CONDITION_GOOD       0x04
#define BUSY                 0x08
#define INTERMEDIATE_GOOD    0x10
#define INTERMEDIATE_C_GOOD  0x14
#define RESERVATION_CONFLICT 0x18
#define COMMAND_TERMINATED   0x22
#define TASK_SET_FULL        0x28
#define ACA_ACTIVE           0x30
#define TASK_ABORTED         0x40

#define STATUS_MASK          0x3e

/* Event notification classes for GET EVENT STATUS NOTIFICATION */
#define GESN_NO_EVENTS                0
#define GESN_OPERATIONAL_CHANGE       1
#define GESN_POWER_MANAGEMENT         2
#define GESN_EXTERNAL_REQUEST         3
#define GESN_MEDIA                    4
#define GESN_MULTIPLE_HOSTS           5
#define GESN_DEVICE_BUSY              6

/* Event codes for MEDIA event status notification */
#define MEC_NO_CHANGE                 0
#define MEC_EJECT_REQUESTED           1
#define MEC_NEW_MEDIA                 2
#define MEC_MEDIA_REMOVAL             3 /* only for media changers */
#define MEC_MEDIA_CHANGED             4 /* only for media changers */
#define MEC_BG_FORMAT_COMPLETED       5 /* MRW or DVD+RW b/g format completed */
#define MEC_BG_FORMAT_RESTARTED       6 /* MRW or DVD+RW b/g format restarted */
#define MS_TRAY_OPEN                  1
#define MS_MEDIA_PRESENT              2

#define CHECK_READY	2
#define ALLOW_UA	1