10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2009 The Android Open Source Project 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef ANDROID_RS_THREAD_IO_H 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define ANDROID_RS_THREAD_IO_H 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsUtils.h" 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsFifoSocket.h" 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// --------------------------------------------------------------------------- 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android { 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript { 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Context; 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass ThreadIO { 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinespublic: 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ThreadIO(); 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ~ThreadIO(); 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void init(); 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void shutdown(); 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t getMaxInlineSize() { 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return mMaxInlineSize; 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool isPureFifo() { 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return mPureFifo; 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // Plays back commands from the client. 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // Returns true if any commands were processed. 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool playCoreCommands(Context *con, int waitFd); 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void setTimeoutCallback(void (*)(void *), void *, uint64_t timeout); 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void * coreHeader(uint32_t, size_t dataLen); 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void coreCommit(); 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void coreSetReturn(const void *data, size_t dataLen); 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void coreGetReturn(void *data, size_t dataLen); 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void coreWrite(const void *data, size_t len); 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void coreRead(void *data, size_t len); 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void asyncSetReturn(const void *data, size_t dataLen); 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void asyncGetReturn(void *data, size_t dataLen); 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void asyncWrite(const void *data, size_t len); 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void asyncRead(void *data, size_t len); 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines RsMessageToClientType getClientHeader(size_t *receiveLen, uint32_t *usrID); 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines RsMessageToClientType getClientPayload(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen); 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool sendToClient(RsMessageToClientType cmdID, uint32_t usrID, const void *data, size_t dataLen, bool waitForSpace); 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void clientShutdown(); 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesprotected: 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines typedef struct CoreCmdHeaderRec { 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t cmdID; 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t bytes; 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } CoreCmdHeader; 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines typedef struct ClientCmdHeaderRec { 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t cmdID; 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t bytes; 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t userID; 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } ClientCmdHeader; 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ClientCmdHeader mLastClientHeader; 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool mRunning; 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool mPureFifo; 840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t mMaxInlineSize; 850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines FifoSocket mToClient; 870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines FifoSocket mToCore; 880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines intptr_t mToCoreRet; 900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t mSendLen; 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint8_t mSendBuffer[2 * 1024] __attribute__((aligned(sizeof(double)))); 930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}; 950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif 1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 101