27    inline uint64_t get_uint64(std::string s)
 
   29        m_broker.lock_preset_value(s);
 
   30        m_broker.ignore_unconsumed_preset_values(
 
   31            [s](
const std::pair<std::string, cci::cci_value>& iv) -> 
bool { 
return iv.first == s; });
 
   32        auto v = m_broker.get_preset_cci_value(s);
 
   34            return v.get_uint64();
 
   40    cci::cci_broker_handle m_broker;
 
   43    cci::cci_param<uint32_t> p_pamax;
 
   44    cci::cci_param<uint16_t> p_num_smr;
 
   45    cci::cci_param<uint16_t> p_num_cb;
 
   46    cci::cci_param<uint16_t> p_num_pages;
 
   47    cci::cci_param<bool> p_ato;
 
   48    cci::cci_param<uint8_t> p_version;
 
   49    cci::cci_param<uint8_t> p_num_tbu;
 
   52    sc_core::sc_vector<QemuTargetSocket<>> upstream_socket;
 
   53    sc_core::sc_vector<QemuInitiatorSignalSocket> irq_context;
 
   55    sc_core::sc_vector<QemuInitiatorSocket<>> downstream_socket;
 
   58    arm_smmu(
const sc_core::sc_module_name& name, sc_core::sc_object* o)
 
   64        , m_broker(cci::cci_get_broker())
 
   65        , p_pamax(
"pamax", 48, 
"")
 
   66        , p_num_smr(
"num_smr", 48, 
"")
 
   67        , p_num_cb(
"num_cb", 16, 
"")
 
   68        , p_num_pages(
"num_pages", 16, 
"")
 
   69        , p_ato(
"ato", 
true, 
"")
 
   70        , p_version(
"version", 0x21, 
"")
 
   71        , p_num_tbu(
"num_tbu", 1, 
"")
 
   72        , upstream_socket(
"upstream_socket", p_num_tbu,
 
   74        , register_socket(
"mem", m_inst)
 
   75        , irq_global(
"irq_global")
 
   76        , irq_context(
"irq_context", p_num_cb,
 
   78        , downstream_socket(
"downstream_socket", p_num_tbu,
 
   80        , dma_socket(
"dma", *
this, m_inst)
 
   84    void before_end_of_elaboration()
 override 
   86        QemuDevice::before_end_of_elaboration();
 
   88        m_dev.set_prop_int(
"pamax", p_pamax);
 
   89        m_dev.set_prop_int(
"num-smr", p_num_smr);
 
   90        m_dev.set_prop_int(
"num-cb", p_num_cb);
 
   91        m_dev.set_prop_int(
"num-pages", p_num_pages);
 
   92        m_dev.set_prop_bool(
"ato", p_ato);
 
   93        m_dev.set_prop_int(
"version", p_version);
 
   94        m_dev.set_prop_int(
"num-tbu", p_num_tbu);
 
  102                std::string s = std::string(name()) + 
".upstream_socket_" + std::to_string(
i) + 
".address";
 
  103                if (m_broker.has_preset_value(s)) {
 
  104                    m_dev.set_prop_int((
"tbu-offset-" + std::to_string(
i)).
c_str(), get_uint64(s));
 
  108                std::string s = std::string(name()) + 
".upstream_socket_" + std::to_string(
i) + 
".size";
 
  109                if (m_broker.has_preset_value(s)) {
 
  110                    m_dev.set_prop_int((
"tbu-size-" + std::to_string(
i)).
c_str(), get_uint64(s));
 
  114                std::string s = std::string(name()) + 
".tbu_sid_" + std::to_string(
i);
 
  115                if (m_broker.has_preset_value(s)) {
 
  116                    m_dev.set_prop_int((
"tbu-sid-" + std::to_string(
i)).
c_str(), get_uint64(s));
 
  121        dma_socket.init(m_dev, 
"dma");
 
  124    void end_of_elaboration()
 override 
  128        QemuDevice::set_sysbus_as_parent_bus();
 
  129        QemuDevice::end_of_elaboration();
 
  139            irq_context[
i].init_sbd(
sbd, 
i + 1);
 
  144    virtual void initiator_customize_tlm_payload(TlmPayload& 
payload)
 override {}
 
  146    virtual void initiator_tidy_tlm_payload(TlmPayload& 
payload)
 override {}
 
  148    virtual sc_core::sc_time initiator_get_local_time()
 override { 
return sc_core::sc_time_stamp(); }
 
  150    virtual void initiator_set_local_time(
const sc_core::sc_time& 
t)
 override {}
 
  152    virtual void initiator_async_run(qemu::Cpu::AsyncJobFn 
job)
 override {}
 
 
void init_sbd(qemu::SysBusDevice sbd, int gpio_idx)
Initialize this socket with a QEMU SysBusDevice, and a GPIO index.
Definition qemu-initiator-signal-socket.h:173