예제 #1
0
/* Insert Action Into List */
static eEsifError AddAction(
	EsifActMgrPtr THIS,
	EsifActTypePtr actionPtr
	)
{
	ESIF_TRACE_DEBUG("Item %p", actionPtr);
	return  esif_link_list_add_at_back(THIS->fActTypes, (void *)actionPtr);
}
예제 #2
0
파일: esif_uf_dspmgr.c 프로젝트: 01org/dptf
/* Insert Domain Into Linked List */
static eEsifError insert_domain(
	EsifDspPtr dspPtr,
	EsifFpcDomainPtr domainPtr
	)
{
	if ((NULL == dspPtr) || (NULL == domainPtr)) {
		return ESIF_E_PARAMETER_IS_NULL;
	}

	return esif_link_list_add_at_back(dspPtr->domain_ptr, (void *)domainPtr);
}
예제 #3
0
파일: esif_uf_dspmgr.c 프로젝트: 01org/dptf
/* Insert Event Into Linked List */
static eEsifError insert_event(
	EsifDspPtr dspPtr,
	EsifFpcEventPtr evtPtr
	)
{
	if ((NULL == dspPtr) || (NULL == evtPtr)) {
		return ESIF_E_PARAMETER_IS_NULL;
	}

	return esif_link_list_add_at_back(dspPtr->evt_ptr, (void *)evtPtr);
}
예제 #4
0
파일: esif_uf_dspmgr.c 프로젝트: 01org/dptf
/* Insert Algorithm Into Linked List */
static eEsifError insert_algorithm(
	EsifDspPtr dspPtr,
	EsifFpcAlgorithmPtr algoPtr
	)
{
	if ((NULL == dspPtr) || (NULL == algoPtr)) {
		return ESIF_E_PARAMETER_IS_NULL;
	}

	return esif_link_list_add_at_back(dspPtr->algo_ptr, (void *)algoPtr);
}
예제 #5
0
파일: esif_ccb_timer.c 프로젝트: 01org/dptf
static void esif_ccb_tmrm_add_destroy_event(
	struct esif_tmrm_item *self,
	esif_ccb_event_t *event_ptr
	)
{
	ESIF_ASSERT(self != NULL);
	ESIF_ASSERT(self->destroy_list_ptr != NULL);

	if (event_ptr != NULL) {
		esif_link_list_add_at_back(self->destroy_list_ptr, event_ptr);
	}
}
예제 #6
0
enum esif_rc esif_ht_add_item(
    struct esif_ht *self,
    u8 *key_ptr,
    u32 key_length,
    void *item_ptr
)
{
    enum esif_rc rc = ESIF_OK;
    struct esif_link_list *ll_ptr = NULL;
    struct esif_ht_node *ht_node = NULL;

    if ((key_ptr == NULL) || (self == NULL)) {
        ESIF_TRACE_DYN_VERB("NULL ptr passed in \n");
        rc = ESIF_E_PARAMETER_IS_NULL;
        goto exit;
    }

    ll_ptr = esif_ht_get_ll(self, key_ptr, key_length);
    if (ll_ptr == NULL) {
        ESIF_ASSERT(ESIF_FALSE); /* Should never happen */
        ESIF_TRACE_DYN_VERB("LL NULL for passed in key\n");
        rc = ESIF_E_NOT_FOUND;
        goto exit;
    }

    ht_node = esif_alloc_ht_node(key_ptr, key_length, item_ptr);
    if (ht_node == NULL) {
        rc = ESIF_E_NO_MEMORY;
        goto exit;
    }

    rc = esif_link_list_add_at_back(ll_ptr, (void *)ht_node);
    if (rc != ESIF_OK) {
        ESIF_TRACE_ERROR("Unable to add new HT link list node\n");
        goto exit;
    }

    ESIF_TRACE_DYN_VERB(
        "Key %p, key size %d, item %p, table %p ll %p\n",
        key_ptr,
        key_length,
        item_ptr,
        self,
        ll_ptr);
exit:
    if (rc != ESIF_OK) {
        if (ht_node != NULL)
            esif_destroy_ht_node(ht_node);
    }

    return rc;
}
예제 #7
0
파일: esif_ccb_timer.c 프로젝트: 01org/dptf
/* Every init should have a matching kill */
enum esif_rc esif_ccb_timer_init(
	esif_ccb_timer_t *timer_ptr,
	esif_ccb_timer_cb function_ptr,	/* Callback when timer fires */
	void *context_ptr		/* Callback context if any */
	)
{
	enum esif_rc rc = ESIF_OK;
	struct esif_tmrm_item *tmrm_item_ptr = NULL;

	if ((NULL == timer_ptr) || (NULL == function_ptr)) {
		rc = ESIF_E_PARAMETER_IS_NULL;
		goto exit;
	}

	rc = esif_ccb_tmrm_is_ready();
	if (rc != ESIF_OK)
		goto exit;

	rc = esif_ccb_tmrm_create_tmrm_item(function_ptr,
		context_ptr,
		&tmrm_item_ptr);
	if (rc != ESIF_OK)
		goto exit;

	/* Place the handle into the timer being initialized*/
	timer_ptr->timer_handle = tmrm_item_ptr->timer_handle;

	/*
	 * We create the manager list dynamically so that we don't have to call
	 * init/exit functions and can destroy the linked list
	 */
	esif_ccb_write_lock(&g_tmrm.mgr_lock);
	if (NULL == g_tmrm.timer_list_ptr) {

		g_tmrm.timer_list_ptr = esif_link_list_create();
		if(NULL == g_tmrm.timer_list_ptr) {
			rc = ESIF_E_NO_MEMORY;
			goto lock_exit;
		}
	}
	rc = esif_link_list_add_at_back(g_tmrm.timer_list_ptr, tmrm_item_ptr);
lock_exit:
	esif_ccb_write_unlock(&g_tmrm.mgr_lock);
exit:
	if (rc != ESIF_OK)
		esif_ccb_tmrm_destroy_tmrm_item(tmrm_item_ptr);

	return rc;
}
예제 #8
0
/* Write lock should be held when called */
static eEsifError EsifEventMgr_MoveEntryToGarbage(EventMgrEntryPtr entryPtr)
{
	eEsifError rc = ESIF_OK;
	EsifLinkListPtr listPtr = g_EsifEventMgr.garbageList;

	ESIF_ASSERT(NULL != entryPtr);

	if (NULL == listPtr) {
		rc = ESIF_E_UNSPECIFIED;
		goto exit;
	}

	rc = esif_link_list_add_at_back(listPtr, (void *)entryPtr);
exit:
	return rc;
}
예제 #9
0
파일: esif_uf_actmgr.c 프로젝트: LjdCN/dptf
static eEsifError EsifActMgr_AddEntry(
	EsifActMgrEntryPtr entryPtr
	)
{
	eEsifError rc = ESIF_OK;

	ESIF_ASSERT(entryPtr != NULL);

	esif_ccb_write_lock(&g_actMgr.mgrLock);

	rc =  esif_link_list_add_at_back(g_actMgr.actions, (void *)entryPtr);
	if (rc != ESIF_OK) {
		goto exit;
	}
	g_actMgr.numActions++;
exit:
	esif_ccb_write_unlock(&g_actMgr.mgrLock);
	return rc;
}
예제 #10
0
파일: esif_uf_actmgr.c 프로젝트: LjdCN/dptf
static eEsifError EsifActMgr_CreatePossActList_Locked()
{
	eEsifError rc = ESIF_OK;
	struct esif_ccb_file curFile = {0};
	esif_ccb_file_enum_t fileIter = {0};
	char libPath[ESIF_LIBPATH_LEN];
	char *dotPtr = NULL;
	EsifActMgrEntryPtr newPossPtr = NULL;
	EsifString filePattern = ESIF_UPE_FILE_PREFIX "*" ESIF_LIB_EXT;

	g_actMgr.possibleActions = esif_link_list_create();
	if (NULL == g_actMgr.possibleActions) {
		rc = ESIF_E_NO_MEMORY;
		goto exit;
	}

	/* Get the loadable action directory path */
	esif_build_path(libPath, sizeof(libPath), ESIF_PATHTYPE_DLL, NULL, NULL);

	fileIter = esif_ccb_file_enum_first(libPath, filePattern, &curFile);
	if (INVALID_HANDLE_VALUE == fileIter) {
		goto exit;
	}

	do {
		newPossPtr = esif_ccb_malloc(sizeof(*newPossPtr));
		if(NULL == newPossPtr) {
			break;
		}
		dotPtr = esif_ccb_strchr(curFile.filename, '.');
		if (dotPtr != NULL) {
			*dotPtr = '\0';
			newPossPtr->libName = (esif_string)esif_ccb_strdup(curFile.filename);

			esif_link_list_add_at_back(g_actMgr.possibleActions, (void *)newPossPtr);
		}
	} while (esif_ccb_file_enum_next(fileIter, filePattern, &curFile));
	esif_ccb_file_enum_close(fileIter);
exit:
	return rc;
}