root / hw / scsi.h @ 89e8b13c
History | View | Annotate | Download (1.8 kB)
1 | 43b443b6 | Gerd Hoffmann | #ifndef SCSI_DISK_H
|
---|---|---|---|
2 | 43b443b6 | Gerd Hoffmann | #define SCSI_DISK_H
|
3 | 43b443b6 | Gerd Hoffmann | |
4 | 43b443b6 | Gerd Hoffmann | #include "qdev.h" |
5 | 43b443b6 | Gerd Hoffmann | |
6 | 43b443b6 | Gerd Hoffmann | /* scsi-disk.c */
|
7 | 43b443b6 | Gerd Hoffmann | enum scsi_reason {
|
8 | 43b443b6 | Gerd Hoffmann | SCSI_REASON_DONE, /* Command complete. */
|
9 | 43b443b6 | Gerd Hoffmann | SCSI_REASON_DATA /* Transfer complete, more data required. */
|
10 | 43b443b6 | Gerd Hoffmann | }; |
11 | 43b443b6 | Gerd Hoffmann | |
12 | 43b443b6 | Gerd Hoffmann | typedef struct SCSIBus SCSIBus; |
13 | 43b443b6 | Gerd Hoffmann | typedef struct SCSIDevice SCSIDevice; |
14 | 43b443b6 | Gerd Hoffmann | typedef struct SCSIDeviceInfo SCSIDeviceInfo; |
15 | 43b443b6 | Gerd Hoffmann | typedef void (*scsi_completionfn)(SCSIBus *bus, int reason, uint32_t tag, |
16 | 43b443b6 | Gerd Hoffmann | uint32_t arg); |
17 | 43b443b6 | Gerd Hoffmann | |
18 | 43b443b6 | Gerd Hoffmann | struct SCSIDevice
|
19 | 43b443b6 | Gerd Hoffmann | { |
20 | 43b443b6 | Gerd Hoffmann | DeviceState qdev; |
21 | 43b443b6 | Gerd Hoffmann | uint32_t id; |
22 | 43b443b6 | Gerd Hoffmann | SCSIDeviceInfo *info; |
23 | 43b443b6 | Gerd Hoffmann | }; |
24 | 43b443b6 | Gerd Hoffmann | |
25 | 43b443b6 | Gerd Hoffmann | /* cdrom.c */
|
26 | 43b443b6 | Gerd Hoffmann | int cdrom_read_toc(int nb_sectors, uint8_t *buf, int msf, int start_track); |
27 | 43b443b6 | Gerd Hoffmann | int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num); |
28 | 43b443b6 | Gerd Hoffmann | |
29 | 43b443b6 | Gerd Hoffmann | /* scsi-bus.c */
|
30 | 43b443b6 | Gerd Hoffmann | typedef int (*scsi_qdev_initfn)(SCSIDevice *dev); |
31 | 43b443b6 | Gerd Hoffmann | struct SCSIDeviceInfo {
|
32 | 43b443b6 | Gerd Hoffmann | DeviceInfo qdev; |
33 | 43b443b6 | Gerd Hoffmann | scsi_qdev_initfn init; |
34 | 43b443b6 | Gerd Hoffmann | void (*destroy)(SCSIDevice *s);
|
35 | 43b443b6 | Gerd Hoffmann | int32_t (*send_command)(SCSIDevice *s, uint32_t tag, uint8_t *buf, |
36 | 43b443b6 | Gerd Hoffmann | int lun);
|
37 | 43b443b6 | Gerd Hoffmann | void (*read_data)(SCSIDevice *s, uint32_t tag);
|
38 | 43b443b6 | Gerd Hoffmann | int (*write_data)(SCSIDevice *s, uint32_t tag);
|
39 | 43b443b6 | Gerd Hoffmann | void (*cancel_io)(SCSIDevice *s, uint32_t tag);
|
40 | 43b443b6 | Gerd Hoffmann | uint8_t *(*get_buf)(SCSIDevice *s, uint32_t tag); |
41 | 43b443b6 | Gerd Hoffmann | }; |
42 | 43b443b6 | Gerd Hoffmann | |
43 | 43b443b6 | Gerd Hoffmann | typedef void (*SCSIAttachFn)(DeviceState *host, BlockDriverState *bdrv, |
44 | 43b443b6 | Gerd Hoffmann | int unit);
|
45 | 43b443b6 | Gerd Hoffmann | struct SCSIBus {
|
46 | 43b443b6 | Gerd Hoffmann | BusState qbus; |
47 | 43b443b6 | Gerd Hoffmann | int busnr;
|
48 | 43b443b6 | Gerd Hoffmann | |
49 | 43b443b6 | Gerd Hoffmann | int tcq, ndev;
|
50 | 43b443b6 | Gerd Hoffmann | scsi_completionfn complete; |
51 | 43b443b6 | Gerd Hoffmann | |
52 | 43b443b6 | Gerd Hoffmann | SCSIDevice *devs[8];
|
53 | 43b443b6 | Gerd Hoffmann | }; |
54 | 43b443b6 | Gerd Hoffmann | |
55 | 43b443b6 | Gerd Hoffmann | void scsi_bus_new(SCSIBus *bus, DeviceState *host, int tcq, int ndev, |
56 | 43b443b6 | Gerd Hoffmann | scsi_completionfn complete); |
57 | 43b443b6 | Gerd Hoffmann | void scsi_qdev_register(SCSIDeviceInfo *info);
|
58 | 43b443b6 | Gerd Hoffmann | |
59 | 43b443b6 | Gerd Hoffmann | static inline SCSIBus *scsi_bus_from_device(SCSIDevice *d) |
60 | 43b443b6 | Gerd Hoffmann | { |
61 | 43b443b6 | Gerd Hoffmann | return DO_UPCAST(SCSIBus, qbus, d->qdev.parent_bus);
|
62 | 43b443b6 | Gerd Hoffmann | } |
63 | 43b443b6 | Gerd Hoffmann | |
64 | 43b443b6 | Gerd Hoffmann | SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, DriveInfo *dinfo, int unit);
|
65 | 43b443b6 | Gerd Hoffmann | void scsi_bus_legacy_handle_cmdline(SCSIBus *bus);
|
66 | 43b443b6 | Gerd Hoffmann | |
67 | 43b443b6 | Gerd Hoffmann | #endif |