void smartconnect_xtlm::process_saxi_wr_resp()

in hdk/common/ip/cl_ip/cl_ip.ip_user_files/sim_scripts/cl_axi_sc_2x2/questa/smartconnect_xtlm.cxx [1330:1508]


void smartconnect_xtlm::process_saxi_wr_resp() {

   print_header("process_saxi_wr_resp()");

//   unsigned int num_si = maxi_wr_req_numsi_vec[slave_wr_resp].front();
//   xtlm::aximm_payload* trans_ptr = saxi_wr_resp_vec[num_si].front();

   while(!slave_wr_resp.empty()) {
   
      xtlm::aximm_payload* trans_ptr = slave_wr_resp.front();
      unsigned int num_si = map_wr_si_to_numsi[trans_ptr];
   
      unsigned int num_mi = slave_wr_resp_nummi.front();
   
      bool si_cascaded = (SI_m_properties[num_si].getInt("IS_CASCADED") == 1);
      bool mi_cascaded = (MI_m_properties[num_mi].getInt("IS_CASCADED") == 1);
      
	  if (m_report_handler->get_verbosity_level()
	  		== xsc::common_cpp::VERBOSITY::DEBUG) {
	  	m_ss.str("");
	  	m_ss << this->name() << "saxi_wr_resp_vec[" << num_si << "] size: " << saxi_wr_resp_vec[num_si].size() << "\n"
         << "Processing process_saxi_wr_resp on num_si: " << num_si << "\n"
         << "BEGIN Response information\n";
	  	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	  			DEBUG);
	  }
	  if (m_report_handler->get_verbosity_level()
	  		== xsc::common_cpp::VERBOSITY::DEBUG) {
		trans_ptr->get_log(payload_msg, 3);
	  	m_ss.str("");
	  	m_ss << this->name() << payload_msg << std::endl;
         m_ss << "RESPONSE: " << trans_ptr->get_response_string() << "\n"
          << "END Response information\n\n";
	  	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	  			DEBUG);
	  	payload_msg = "";
	  }
   
      if (saxi_wr_util[num_si]->is_master_ready() == false) {
	     if (m_report_handler->get_verbosity_level()
	     		== xsc::common_cpp::VERBOSITY::DEBUG) {
	     	m_ss.str("");
	     	m_ss << this->name() << "Processing process_saxi_wr_resp on num_si: " << num_si << " master not ready\n";
	     	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	     			DEBUG);
	     }
         next_trigger(saxi_wr_util[num_si]->resp_sampled);
         return;
      }

      slave_wr_resp.pop_front();
      slave_wr_resp_nummi.pop_front();
   
      saxi_wr_resp_vec[num_si].pop_front();
      
      trans_ptr->set_response_status(xtlm::XTLM_OK_RESPONSE);
      mmap_wr_si_to_mi_itr = mmap_wr_si_to_mi.find(trans_ptr);
   
      xtlm::aximm_payload* m_trans_ptr = NULL;
   
      while (mmap_wr_si_to_mi_itr != mmap_wr_si_to_mi.end() ) {
         m_trans_ptr = mmap_wr_si_to_mi_itr->second;
   
         if (!si_cascaded && m_trans_ptr->is_response_error()) {
            trans_ptr->set_response_status(m_trans_ptr->get_response_status());
         }
   
         if (mi_cascaded && !si_cascaded) {
	     if (m_report_handler->get_verbosity_level()
	     		== xsc::common_cpp::VERBOSITY::DEBUG) {
	     	m_ss.str("");
	     	m_ss << this->name() << "Accessing extension of " << m_trans_ptr << " \n";
	     	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	     			DEBUG);
	     }
            smartconnect_extension* exten = m_trans_ptr->get_extension<smartconnect_extension>();
            xtlm::aximm_payload* mi_trans_ptr = NULL;
            if (exten != 0) {
	     if (m_report_handler->get_verbosity_level()
	     		== xsc::common_cpp::VERBOSITY::DEBUG) {
	     	m_ss.str("");
	     	m_ss << this->name() << "Extension exists!!\n";
	     	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	     			DEBUG);
	     }
            } else {
	     if (m_report_handler->get_verbosity_level()
	     		== xsc::common_cpp::VERBOSITY::DEBUG) {
	     	m_ss.str("");
	     	m_ss << this->name() <<"Extension does not exists!!\n";
	     	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	     			DEBUG);
	     }
            }
            while ( !((exten->get_mi_trans_vec()).empty()) ) {
               mi_trans_ptr = (exten->get_mi_trans_vec()).front();
	            if (m_report_handler->get_verbosity_level()
	            		== xsc::common_cpp::VERBOSITY::DEBUG) {
	            	m_ss.str("");
	            	m_ss << this->name() << "Accessed:" << mi_trans_ptr << "\n";
	            	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	            			DEBUG);
	            }
               (exten->get_mi_trans_vec()).pop_front();
               if (mi_trans_ptr->is_response_error()) {
                  trans_ptr->set_response_status(mi_trans_ptr->get_response_status());
               }
               mi_trans_ptr->release();
            }
   
         }
   
         if (!si_cascaded) {
            m_trans_ptr->release();
         }
   
         mmap_wr_si_to_mi.erase(mmap_wr_si_to_mi_itr);
         map_wr_mi_to_si.erase(m_trans_ptr);
         mmap_wr_si_to_mi_itr = mmap_wr_si_to_mi.find(trans_ptr);
      }
   
      if (trans_ptr->get_response_status() == NULL) {
         trans_ptr->set_response_status(xtlm::XTLM_GENERIC_ERROR_RESPONSE);
      }
   
      sc_time delay = SC_ZERO_TIME;
   
      if (trans_ptr != NULL) {
	     if (m_report_handler->get_verbosity_level()
	     		== xsc::common_cpp::VERBOSITY::DEBUG) {
	     	m_ss.str("");
	     	m_ss << this->name() << "BEGIN sending Write Response information on num_si " << num_si << "\n";
	     	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	     			DEBUG);
	     }
	     if (m_report_handler->get_verbosity_level()
	     		== xsc::common_cpp::VERBOSITY::DEBUG) {
	    	trans_ptr->get_log(payload_msg, 3);
	     	m_ss.str("");
	     	m_ss << this->name() << payload_msg << std::endl;
            m_ss << "RESPONSE: " << trans_ptr->get_response_string() << "\n"
            << "END sending Write Response information on num_si " << num_si << "\n";
	     	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	     			DEBUG);
	     	payload_msg = "";
	     }
   
         print_log("SI", num_si, "WRITE", "Response sent", trans_ptr);
   
         saxi_wr_util[num_si]->send_resp(*trans_ptr, delay);
	     if (m_report_handler->get_verbosity_level()
	     		== xsc::common_cpp::VERBOSITY::DEBUG) {
	     	m_ss.str("");
	     	m_ss << this->name() << "INFO: " << std::string(this->name()) << ": process_saxi_wr_resp(): SAXI WR RESP sent \n\n";
	     	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	     			DEBUG);
	     }
         map_wr_si_to_nummi.erase(trans_ptr);
         map_wr_si_to_numsi.erase(trans_ptr);
   //      trans_ptr->release();
         create_wr_resp = false;
         bad_saxi_wr_trans = -1;
	     if (m_report_handler->get_verbosity_level()
	     		== xsc::common_cpp::VERBOSITY::DEBUG) {
	     	m_ss.str("");
	     	m_ss << this->name() << "INFO: " << std::string(this->name()) << ": process_saxi_wr_resp(): SAXI WR RESP released and sent \n\n";
	     	XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
	     			DEBUG);
	     }
      }

   } //end of while loop

   //Check for pending incoming wr transaction
   check_saxi_wr_req.notify(sc_core::SC_ZERO_TIME);

   print_footer("process_saxi_wr_resp()");

}