1#ifndef SCSI_DISK_H 2#define SCSI_DISK_H 3 4/* scsi-disk.c */ 5enum scsi_reason { 6 SCSI_REASON_DONE, /* Command complete. */ 7 SCSI_REASON_DATA /* Transfer complete, more data required. */ 8}; 9 10typedef struct SCSIDeviceState SCSIDeviceState; 11typedef struct SCSIDevice SCSIDevice; 12typedef void (*scsi_completionfn)(void *opaque, int reason, uint32_t tag, 13 uint32_t arg); 14 15struct SCSIDevice 16{ 17 SCSIDeviceState *state; 18 void (*destroy)(SCSIDevice *s); 19 int32_t (*send_command)(SCSIDevice *s, uint32_t tag, uint8_t *buf, 20 int lun); 21 void (*read_data)(SCSIDevice *s, uint32_t tag); 22 int (*write_data)(SCSIDevice *s, uint32_t tag); 23 void (*cancel_io)(SCSIDevice *s, uint32_t tag); 24 uint8_t *(*get_buf)(SCSIDevice *s, uint32_t tag); 25}; 26 27SCSIDevice *scsi_disk_init(BlockDriverState *bdrv, int tcq, 28 scsi_completionfn completion, void *opaque); 29SCSIDevice *scsi_generic_init(BlockDriverState *bdrv, int tcq, 30 scsi_completionfn completion, void *opaque); 31 32/* cdrom.c */ 33int cdrom_read_toc(int nb_sectors, uint8_t *buf, int msf, int start_track); 34int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num); 35 36#endif 37