27    cci::cci_param<unsigned int> p_num_sources;
 
   28    cci::cci_param<unsigned int> p_num_priorities;
 
   29    cci::cci_param<uint64_t> p_priority_base;
 
   30    cci::cci_param<uint64_t> p_pending_base;
 
   31    cci::cci_param<uint64_t> p_enable_base;
 
   32    cci::cci_param<uint64_t> p_enable_stride;
 
   33    cci::cci_param<uint64_t> p_context_base;
 
   34    cci::cci_param<uint64_t> p_context_stride;
 
   35    cci::cci_param<uint64_t> p_aperture_size;
 
   36    cci::cci_param<std::string> p_hart_config;
 
   39    sc_core::sc_vector<QemuTargetSignalSocket> irq_in;
 
   41    plic_sifive(
const sc_core::sc_module_name& name, sc_core::sc_object* 
o)
 
   47        , p_num_sources(
"num_sources", 0, 
"Number of input IRQ lines")
 
   48        , p_num_priorities(
"num_priorities", 0, 
"Number of priorities")
 
   49        , p_priority_base(
"priority_base", 0, 
"Base address of the priority registers")
 
   50        , p_pending_base(
"pending_base", 0, 
"Base address of the pending registers")
 
   51        , p_enable_base(
"enable_base", 0, 
"Base address of the enable registers")
 
   52        , p_enable_stride(
"enable_stride", 0, 
"Size of the enable regiters")
 
   53        , p_context_base(
"context_base", 0, 
"Base address the context registers")
 
   54        , p_context_stride(
"context_stride", 0, 
"Size of the context registers")
 
   55        , p_aperture_size(
"aperture_size", 0, 
"Size of the whole PLIC address space")
 
   56        , p_hart_config(
"hart_config", 
"",
 
   57                        "HART configurations (can be U, S, H or M or " 
   58                        "a combination of those, each HART config is " 
   59                        "separarted by a comma) (example: \"MS,MS\" -> " 
   60                        "two HARTs with M and S mode)")
 
   66    void before_end_of_elaboration()
 override 
   68        QemuDevice::before_end_of_elaboration();
 
   70        m_dev.set_prop_str(
"hart-config", p_hart_config.get_value().c_str());
 
   71        m_dev.set_prop_int(
"num-sources", p_num_sources);
 
   72        m_dev.set_prop_int(
"aperture-size", p_aperture_size);
 
   73        m_dev.set_prop_int(
"num-priorities", p_num_priorities);
 
   74        m_dev.set_prop_int(
"priority-base", p_priority_base);
 
   75        m_dev.set_prop_int(
"pending-base", p_pending_base);
 
   76        m_dev.set_prop_int(
"enable-base", p_enable_base);
 
   77        m_dev.set_prop_int(
"enable-stride", p_enable_stride);
 
   78        m_dev.set_prop_int(
"context-base", p_context_base);
 
   79        m_dev.set_prop_int(
"context-stride", p_context_stride);
 
   82    void end_of_elaboration()
 override 
   86        QemuDevice::set_sysbus_as_parent_bus();
 
   87        QemuDevice::end_of_elaboration();
 
   92        for (
i = 0; 
i < p_num_sources; 
i++) {
 
   93            irq_in[
i].init(m_dev, 
i);