2 * USB Mass Storage Device emulation
4 * Copyright (c) 2006 CodeSourcery.
5 * Written by Paul Brook
7 * This code is licensed under the LGPL.
10 #include "qemu/osdep.h"
11 #include "qapi/error.h"
13 #include "hw/usb/desc.h"
14 #include "hw/usb/msd.h"
16 static const struct SCSIBusInfo usb_msd_scsi_info_bot
= {
21 .transfer_data
= usb_msd_transfer_data
,
22 .complete
= usb_msd_command_complete
,
23 .cancel
= usb_msd_request_cancelled
,
24 .load_request
= usb_msd_load_request
,
27 static void usb_msd_bot_realize(USBDevice
*dev
, Error
**errp
)
29 MSDState
*s
= USB_STORAGE_DEV(dev
);
30 DeviceState
*d
= DEVICE(dev
);
32 usb_desc_create_serial(dev
);
34 dev
->flags
|= (1 << USB_DEV_FLAG_IS_SCSI_STORAGE
);
36 s
->dev
.auto_attach
= 0;
39 scsi_bus_init(&s
->bus
, sizeof(s
->bus
), DEVICE(dev
), &usb_msd_scsi_info_bot
);
40 usb_msd_handle_reset(dev
);
43 static void usb_msd_class_bot_initfn(ObjectClass
*klass
, void *data
)
45 USBDeviceClass
*uc
= USB_DEVICE_CLASS(klass
);
47 uc
->realize
= usb_msd_bot_realize
;
48 uc
->attached_settable
= true;
51 static const TypeInfo bot_info
= {
53 .parent
= TYPE_USB_STORAGE
,
54 .class_init
= usb_msd_class_bot_initfn
,
57 static void register_types(void)
59 type_register_static(&bot_info
);
62 type_init(register_types
)