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 41a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams // Plays back commands from the client. 42a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams // Returns true if any commands were processed. 43963a2fb9f03c88633bc67c4a1789429b9a482091Jason Sams bool playCoreCommands(Context *con, int waitFd); 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 455f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams void setTimeoutCallback(void (*)(void *), void *, uint64_t timeout); 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 471a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void * coreHeader(uint32_t, size_t dataLen); 481a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void coreCommit(); 49bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 501a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void coreSetReturn(const void *data, size_t dataLen); 511a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void coreGetReturn(void *data, size_t dataLen); 52bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void coreWrite(const void *data, size_t len); 53bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void coreRead(void *data, size_t len); 54bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 55bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void asyncSetReturn(const void *data, size_t dataLen); 56bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void asyncGetReturn(void *data, size_t dataLen); 57bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void asyncWrite(const void *data, size_t len); 58bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams void asyncRead(void *data, size_t len); 591a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 601a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 611a4efa363916977ef9aeab756725b3bdc880a15bJason Sams RsMessageToClientType getClientHeader(size_t *receiveLen, uint32_t *usrID); 621a4efa363916977ef9aeab756725b3bdc880a15bJason Sams RsMessageToClientType getClientPayload(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen); 631a4efa363916977ef9aeab756725b3bdc880a15bJason Sams bool sendToClient(RsMessageToClientType cmdID, uint32_t usrID, const void *data, size_t dataLen, bool waitForSpace); 641a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void clientShutdown(); 651a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 661a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 671a4efa363916977ef9aeab756725b3bdc880a15bJason Samsprotected: 681a4efa363916977ef9aeab756725b3bdc880a15bJason Sams typedef struct CoreCmdHeaderRec { 691a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t cmdID; 701a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t bytes; 711a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } CoreCmdHeader; 721a4efa363916977ef9aeab756725b3bdc880a15bJason Sams typedef struct ClientCmdHeaderRec { 731a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t cmdID; 741a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t bytes; 751a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t userID; 761a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } ClientCmdHeader; 771a4efa363916977ef9aeab756725b3bdc880a15bJason Sams ClientCmdHeader mLastClientHeader; 781a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 795f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams bool mRunning; 80bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams size_t mMaxInlineSize; 811a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 825f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams FifoSocket mToClient; 835f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams FifoSocket mToCore; 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams intptr_t mToCoreRet; 861a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 875f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams size_t mSendLen; 88a05e8dd9ab8ad582505389035f14d68e83664438Vladimir Stefanovic uint8_t mSendBuffer[2 * 1024] __attribute__((aligned(sizeof(double)))); 895f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 97