2017-08-22 02:13:45 -04:00
|
|
|
/*
|
|
|
|
|
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
|
|
|
|
* running old operating systems and software designed for IBM
|
|
|
|
|
* PC systems and compatibles from 1981 through fairly recent
|
|
|
|
|
* system designs based on the PCI bus.
|
|
|
|
|
*
|
|
|
|
|
* This file is part of the 86Box distribution.
|
|
|
|
|
*
|
|
|
|
|
* Definitions for the generic SCSI device command handler.
|
|
|
|
|
*
|
2018-04-25 23:51:13 +02:00
|
|
|
* Version: @(#)scsi_device.h 1.0.7 2018/03/29
|
2017-08-22 02:13:45 -04:00
|
|
|
*
|
|
|
|
|
* Authors: Miran Grca, <mgrca8@gmail.com>
|
|
|
|
|
* Fred N. van Kempen, <decwiz@yahoo.com>
|
|
|
|
|
*/
|
|
|
|
|
#ifndef SCSI_DEVICE_H
|
|
|
|
|
# define SCSI_DEVICE_H
|
|
|
|
|
|
2017-10-08 05:04:38 +02:00
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
int state;
|
|
|
|
|
int new_state;
|
|
|
|
|
int clear_req;
|
|
|
|
|
uint32_t bus_in, bus_out;
|
|
|
|
|
int dev_id;
|
|
|
|
|
|
|
|
|
|
int command_pos;
|
|
|
|
|
uint8_t command[20];
|
|
|
|
|
int data_pos;
|
|
|
|
|
|
|
|
|
|
int change_state_delay;
|
|
|
|
|
int new_req_delay;
|
|
|
|
|
} scsi_bus_t;
|
2017-08-22 02:13:45 -04:00
|
|
|
|
|
|
|
|
extern uint8_t *scsi_device_sense(uint8_t id, uint8_t lun);
|
|
|
|
|
extern void scsi_device_type_data(uint8_t id, uint8_t lun,
|
|
|
|
|
uint8_t *type, uint8_t *rmb);
|
2018-03-07 20:06:08 +01:00
|
|
|
extern int64_t scsi_device_get_callback(uint8_t scsi_id, uint8_t scsi_lun);
|
2017-08-22 21:28:22 +02:00
|
|
|
extern void scsi_device_request_sense(uint8_t scsi_id, uint8_t scsi_lun,
|
|
|
|
|
uint8_t *buffer,
|
|
|
|
|
uint8_t alloc_length);
|
2018-04-25 23:51:13 +02:00
|
|
|
extern void scsi_device_reset(uint8_t scsi_id, uint8_t scsi_lun);
|
2017-08-22 02:13:45 -04:00
|
|
|
extern int scsi_device_read_capacity(uint8_t id, uint8_t lun,
|
|
|
|
|
uint8_t *cdb, uint8_t *buffer,
|
|
|
|
|
uint32_t *len);
|
|
|
|
|
extern int scsi_device_present(uint8_t id, uint8_t lun);
|
|
|
|
|
extern int scsi_device_valid(uint8_t id, uint8_t lun);
|
|
|
|
|
extern int scsi_device_cdb_length(uint8_t id, uint8_t lun);
|
2017-08-22 21:28:22 +02:00
|
|
|
extern void scsi_device_command(uint8_t id, uint8_t lun, int cdb_len,
|
2017-08-22 02:13:45 -04:00
|
|
|
uint8_t *cdb);
|
2017-10-08 05:04:38 +02:00
|
|
|
extern void scsi_device_command_phase0(uint8_t scsi_id, uint8_t scsi_lun,
|
|
|
|
|
int cdb_len, uint8_t *cdb);
|
|
|
|
|
extern void scsi_device_command_phase1(uint8_t scsi_id, uint8_t scsi_lun);
|
2017-10-14 07:03:19 +02:00
|
|
|
extern int32_t *scsi_device_get_buf_len(uint8_t scsi_id, uint8_t scsi_lun);
|
2017-10-08 05:04:38 +02:00
|
|
|
|
|
|
|
|
extern int scsi_bus_update(scsi_bus_t *bus, int bus_assert);
|
|
|
|
|
extern int scsi_bus_read(scsi_bus_t *bus);
|
|
|
|
|
extern int scsi_bus_match(scsi_bus_t *bus, int bus_assert);
|
2017-08-22 02:13:45 -04:00
|
|
|
|
|
|
|
|
#endif /*SCSI_DEVICE_H*/
|