quic/qbox
Loading...
Searching...
No Matches
usb_storage.h
1/*
2 * This file is part of libqbox
3 * Copyright (c) 2026 Qualcomm Innovation Center, Inc. All Rights Reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#ifndef _LIBQBOX_COMPONENTS_USB_STORAGE_H
9#define _LIBQBOX_COMPONENTS_USB_STORAGE_H
10
11#include <module_factory_registery.h>
12
13#include <qemu_xhci.h>
14
16{
17private:
18 std::string blkdev_id;
19 cci::cci_param<std::string> blkdev_str;
20
21public:
22 usb_storage(const sc_core::sc_module_name& name, sc_core::sc_object* o, sc_core::sc_object* t)
23 : usb_storage(name, *(dynamic_cast<QemuInstance*>(o)), (dynamic_cast<qemu_xhci*>(t)))
24 {
25 }
26 usb_storage(const sc_core::sc_module_name& n, QemuInstance& inst, qemu_xhci* xhci)
27 : qemu_xhci::Device(n, inst, "usb-storage")
28 , blkdev_id(std::string(name()) + "-id")
29 , blkdev_str("blkdev_str", "", "blkdev string for QEMU (do not specify ID)")
30 {
31 if (!blkdev_str.get_value().empty()) {
32 std::stringstream opts;
33 opts << blkdev_str.get_value();
34 opts << ",id=" << blkdev_id;
35
36 m_inst.add_arg("-drive");
37 m_inst.add_arg(opts.str().c_str());
38
39 set_dev_props = [this]() -> void { m_dev.set_prop_parse("drive", blkdev_id.c_str()); };
40 } else {
41 SCP_FATAL(()) << "usb storage needs a blkdev_str CCI Parameter!";
42 }
43 xhci->add_device(*this);
44 }
45};
46
47extern "C" void module_register();
48#endif
This class encapsulates a libqemu-cxx qemu::LibQemu instance. It handles QEMU parameters and instance...
Definition qemu-instance.h:86
void add_arg(const char *arg)
Add a command line argument to the qemu instance.
Definition qemu-instance.h:327
Definition target.h:160
Definition qemu_xhci.h:20
This class wraps the qemu's XHCI USB controller: eXtensible Host Controller Interface.
Definition qemu_xhci.h:17
Definition usb_storage.h:16