void EsifEvent_SignalIpcEvent(struct esif_ipc_event *eventHdrPtr) { #ifdef ESIF_FEAT_OPT_ACTION_SYSFS UNREFERENCED_PARAMETER(domainStr); #else eEsifError rc = ESIF_OK; EsifData binaryData = {ESIF_DATA_BINARY, NULL, 0, 0}; EsifData voidData = {ESIF_DATA_VOID, NULL, 0}; EsifDataPtr dataPtr = NULL; UInt8 participantId; char domainStr[8] = ""; esif_ccb_time_t now; UNREFERENCED_PARAMETER(domainStr); esif_ccb_system_time(&now); ESIF_TRACE_DEBUG( "\n" "===================================================\n" "ESIF IPC EVENT HEADER: Timestamp: %llu\n" " Latency: %u msec\n" "===================================================\n" "Version: %d\n" "Type: %s(%d)\n" "ID: %llu\n" "Timestamp: %llu\n" "Priority: %s(%d)\n" "Source: %d\n" "Dest: %d\n" "Dest Domain: %s(%04X)\n" "Data Size: %u\n\n", (u64)now, (int)(now - eventHdrPtr->timestamp), eventHdrPtr->version, esif_event_type_str(eventHdrPtr->type), eventHdrPtr->type, eventHdrPtr->id, eventHdrPtr->timestamp, esif_event_priority_str(eventHdrPtr->priority), eventHdrPtr->priority, eventHdrPtr->src_id, eventHdrPtr->dst_id, esif_primitive_domain_str(eventHdrPtr->dst_domain_id, domainStr, 8), eventHdrPtr->dst_domain_id, eventHdrPtr->data_len); dataPtr = &voidData; if (eventHdrPtr->data_len > 0) { binaryData.buf_ptr = eventHdrPtr + 1; binaryData.buf_len = eventHdrPtr->data_len; binaryData.data_len = eventHdrPtr->data_len; dataPtr = &binaryData; } /* * If the mapping function fails, we assume that the participant hasn't been created * In that case, we use 0 for the participant as the real ID will be gathered from * the creation data. */ participantId = eventHdrPtr->dst_id; if (eventHdrPtr->dst_id == ESIF_INSTANCE_UF) { rc = EsifUpPm_MapLpidToParticipantInstance(eventHdrPtr->src_id, &participantId); if (rc != ESIF_OK) { participantId = 0; } } // Best Effort Delivery EsifEventMgr_SignalEvent(participantId, eventHdrPtr->dst_domain_id, eventHdrPtr->type, dataPtr); return; #endif }
/* Documented In Header */ struct esif_event *esif_event_allocate( const enum esif_event_type type, const u16 size, const enum esif_event_priority priority, const u8 src, const u8 dst, const u16 dst_domain_id, const void *data_ptr ) { u16 new_size = size + sizeof(struct esif_event); struct esif_event *event_ptr = NULL; event_ptr = esif_ccb_memtype_zalloc(ESIF_MEMTYPE_TYPE_EVENT, new_size); if (event_ptr) { event_ptr->version = ESIF_EVENT_VERSION; event_ptr->size = new_size; event_ptr->type = type; event_ptr->priority = priority; event_ptr->src = src; event_ptr->dst = dst; event_ptr->dst_domain_id = dst_domain_id; event_ptr->data_size = size; /* * Assign Function Pointers If Any */ #ifdef ESIF_EVENT_DEBUG event_ptr->get_type_str = esif_event_type_str; event_ptr->get_priority_str = esif_event_priority_str; event_ptr->dump = esif_dump_event; #endif /* ** Transaction ID */ esif_ccb_write_lock(&g_event_lock); event_ptr->id = g_event_transaction_id++; esif_ccb_write_unlock(&g_event_lock); /* ** Time Stamp */ esif_ccb_system_time(&event_ptr->timestamp); /* ** Make A Copy Of The Data To Make Sure It Is Contigous ** In The Buffer */ if (NULL != data_ptr) esif_ccb_memcpy((event_ptr + 1), data_ptr, size); ESIF_TRACE_DYN_EVENT("%s: buf %p bytes %d\n", ESIF_FUNC, event_ptr, new_size); ESIF_TRACE_DYN_DECODE("Version: %d\n" "Type: %s(%d)\n" "ID: %llu\n" "Timestamp: %llu\n" "Priority: %s(%d)\n" "Source: %d\n" "Destination: %d\n" "Data Size: %d\n", event_ptr->version, esif_event_type_str(event_ptr->type), event_ptr->type, event_ptr->id, (u64)event_ptr->timestamp, esif_event_priority_str( event_ptr->priority), event_ptr->priority, event_ptr->src, event_ptr->dst, event_ptr->data_size); } return event_ptr; }