1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#ifndef ANDROID_RS_THREAD_IO_H 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define ANDROID_RS_THREAD_IO_H 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 201aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include "rsUtils.h" 211a4efa363916977ef9aeab756725b3bdc880a15bJason Sams#include "rsFifoSocket.h" 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsclass Context; 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsclass ThreadIO { 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ThreadIO(); 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ~ThreadIO(); 33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 345f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams void init(); 358c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams void shutdown(); 368c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams 37bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams size_t getMaxInlineSize() { 38bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams return mMaxInlineSize; 39bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 40bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams bool isPureFifo() { 41bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams return mPureFifo; 42bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 43bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 44a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams // Plays back commands from the client. 45a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams // Returns true if any commands were processed. 46963a2fb9f03c88633bc67c4a1789429b9a482091Jason Sams bool playCoreCommands(Context *con, int waitFd); 47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 485f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams void setTimeoutCallback(void (*)(void *), void *, uint64_t timeout); 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 501a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void * coreHeader(uint32_t, size_t dataLen); 511a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void coreCommit(); 52bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 531a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void coreSetReturn(const void *data, size_t dataLen); 541a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void coreGetReturn(void *data, size_t dataLen); 55bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void coreWrite(const void *data, size_t len); 56bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void coreRead(void *data, size_t len); 57bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 58bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void asyncSetReturn(const void *data, size_t dataLen); 59bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void asyncGetReturn(void *data, size_t dataLen); 60bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void asyncWrite(const void *data, size_t len); 61bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void asyncRead(void *data, size_t len); 621a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 631a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 641a4efa363916977ef9aeab756725b3bdc880a15bJason Sams RsMessageToClientType getClientHeader(size_t *receiveLen, uint32_t *usrID); 651a4efa363916977ef9aeab756725b3bdc880a15bJason Sams RsMessageToClientType getClientPayload(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen); 661a4efa363916977ef9aeab756725b3bdc880a15bJason Sams bool sendToClient(RsMessageToClientType cmdID, uint32_t usrID, const void *data, size_t dataLen, bool waitForSpace); 671a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void clientShutdown(); 681a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 691a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 701a4efa363916977ef9aeab756725b3bdc880a15bJason Samsprotected: 711a4efa363916977ef9aeab756725b3bdc880a15bJason Sams typedef struct CoreCmdHeaderRec { 721a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t cmdID; 731a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t bytes; 741a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } CoreCmdHeader; 751a4efa363916977ef9aeab756725b3bdc880a15bJason Sams typedef struct ClientCmdHeaderRec { 761a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t cmdID; 771a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t bytes; 781a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t userID; 791a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } ClientCmdHeader; 801a4efa363916977ef9aeab756725b3bdc880a15bJason Sams ClientCmdHeader mLastClientHeader; 811a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 825f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams bool mRunning; 83bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams bool mPureFifo; 84bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams size_t mMaxInlineSize; 851a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 865f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams FifoSocket mToClient; 875f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams FifoSocket mToCore; 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams intptr_t mToCoreRet; 901a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 915f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams size_t mSendLen; 92a05e8dd9ab8ad582505389035f14d68e83664438Vladimir Stefanovic uint8_t mSendBuffer[2 * 1024] __attribute__((aligned(sizeof(double)))); 935f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 101