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