1*e1eccf28SAndroid Build Coastguard Worker /* 2*e1eccf28SAndroid Build Coastguard Worker * Copyright (C) 2009 The Android Open Source Project 3*e1eccf28SAndroid Build Coastguard Worker * 4*e1eccf28SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*e1eccf28SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*e1eccf28SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*e1eccf28SAndroid Build Coastguard Worker * 8*e1eccf28SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*e1eccf28SAndroid Build Coastguard Worker * 10*e1eccf28SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*e1eccf28SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*e1eccf28SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*e1eccf28SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*e1eccf28SAndroid Build Coastguard Worker * limitations under the License. 15*e1eccf28SAndroid Build Coastguard Worker */ 16*e1eccf28SAndroid Build Coastguard Worker 17*e1eccf28SAndroid Build Coastguard Worker #ifndef ANDROID_RS_THREAD_IO_H 18*e1eccf28SAndroid Build Coastguard Worker #define ANDROID_RS_THREAD_IO_H 19*e1eccf28SAndroid Build Coastguard Worker 20*e1eccf28SAndroid Build Coastguard Worker #include "rsUtils.h" 21*e1eccf28SAndroid Build Coastguard Worker #include "rsFifoSocket.h" 22*e1eccf28SAndroid Build Coastguard Worker 23*e1eccf28SAndroid Build Coastguard Worker // --------------------------------------------------------------------------- 24*e1eccf28SAndroid Build Coastguard Worker namespace android { 25*e1eccf28SAndroid Build Coastguard Worker namespace renderscript { 26*e1eccf28SAndroid Build Coastguard Worker 27*e1eccf28SAndroid Build Coastguard Worker class Context; 28*e1eccf28SAndroid Build Coastguard Worker 29*e1eccf28SAndroid Build Coastguard Worker class ThreadIO { 30*e1eccf28SAndroid Build Coastguard Worker public: 31*e1eccf28SAndroid Build Coastguard Worker ThreadIO(); 32*e1eccf28SAndroid Build Coastguard Worker ~ThreadIO(); 33*e1eccf28SAndroid Build Coastguard Worker 34*e1eccf28SAndroid Build Coastguard Worker bool init(); 35*e1eccf28SAndroid Build Coastguard Worker void shutdown(); 36*e1eccf28SAndroid Build Coastguard Worker getMaxInlineSize()37*e1eccf28SAndroid Build Coastguard Worker size_t getMaxInlineSize() { 38*e1eccf28SAndroid Build Coastguard Worker return mMaxInlineSize; 39*e1eccf28SAndroid Build Coastguard Worker } 40*e1eccf28SAndroid Build Coastguard Worker 41*e1eccf28SAndroid Build Coastguard Worker // Plays back commands from the client. 42*e1eccf28SAndroid Build Coastguard Worker // Returns true if any commands were processed. 43*e1eccf28SAndroid Build Coastguard Worker bool playCoreCommands(Context *con, int waitFd); 44*e1eccf28SAndroid Build Coastguard Worker 45*e1eccf28SAndroid Build Coastguard Worker void setTimeoutCallback(void (*)(void *), void *, uint64_t timeout); 46*e1eccf28SAndroid Build Coastguard Worker 47*e1eccf28SAndroid Build Coastguard Worker void * coreHeader(uint32_t, size_t dataLen); 48*e1eccf28SAndroid Build Coastguard Worker void coreCommit(); 49*e1eccf28SAndroid Build Coastguard Worker 50*e1eccf28SAndroid Build Coastguard Worker void coreSetReturn(const void *data, size_t dataLen); 51*e1eccf28SAndroid Build Coastguard Worker void coreGetReturn(void *data, size_t dataLen); 52*e1eccf28SAndroid Build Coastguard Worker void coreWrite(const void *data, size_t len); 53*e1eccf28SAndroid Build Coastguard Worker void coreRead(void *data, size_t len); 54*e1eccf28SAndroid Build Coastguard Worker 55*e1eccf28SAndroid Build Coastguard Worker void asyncSetReturn(const void *data, size_t dataLen); 56*e1eccf28SAndroid Build Coastguard Worker void asyncGetReturn(void *data, size_t dataLen); 57*e1eccf28SAndroid Build Coastguard Worker void asyncWrite(const void *data, size_t len); 58*e1eccf28SAndroid Build Coastguard Worker void asyncRead(void *data, size_t len); 59*e1eccf28SAndroid Build Coastguard Worker 60*e1eccf28SAndroid Build Coastguard Worker 61*e1eccf28SAndroid Build Coastguard Worker RsMessageToClientType getClientHeader(size_t *receiveLen, uint32_t *usrID); 62*e1eccf28SAndroid Build Coastguard Worker RsMessageToClientType getClientPayload(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen); 63*e1eccf28SAndroid Build Coastguard Worker bool sendToClient(RsMessageToClientType cmdID, uint32_t usrID, const void *data, size_t dataLen, bool waitForSpace); 64*e1eccf28SAndroid Build Coastguard Worker void clientShutdown(); 65*e1eccf28SAndroid Build Coastguard Worker 66*e1eccf28SAndroid Build Coastguard Worker 67*e1eccf28SAndroid Build Coastguard Worker protected: 68*e1eccf28SAndroid Build Coastguard Worker typedef struct CoreCmdHeaderRec { 69*e1eccf28SAndroid Build Coastguard Worker uint32_t cmdID; 70*e1eccf28SAndroid Build Coastguard Worker uint32_t bytes; 71*e1eccf28SAndroid Build Coastguard Worker } CoreCmdHeader; 72*e1eccf28SAndroid Build Coastguard Worker typedef struct ClientCmdHeaderRec { 73*e1eccf28SAndroid Build Coastguard Worker uint32_t cmdID; 74*e1eccf28SAndroid Build Coastguard Worker uint32_t bytes; 75*e1eccf28SAndroid Build Coastguard Worker uint32_t userID; 76*e1eccf28SAndroid Build Coastguard Worker } ClientCmdHeader; 77*e1eccf28SAndroid Build Coastguard Worker ClientCmdHeader mLastClientHeader; 78*e1eccf28SAndroid Build Coastguard Worker 79*e1eccf28SAndroid Build Coastguard Worker bool mRunning; 80*e1eccf28SAndroid Build Coastguard Worker size_t mMaxInlineSize; 81*e1eccf28SAndroid Build Coastguard Worker 82*e1eccf28SAndroid Build Coastguard Worker FifoSocket mToClient; 83*e1eccf28SAndroid Build Coastguard Worker FifoSocket mToCore; 84*e1eccf28SAndroid Build Coastguard Worker 85*e1eccf28SAndroid Build Coastguard Worker intptr_t mToCoreRet; 86*e1eccf28SAndroid Build Coastguard Worker 87*e1eccf28SAndroid Build Coastguard Worker size_t mSendLen; 88*e1eccf28SAndroid Build Coastguard Worker uint8_t mSendBuffer[2 * 1024] __attribute__((aligned(sizeof(double)))); 89*e1eccf28SAndroid Build Coastguard Worker 90*e1eccf28SAndroid Build Coastguard Worker }; 91*e1eccf28SAndroid Build Coastguard Worker 92*e1eccf28SAndroid Build Coastguard Worker 93*e1eccf28SAndroid Build Coastguard Worker } // namespace renderscript 94*e1eccf28SAndroid Build Coastguard Worker } // namespace android 95*e1eccf28SAndroid Build Coastguard Worker #endif 96*e1eccf28SAndroid Build Coastguard Worker 97