28    int get_psci_conduit_val()
 const 
   30        if (p_psci_conduit.get_value() == 
"disabled") {
 
   32        } 
else if (p_psci_conduit.get_value() == 
"smc") {
 
   34        } 
else if (p_psci_conduit.get_value() == 
"hvc") {
 
   42    void add_exclusive_ext(TlmPayload& 
pl)
 
   45        ext->add_hop(m_cpu.get_index());
 
   46        pl.set_extension(
ext);
 
   49    static uint64_t extract_data_from_payload(
const TlmPayload& 
pl)
 
   57        while (
ptr >= 
pl.get_data_ptr()) {
 
   65    cci::cci_param<unsigned int> p_mp_affinity;
 
   66    cci::cci_param<bool> p_has_el2;
 
   67    cci::cci_param<bool> p_has_el3;
 
   68    cci::cci_param<bool> p_start_powered_off;
 
   69    cci::cci_param<std::string> p_psci_conduit;
 
   70    cci::cci_param<uint64_t> p_rvbar;
 
   71    cci::cci_param<uint64_t> p_cntfrq_hz;
 
   89        , p_mp_affinity(
"mp_affinity", 0, 
"Multi-processor affinity value")
 
   90        , p_has_el2(
"has_el2", 
true, 
"ARM virtualization extensions")
 
   91        , p_has_el3(
"has_el3", 
true, 
"ARM secure-mode extensions")
 
   92        , p_start_powered_off(
"start_powered_off", 
false,
 
   93                              "Start and reset the CPU " 
   94                              "in powered-off state")
 
   95        , p_psci_conduit(
"psci_conduit", 
"disabled",
 
   96                         "Set the QEMU PSCI conduit: " 
   97                         "disabled->no conduit, " 
   98                         "hvc->through hvc call, " 
   99                         "smc->through smc call")
 
  100        , p_rvbar(
"rvbar", 0
ull, 
"Reset vector base address register value")
 
  101        , p_cntfrq_hz(
"cntfrq_hz", 0
ull, 
"CPU Generic Timer CNTFRQ in Hz")
 
  107        , irq_timer_phys_out(
"irq_timer_phys_out")
 
  108        , irq_timer_virt_out(
"irq_timer_virt_out")
 
  109        , irq_timer_hyp_out(
"irq_timer_hyp_out")
 
  110        , irq_timer_sec_out(
"irq_timer_sec_out")
 
  112        m_external_ev |= irq_in->default_event();
 
  113        m_external_ev |= fiq_in->default_event();
 
  114        m_external_ev |= virq_in->default_event();
 
  115        m_external_ev |= vfiq_in->default_event();
 
  118    void before_end_of_elaboration()
 override 
  120        QemuCpuArm::before_end_of_elaboration();
 
  123        cpu.set_aarch64_mode(
true);
 
  125        if (!p_mp_affinity.is_default_value()) {
 
  126            cpu.set_prop_int(
"mp-affinity", p_mp_affinity);
 
  128        cpu.set_prop_bool(
"has_el2", p_has_el2);
 
  129        cpu.set_prop_bool(
"has_el3", p_has_el3);
 
  131        cpu.set_prop_bool(
"start-powered-off", p_start_powered_off);
 
  132        cpu.set_prop_int(
"psci-conduit", get_psci_conduit_val());
 
  134        cpu.set_prop_int(
"rvbar", p_rvbar);
 
  135        if (!p_cntfrq_hz.is_default_value()) {
 
  136            cpu.set_prop_int(
"cntfrq", p_cntfrq_hz);
 
  140    void end_of_elaboration()
 override 
  142        QemuCpuArm::end_of_elaboration();
 
  144        irq_in.
init(m_dev, 0);
 
  145        fiq_in.
init(m_dev, 1);
 
  146        virq_in.
init(m_dev, 2);
 
  147        vfiq_in.
init(m_dev, 3);
 
  149        irq_timer_phys_out.
init(m_dev, 0);
 
  150        irq_timer_virt_out.
init(m_dev, 1);
 
  151        irq_timer_hyp_out.
init(m_dev, 2);
 
  152        irq_timer_sec_out.
init(m_dev, 3);
 
  155    void initiator_customize_tlm_payload(TlmPayload& 
payload)
 override 
  160        QemuCpu::initiator_customize_tlm_payload(
payload);
 
  164        if (!
arm_cpu.is_in_exclusive_context()) {
 
  181    void initiator_tidy_tlm_payload(TlmPayload& 
payload)
 override 
  188        QemuCpu::initiator_tidy_tlm_payload(
payload);
 
  193        if (
ext == 
nullptr) {
 
  198            auto sta = 
ext->get_exclusive_store_status();
 
  201            if (
sta == ExclusiveAccessTlmExtension::EXCLUSIVE_STORE_FAILURE) {
 
  245            m_cpu.exit_loop_from_io();
 
 
void init(qemu::Device dev, int gpio_idx)
Initialize this socket with a device and a GPIO index.
Definition qemu-initiator-signal-socket.h:137
void init(qemu::Device dev, int gpio_idx)
Initialize this socket with a device and a GPIO index.
Definition qemu-target-signal-socket.h:60