1aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/****************************************************************************** 2aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * 3aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Copyright (C) 2015 The Android Open Source Project 4aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * 5aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Licensed under the Apache License, Version 2.0 (the "License"); 6aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * you may not use this file except in compliance with the License. 7aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * You may obtain a copy of the License at: 8aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * 9aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * http://www.apache.org/licenses/LICENSE-2.0 10aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * 11aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Unless required by applicable law or agreed to in writing, software 12aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * distributed under the License is distributed on an "AS IS" BASIS, 13aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * See the License for the specific language governing permissions and 15aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * limitations under the License. 16aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * 17aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ***************************************************************************** 18aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 20aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 21aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 22aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @file 23aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* impeg2d_job_queue.c 24aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 25aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief 26aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Contains functions for job queue 27aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 28aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @author 29aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Harish 30aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 31aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par List of Functions: 32aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 33aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 34aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* None 35aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 36aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 37aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 38aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/ 39aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* File Includes */ 40aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*****************************************************************************/ 41aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <stdio.h> 42aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <stddef.h> 43aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <stdlib.h> 44aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <string.h> 45aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <assert.h> 46aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 47aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "iv_datatypedef.h" 48aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "iv.h" 49aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "ithread.h" 50aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_macros.h" 51aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_job_queue.h" 52aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 53aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 54aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 55aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 56aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief Returns size for job queue context. Does not include job queue buffer 57aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* requirements 58aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 59aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 60aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Returns size for job queue context. Does not include job queue buffer 61aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* requirements. Buffer size required to store the jobs should be allocated in 62aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* addition to the value returned here. 63aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 64aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns Size of the job queue context 65aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 66aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 67aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 68aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 69aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 70aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniWORD32 impeg2_jobq_ctxt_size() 71aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 72aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_size; 73aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani i4_size = sizeof(jobq_t); 74aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani i4_size += ithread_get_mutex_lock_size(); 75aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return i4_size; 76aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 77aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 78aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 79aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 80aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 81aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief 82aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Locks the jobq conext 83aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 84aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 85aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Locks the jobq conext by calling ithread_mutex_lock() 86aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 87aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] ps_jobq 88aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue context 89aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 90aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns IMPEG2D_FAIL if mutex lock fails else IV_SUCCESS 91aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 92aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 93aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 94aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 95aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 96aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T impeg2_jobq_lock(jobq_t *ps_jobq) 97aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 98aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_ret_val; 99aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani i4_ret_val = ithread_mutex_lock(ps_jobq->pv_mutex); 100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(i4_ret_val) 101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return IV_FAIL; 103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return IV_SUCCESS; 105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief 111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Unlocks the jobq conext 112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Unlocks the jobq conext by calling ithread_mutex_unlock() 115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] ps_jobq 117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue context 118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns IMPEG2D_FAIL if mutex unlock fails else IV_SUCCESS 120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T impeg2_jobq_unlock(jobq_t *ps_jobq) 127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_ret_val; 129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani i4_ret_val = ithread_mutex_unlock(ps_jobq->pv_mutex); 130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(i4_ret_val) 131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return IV_FAIL; 133aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 134aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return IV_SUCCESS; 135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 136aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 137aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 138aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 139aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 140aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief 141aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Yeilds the thread 142aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 143aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 144aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Unlocks the jobq conext by calling 145aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* impeg2_jobq_unlock(), ithread_yield() and then impeg2_jobq_lock() 146aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* jobq is unlocked before to ensure the jobq can be accessed by other threads 147aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* If unlock is not done before calling yield then no other thread can access 148aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* the jobq functions and update jobq. 149aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 150aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] ps_jobq 151aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue context 152aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 153aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns IMPEG2D_FAIL if mutex lock unlock or yield fails else IV_SUCCESS 154aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 155aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 156aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 157aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 158aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 159aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T impeg2_jobq_yield(jobq_t *ps_jobq) 160aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 161aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 162aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani IV_API_CALL_STATUS_T e_ret = IV_SUCCESS; 163aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 164aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani IV_API_CALL_STATUS_T e_ret_tmp; 165aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret_tmp = impeg2_jobq_unlock(ps_jobq); 166aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret_tmp != IV_SUCCESS), e_ret_tmp); 167aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 168aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani //NOP(1024 * 8); 169aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ithread_yield(); 170aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 171aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret_tmp = impeg2_jobq_lock(ps_jobq); 172aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret_tmp != IV_SUCCESS), e_ret_tmp); 173aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return e_ret; 174aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 175aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 176aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 177aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 178aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 179aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 180aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief free the job queue pointers 181aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 182aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 183aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Frees the jobq context 184aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 185aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] pv_buf 186aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Memoy for job queue buffer and job queue context 187aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 188aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns Pointer to job queue context 189aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 190aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 191aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Since it will be called only once by master thread this is not thread safe. 192aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 193aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 194aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 195aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T impeg2_jobq_free(jobq_t *ps_jobq) 196aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 197aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_ret; 198aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani i4_ret = ithread_mutex_destroy(ps_jobq->pv_mutex); 199aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 200aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(0 == i4_ret) 201aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return IV_SUCCESS; 202aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani else 203aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return IV_FAIL; 204aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 205aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 206aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 207aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 208aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 209aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief Initialize the job queue 210aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 211aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 212aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Initializes the jobq context and sets write and read pointers to start of 213aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* job queue buffer 214aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 215aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] pv_buf 216aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Memoy for job queue buffer and job queue context 217aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 218aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] buf_size 219aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Size of the total memory allocated 220aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 221aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns Pointer to job queue context 222aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 223aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 224aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Since it will be called only once by master thread this is not thread safe. 225aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 226aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 227aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 228aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid* impeg2_jobq_init(void *pv_buf, WORD32 i4_buf_size) 229aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 230aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani jobq_t *ps_jobq; 231aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani UWORD8 *pu1_buf; 232aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani pu1_buf = (UWORD8 *)pv_buf; 233aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 234aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq = (jobq_t *)pu1_buf; 235aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani pu1_buf += sizeof(jobq_t); 236aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani i4_buf_size -= sizeof(jobq_t); 237aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 238aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->pv_mutex = pu1_buf; 239aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani pu1_buf += ithread_get_mutex_lock_size(); 240aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani i4_buf_size -= ithread_get_mutex_lock_size(); 241aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 242aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(i4_buf_size <= 0) 243aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return NULL; 244aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 245aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ithread_mutex_init(ps_jobq->pv_mutex); 246aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 247aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->pv_buf_base = pu1_buf; 248aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->pv_buf_wr = pu1_buf; 249aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->pv_buf_rd = pu1_buf; 250aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->pv_buf_end = pu1_buf + i4_buf_size; 251aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->i4_terminate = 0; 252aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 253aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 254aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return ps_jobq; 255aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 256aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 257aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 258aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 259aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief 260aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Resets the jobq conext 261aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 262aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 263aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Resets the jobq conext by initilizing job queue context elements 264aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 265aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] ps_jobq 266aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue context 267aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 268aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns IMPEG2D_FAIL if lock unlock fails else IV_SUCCESS 269aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 270aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 271aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 272aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 273aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 274aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T impeg2_jobq_reset(jobq_t *ps_jobq) 275aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 276aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani IV_API_CALL_STATUS_T e_ret = IV_SUCCESS; 277aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = impeg2_jobq_lock(ps_jobq); 278aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret != IV_SUCCESS), e_ret); 279aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 280aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->pv_buf_wr = ps_jobq->pv_buf_base; 281aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->pv_buf_rd = ps_jobq->pv_buf_base; 282aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->i4_terminate = 0; 283aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = impeg2_jobq_unlock(ps_jobq); 284aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret != IV_SUCCESS), e_ret); 285aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 286aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return e_ret; 287aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 288aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 289aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 290aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 291aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 292aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief 293aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Deinitializes the jobq conext 294aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 295aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 296aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Deinitializes the jobq conext by calling impeg2_jobq_reset() 297aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* and then destrying the mutex created 298aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 299aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] ps_jobq 300aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue context 301aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 302aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns IMPEG2D_FAIL if lock unlock fails else IV_SUCCESS 303aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 304aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 305aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 306aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 307aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 308aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T impeg2_jobq_deinit(jobq_t *ps_jobq) 309aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 310aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_ret_val; 311aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani IV_API_CALL_STATUS_T e_ret = IV_SUCCESS; 312aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 313aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = impeg2_jobq_reset(ps_jobq); 314aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret != IV_SUCCESS), e_ret); 315aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 316aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani i4_ret_val = ithread_mutex_destroy(ps_jobq->pv_mutex); 317aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(i4_ret_val) 318aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 319aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return IV_FAIL; 320aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 321aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 322aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return IV_SUCCESS; 323aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 324aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 325aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 326aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 327aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 328aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 329aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief 330aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Terminates the jobq 331aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 332aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 333aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Terminates the jobq by setting a flag in context. 334aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 335aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] ps_jobq 336aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue context 337aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 338aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns IMPEG2D_FAIL if lock unlock fails else IV_SUCCESS 339aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 340aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 341aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 342aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 343aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 344aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 345aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T impeg2_jobq_terminate(jobq_t *ps_jobq) 346aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 347aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani IV_API_CALL_STATUS_T e_ret = IV_SUCCESS; 348aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = impeg2_jobq_lock(ps_jobq); 349aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret != IV_SUCCESS), e_ret); 350aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 351aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->i4_terminate = 1; 352aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 353aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = impeg2_jobq_unlock(ps_jobq); 354aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret != IV_SUCCESS), e_ret); 355aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return e_ret; 356aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 357aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 358aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 359aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 360aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 361aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 362aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief Adds a job to the queue 363aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 364aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 365aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Adds a job to the queue and updates wr address to next location. 366aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Format/content of the job structure is abstracted and hence size of the job 367aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* buffer is being passed. 368aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 369aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] ps_jobq 370aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue context 371aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 372aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] pv_job 373aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Pointer to the location that contains details of the job to be added 374aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 375aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] job_size 376aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Size of the job buffer 377aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 378aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] blocking 379aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* To signal if the write is blocking or non-blocking. 380aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 381aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns 382aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 383aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 384aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue buffer is assumed to be allocated to handle worst case number of jobs 385aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Wrap around is not supported 386aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 387aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 388aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 389aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T impeg2_jobq_queue(jobq_t *ps_jobq, 390aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani void *pv_job, 391aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_job_size, 392aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_blocking, 393aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_lock) 394aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 395aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani IV_API_CALL_STATUS_T e_ret = IV_SUCCESS; 396aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani IV_API_CALL_STATUS_T e_ret_tmp; 397aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani UWORD8 *pu1_buf; 398aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani UNUSED(i4_blocking); 399aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 400aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(i4_lock) 401aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 402aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret_tmp = impeg2_jobq_lock(ps_jobq); 403aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret_tmp != IV_SUCCESS), e_ret_tmp); 404aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 405aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani pu1_buf = (UWORD8 *)ps_jobq->pv_buf_wr; 406aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if((UWORD8 *)ps_jobq->pv_buf_end >= (pu1_buf + i4_job_size)) 407aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 408aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani memcpy(ps_jobq->pv_buf_wr, pv_job, i4_job_size); 409aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->pv_buf_wr = (UWORD8 *)ps_jobq->pv_buf_wr + i4_job_size; 410aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = IV_SUCCESS; 411aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 412aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani else 413aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 414aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani /* Handle wrap around case */ 415aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani /* Wait for pv_buf_rd to consume first job_size number of bytes 416aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * from the beginning of job queue 417aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani */ 418aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = IV_FAIL; 419aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 420aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 421aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->i4_terminate = 0; 422aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 423aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(i4_lock) 424aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 425aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret_tmp = impeg2_jobq_unlock(ps_jobq); 426aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret_tmp != IV_SUCCESS), e_ret_tmp); 427aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 428aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 429aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return e_ret; 430aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 431aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/** 432aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 433aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 434aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @brief Gets next from the Job queue 435aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 436aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @par Description 437aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Gets next job from the job queue and updates rd address to next location. 438aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Format/content of the job structure is abstracted and hence size of the job 439aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* buffer is being passed. If it is a blocking call and if there is no new job 440aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* then this functions unlocks the mutext and calls yield and then locks it back. 441aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* and continues till a job is available or terminate is set 442aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 443aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] ps_jobq 444aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue context 445aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 446aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[out] pv_job 447aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Pointer to the location that contains details of the job to be written 448aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 449aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] job_size 450aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Size of the job buffer 451aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 452aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @param[in] blocking 453aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* To signal if the read is blocking or non-blocking. 454aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 455aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @returns 456aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 457aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* @remarks 458aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Job Queue buffer is assumed to be allocated to handle worst case number of jobs 459aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* Wrap around is not supported 460aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani* 461aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************* 462aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/ 463aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIV_API_CALL_STATUS_T impeg2_jobq_dequeue(jobq_t *ps_jobq, 464aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani void *pv_job, 465aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_job_size, 466aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_blocking, 467aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani WORD32 i4_lock) 468aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{ 469aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani IV_API_CALL_STATUS_T e_ret; 470aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani IV_API_CALL_STATUS_T e_ret_tmp; 471aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani volatile UWORD8 *pu1_buf; 472aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(i4_lock) 473aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 474aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret_tmp = impeg2_jobq_lock(ps_jobq); 475aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret_tmp != IV_SUCCESS), e_ret_tmp); 476aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 477aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani pu1_buf = (UWORD8 *)ps_jobq->pv_buf_rd; 478aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 479aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 480aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if((UWORD8 *)ps_jobq->pv_buf_end >= (pu1_buf + i4_job_size)) 481aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 482aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani while(1) 483aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 484aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani pu1_buf = (UWORD8 *)ps_jobq->pv_buf_rd; 485aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if((UWORD8 *)ps_jobq->pv_buf_wr >= (pu1_buf + i4_job_size)) 486aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 487aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani memcpy(pv_job, ps_jobq->pv_buf_rd, i4_job_size); 488aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani ps_jobq->pv_buf_rd = (UWORD8 *)ps_jobq->pv_buf_rd + i4_job_size; 489aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = IV_SUCCESS; 490aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani break; 491aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 492aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani else 493aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 494aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani /* If all the entries have been dequeued, then break and return */ 495aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(1 == ps_jobq->i4_terminate) 496aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 497aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = IV_FAIL; 498aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani break; 499aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 500aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 501aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if((1 == i4_blocking) && (1 == i4_lock)) 502aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 503aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani impeg2_jobq_yield(ps_jobq); 504aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 505aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 506aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani else 507aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 508aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani /* If there is no job available, 509aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * and this is non blocking call then return fail */ 510aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = IV_FAIL; 511aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 512aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 513aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 514aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 515aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani else 516aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 517aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani /* Handle wrap around case */ 518aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani /* Wait for pv_buf_rd to consume first i4_job_size number of bytes 519aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * from the beginning of job queue 520aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani */ 521aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret = IV_FAIL; 522aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 523aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani if(i4_lock) 524aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani { 525aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani e_ret_tmp = impeg2_jobq_unlock(ps_jobq); 526aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani RETURN_IF((e_ret_tmp != IV_SUCCESS), e_ret_tmp); 527aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani } 528aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani 529aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani return e_ret; 530aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani} 531