gc_hal.h 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859
  1. /****************************************************************************
  2. *
  3. * Copyright (c) 2005 - 2014 by Vivante Corp. All rights reserved.
  4. *
  5. * The material in this file is confidential and contains trade secrets
  6. * of Vivante Corporation. This is proprietary information owned by
  7. * Vivante Corporation. No part of this work may be disclosed,
  8. * reproduced, copied, transmitted, or used in any way for any purpose,
  9. * without the express written permission of Vivante Corporation.
  10. *
  11. *****************************************************************************/
  12. #ifndef __gc_hal_h_
  13. #define __gc_hal_h_
  14. #include "gc_hal_rename.h"
  15. #include "gc_hal_types.h"
  16. #include "gc_hal_enum.h"
  17. #include "gc_hal_base.h"
  18. #include "gc_hal_profiler.h"
  19. #include "gc_hal_driver.h"
  20. #if gcdENABLE_3D
  21. #include "gc_hal_statistics.h"
  22. #endif
  23. #if gcdSECURITY
  24. #include "gc_hal_security_interface.h"
  25. #endif
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. /******************************************************************************\
  30. ******************************* Alignment Macros *******************************
  31. \******************************************************************************/
  32. /* Alignment with a non-power of two value. */
  33. #define gcmALIGN_NP2(n, align) \
  34. ( \
  35. ((n) + (align) - 1) - (((n) + (align) - 1) % (align)) \
  36. )
  37. /* Alignment with a power of two value. */
  38. #define gcmALIGN(n, align) \
  39. ( \
  40. ((n) + ((align) - 1)) & ~((align) - 1) \
  41. )
  42. #define gcmALIGN_BASE(n, align) \
  43. ( \
  44. ((n) & ~((align) - 1)) \
  45. )
  46. /******************************************************************************\
  47. ***************************** Element Count Macro *****************************
  48. \******************************************************************************/
  49. #define gcmSIZEOF(a) \
  50. ( \
  51. (gctSIZE_T) (sizeof(a)) \
  52. )
  53. #define gcmCOUNTOF(a) \
  54. ( \
  55. sizeof(a) / sizeof(a[0]) \
  56. )
  57. /******************************************************************************\
  58. ********************************* Cast Macro **********************************
  59. \******************************************************************************/
  60. #define gcmNAME_TO_PTR(na) \
  61. gckKERNEL_QueryPointerFromName(kernel, gcmALL_TO_UINT32(na))
  62. #define gcmPTR_TO_NAME(ptr) \
  63. gckKERNEL_AllocateNameFromPointer(kernel, ptr)
  64. #define gcmRELEASE_NAME(na) \
  65. gckKERNEL_DeleteName(kernel, gcmALL_TO_UINT32(na))
  66. #define gcmALL_TO_UINT32(t) \
  67. ( \
  68. (gctUINT32) (gctUINTPTR_T) (t)\
  69. )
  70. #define gcmPTR_TO_UINT64(p) \
  71. ( \
  72. (gctUINT64) (gctUINTPTR_T) (p)\
  73. )
  74. #define gcmUINT64_TO_PTR(u) \
  75. ( \
  76. (gctPOINTER) (gctUINTPTR_T) (u)\
  77. )
  78. #define gcmUINT64_TO_TYPE(u, t) \
  79. ( \
  80. (t) (gctUINTPTR_T) (u)\
  81. )
  82. /******************************************************************************\
  83. ******************************** Useful Macro *********************************
  84. \******************************************************************************/
  85. #define gcvINVALID_ADDRESS ~0U
  86. #define gcmGET_PRE_ROTATION(rotate) \
  87. ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
  88. #define gcmGET_POST_ROTATION(rotate) \
  89. ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
  90. /******************************************************************************\
  91. ******************************** gcsOBJECT Object *******************************
  92. \******************************************************************************/
  93. /* Type of objects. */
  94. typedef enum _gceOBJECT_TYPE
  95. {
  96. gcvOBJ_UNKNOWN = 0,
  97. gcvOBJ_2D = gcmCC('2','D',' ',' '),
  98. gcvOBJ_3D = gcmCC('3','D',' ',' '),
  99. gcvOBJ_ATTRIBUTE = gcmCC('A','T','T','R'),
  100. gcvOBJ_BRUSHCACHE = gcmCC('B','R','U','$'),
  101. gcvOBJ_BRUSHNODE = gcmCC('B','R','U','n'),
  102. gcvOBJ_BRUSH = gcmCC('B','R','U','o'),
  103. gcvOBJ_BUFFER = gcmCC('B','U','F','R'),
  104. gcvOBJ_COMMAND = gcmCC('C','M','D',' '),
  105. gcvOBJ_COMMANDBUFFER = gcmCC('C','M','D','B'),
  106. gcvOBJ_CONTEXT = gcmCC('C','T','X','T'),
  107. gcvOBJ_DEVICE = gcmCC('D','E','V',' '),
  108. gcvOBJ_DUMP = gcmCC('D','U','M','P'),
  109. gcvOBJ_EVENT = gcmCC('E','V','N','T'),
  110. gcvOBJ_FUNCTION = gcmCC('F','U','N','C'),
  111. gcvOBJ_HAL = gcmCC('H','A','L',' '),
  112. gcvOBJ_HARDWARE = gcmCC('H','A','R','D'),
  113. gcvOBJ_HEAP = gcmCC('H','E','A','P'),
  114. gcvOBJ_INDEX = gcmCC('I','N','D','X'),
  115. gcvOBJ_INTERRUPT = gcmCC('I','N','T','R'),
  116. gcvOBJ_KERNEL = gcmCC('K','E','R','N'),
  117. gcvOBJ_KERNEL_FUNCTION = gcmCC('K','F','C','N'),
  118. gcvOBJ_MEMORYBUFFER = gcmCC('M','E','M','B'),
  119. gcvOBJ_MMU = gcmCC('M','M','U',' '),
  120. gcvOBJ_OS = gcmCC('O','S',' ',' '),
  121. gcvOBJ_OUTPUT = gcmCC('O','U','T','P'),
  122. gcvOBJ_PAINT = gcmCC('P','N','T',' '),
  123. gcvOBJ_PATH = gcmCC('P','A','T','H'),
  124. gcvOBJ_QUEUE = gcmCC('Q','U','E',' '),
  125. gcvOBJ_SAMPLER = gcmCC('S','A','M','P'),
  126. gcvOBJ_SHADER = gcmCC('S','H','D','R'),
  127. gcvOBJ_STREAM = gcmCC('S','T','R','M'),
  128. gcvOBJ_SURF = gcmCC('S','U','R','F'),
  129. gcvOBJ_TEXTURE = gcmCC('T','X','T','R'),
  130. gcvOBJ_UNIFORM = gcmCC('U','N','I','F'),
  131. gcvOBJ_VARIABLE = gcmCC('V','A','R','I'),
  132. gcvOBJ_VERTEX = gcmCC('V','R','T','X'),
  133. gcvOBJ_VIDMEM = gcmCC('V','M','E','M'),
  134. gcvOBJ_VG = gcmCC('V','G',' ',' '),
  135. gcvOBJ_BUFOBJ = gcmCC('B','U','F','O'),
  136. gcvOBJ_UNIFORM_BLOCK = gcmCC('U','B','L','K'),
  137. gcvOBJ_CL = gcmCC('C','L',' ',' '),
  138. }
  139. gceOBJECT_TYPE;
  140. /* gcsOBJECT object defintinon. */
  141. typedef struct _gcsOBJECT
  142. {
  143. /* Type of an object. */
  144. gceOBJECT_TYPE type;
  145. }
  146. gcsOBJECT;
  147. typedef struct _gckHARDWARE * gckHARDWARE;
  148. /* CORE flags. */
  149. typedef enum _gceCORE
  150. {
  151. gcvCORE_MAJOR = 0x0,
  152. gcvCORE_2D = 0x1,
  153. gcvCORE_VG = 0x2,
  154. #if gcdMULTI_GPU_AFFINITY
  155. gcvCORE_OCL = 0x3,
  156. #endif
  157. }
  158. gceCORE;
  159. #if gcdMULTI_GPU_AFFINITY
  160. #define gcdMAX_GPU_COUNT 4
  161. #else
  162. #define gcdMAX_GPU_COUNT 3
  163. #endif
  164. #define gcdMAX_SURF_LAYERS 4
  165. #define gcdMAX_DRAW_BUFFERS 8
  166. /*******************************************************************************
  167. **
  168. ** gcmVERIFY_OBJECT
  169. **
  170. ** Assert if an object is invalid or is not of the specified type. If the
  171. ** object is invalid or not of the specified type, gcvSTATUS_INVALID_OBJECT
  172. ** will be returned from the current function. In retail mode this macro
  173. ** does nothing.
  174. **
  175. ** ARGUMENTS:
  176. **
  177. ** obj Object to test.
  178. ** t Expected type of the object.
  179. */
  180. #if gcmIS_DEBUG(gcdDEBUG_TRACE)
  181. #define _gcmVERIFY_OBJECT(prefix, obj, t) \
  182. if ((obj) == gcvNULL) \
  183. { \
  184. prefix##TRACE(gcvLEVEL_ERROR, \
  185. #prefix "VERIFY_OBJECT failed: NULL"); \
  186. prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
  187. gcmCC_PRINT(t)); \
  188. prefix##ASSERT((obj) != gcvNULL); \
  189. prefix##FOOTER_ARG("status=%d", gcvSTATUS_INVALID_OBJECT); \
  190. return gcvSTATUS_INVALID_OBJECT; \
  191. } \
  192. else if (((gcsOBJECT*) (obj))->type != t) \
  193. { \
  194. prefix##TRACE(gcvLEVEL_ERROR, \
  195. #prefix "VERIFY_OBJECT failed: %c%c%c%c", \
  196. gcmCC_PRINT(((gcsOBJECT*) (obj))->type)); \
  197. prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
  198. gcmCC_PRINT(t)); \
  199. prefix##ASSERT(((gcsOBJECT*)(obj))->type == t); \
  200. prefix##FOOTER_ARG("status=%d", gcvSTATUS_INVALID_OBJECT); \
  201. return gcvSTATUS_INVALID_OBJECT; \
  202. }
  203. # define gcmVERIFY_OBJECT(obj, t) _gcmVERIFY_OBJECT(gcm, obj, t)
  204. # define gcmkVERIFY_OBJECT(obj, t) _gcmVERIFY_OBJECT(gcmk, obj, t)
  205. #else
  206. # define gcmVERIFY_OBJECT(obj, t) do {} while (gcvFALSE)
  207. # define gcmkVERIFY_OBJECT(obj, t) do {} while (gcvFALSE)
  208. #endif
  209. /******************************************************************************/
  210. /*VERIFY_OBJECT if special return expected*/
  211. /******************************************************************************/
  212. #ifndef EGL_API_ANDROID
  213. # define _gcmVERIFY_OBJECT_RETURN(prefix, obj, t, retVal) \
  214. do \
  215. { \
  216. if ((obj) == gcvNULL) \
  217. { \
  218. prefix##PRINT_VERSION(); \
  219. prefix##TRACE(gcvLEVEL_ERROR, \
  220. #prefix "VERIFY_OBJECT_RETURN failed: NULL"); \
  221. prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
  222. gcmCC_PRINT(t)); \
  223. prefix##ASSERT((obj) != gcvNULL); \
  224. prefix##FOOTER_ARG("retVal=%d", retVal); \
  225. return retVal; \
  226. } \
  227. else if (((gcsOBJECT*) (obj))->type != t) \
  228. { \
  229. prefix##PRINT_VERSION(); \
  230. prefix##TRACE(gcvLEVEL_ERROR, \
  231. #prefix "VERIFY_OBJECT_RETURN failed: %c%c%c%c", \
  232. gcmCC_PRINT(((gcsOBJECT*) (obj))->type)); \
  233. prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
  234. gcmCC_PRINT(t)); \
  235. prefix##ASSERT(((gcsOBJECT*)(obj))->type == t); \
  236. prefix##FOOTER_ARG("retVal=%d", retVal); \
  237. return retVal; \
  238. } \
  239. } \
  240. while (gcvFALSE)
  241. # define gcmVERIFY_OBJECT_RETURN(obj, t, retVal) \
  242. _gcmVERIFY_OBJECT_RETURN(gcm, obj, t, retVal)
  243. # define gcmkVERIFY_OBJECT_RETURN(obj, t, retVal) \
  244. _gcmVERIFY_OBJECT_RETURN(gcmk, obj, t, retVal)
  245. #else
  246. # define gcmVERIFY_OBJECT_RETURN(obj, t) do {} while (gcvFALSE)
  247. # define gcmVERIFY_OBJECT_RETURN(obj, t) do {} while (gcvFALSE)
  248. #endif
  249. /******************************************************************************\
  250. ********************************** gckOS Object *********************************
  251. \******************************************************************************/
  252. /* Construct a new gckOS object. */
  253. gceSTATUS
  254. gckOS_Construct(
  255. IN gctPOINTER Context,
  256. OUT gckOS * Os
  257. );
  258. /* Destroy an gckOS object. */
  259. gceSTATUS
  260. gckOS_Destroy(
  261. IN gckOS Os
  262. );
  263. /* Query the video memory. */
  264. gceSTATUS
  265. gckOS_QueryVideoMemory(
  266. IN gckOS Os,
  267. OUT gctPHYS_ADDR * InternalAddress,
  268. OUT gctSIZE_T * InternalSize,
  269. OUT gctPHYS_ADDR * ExternalAddress,
  270. OUT gctSIZE_T * ExternalSize,
  271. OUT gctPHYS_ADDR * ContiguousAddress,
  272. OUT gctSIZE_T * ContiguousSize
  273. );
  274. /* Allocate memory from the heap. */
  275. gceSTATUS
  276. gckOS_Allocate(
  277. IN gckOS Os,
  278. IN gctSIZE_T Bytes,
  279. OUT gctPOINTER * Memory
  280. );
  281. /* Free allocated memory. */
  282. gceSTATUS
  283. gckOS_Free(
  284. IN gckOS Os,
  285. IN gctPOINTER Memory
  286. );
  287. /* Wrapper for allocation memory.. */
  288. gceSTATUS
  289. gckOS_AllocateMemory(
  290. IN gckOS Os,
  291. IN gctSIZE_T Bytes,
  292. OUT gctPOINTER * Memory
  293. );
  294. /* Wrapper for freeing memory. */
  295. gceSTATUS
  296. gckOS_FreeMemory(
  297. IN gckOS Os,
  298. IN gctPOINTER Memory
  299. );
  300. /* Allocate paged memory. */
  301. gceSTATUS
  302. gckOS_AllocatePagedMemory(
  303. IN gckOS Os,
  304. IN gctSIZE_T Bytes,
  305. OUT gctPHYS_ADDR * Physical
  306. );
  307. /* Allocate paged memory. */
  308. gceSTATUS
  309. gckOS_AllocatePagedMemoryEx(
  310. IN gckOS Os,
  311. IN gctUINT32 Flag,
  312. IN gctSIZE_T Bytes,
  313. OUT gctUINT32 * Gid,
  314. OUT gctPHYS_ADDR * Physical
  315. );
  316. /* Lock pages. */
  317. gceSTATUS
  318. gckOS_LockPages(
  319. IN gckOS Os,
  320. IN gctPHYS_ADDR Physical,
  321. IN gctSIZE_T Bytes,
  322. IN gctBOOL Cacheable,
  323. OUT gctPOINTER * Logical,
  324. OUT gctSIZE_T * PageCount
  325. );
  326. /* Map pages. */
  327. gceSTATUS
  328. gckOS_MapPages(
  329. IN gckOS Os,
  330. IN gctPHYS_ADDR Physical,
  331. IN gctSIZE_T PageCount,
  332. IN gctPOINTER PageTable
  333. );
  334. /* Map pages. */
  335. gceSTATUS
  336. gckOS_MapPagesEx(
  337. IN gckOS Os,
  338. IN gceCORE Core,
  339. IN gctPHYS_ADDR Physical,
  340. IN gctSIZE_T PageCount,
  341. IN gctUINT32 Address,
  342. IN gctPOINTER PageTable
  343. );
  344. gceSTATUS
  345. gckOS_UnmapPages(
  346. IN gckOS Os,
  347. IN gctSIZE_T PageCount,
  348. IN gctUINT32 Address
  349. );
  350. /* Unlock pages. */
  351. gceSTATUS
  352. gckOS_UnlockPages(
  353. IN gckOS Os,
  354. IN gctPHYS_ADDR Physical,
  355. IN gctSIZE_T Bytes,
  356. IN gctPOINTER Logical
  357. );
  358. /* Free paged memory. */
  359. gceSTATUS
  360. gckOS_FreePagedMemory(
  361. IN gckOS Os,
  362. IN gctPHYS_ADDR Physical,
  363. IN gctSIZE_T Bytes
  364. );
  365. /* Allocate non-paged memory. */
  366. gceSTATUS
  367. gckOS_AllocateNonPagedMemory(
  368. IN gckOS Os,
  369. IN gctBOOL InUserSpace,
  370. IN OUT gctSIZE_T * Bytes,
  371. OUT gctPHYS_ADDR * Physical,
  372. OUT gctPOINTER * Logical
  373. );
  374. /* Free non-paged memory. */
  375. gceSTATUS
  376. gckOS_FreeNonPagedMemory(
  377. IN gckOS Os,
  378. IN gctSIZE_T Bytes,
  379. IN gctPHYS_ADDR Physical,
  380. IN gctPOINTER Logical
  381. );
  382. /* Allocate contiguous memory. */
  383. gceSTATUS
  384. gckOS_AllocateContiguous(
  385. IN gckOS Os,
  386. IN gctBOOL InUserSpace,
  387. IN OUT gctSIZE_T * Bytes,
  388. OUT gctPHYS_ADDR * Physical,
  389. OUT gctPOINTER * Logical
  390. );
  391. /* Free contiguous memory. */
  392. gceSTATUS
  393. gckOS_FreeContiguous(
  394. IN gckOS Os,
  395. IN gctPHYS_ADDR Physical,
  396. IN gctPOINTER Logical,
  397. IN gctSIZE_T Bytes
  398. );
  399. /* Get the number fo bytes per page. */
  400. gceSTATUS
  401. gckOS_GetPageSize(
  402. IN gckOS Os,
  403. OUT gctSIZE_T * PageSize
  404. );
  405. /* Get the physical address of a corresponding logical address. */
  406. gceSTATUS
  407. gckOS_GetPhysicalAddress(
  408. IN gckOS Os,
  409. IN gctPOINTER Logical,
  410. OUT gctUINT32 * Address
  411. );
  412. /* Get the physical address of a corresponding user logical address. */
  413. gceSTATUS
  414. gckOS_UserLogicalToPhysical(
  415. IN gckOS Os,
  416. IN gctPOINTER Logical,
  417. OUT gctUINT32 * Address
  418. );
  419. /* Get the physical address of a corresponding logical address. */
  420. gceSTATUS
  421. gckOS_GetPhysicalAddressProcess(
  422. IN gckOS Os,
  423. IN gctPOINTER Logical,
  424. IN gctUINT32 ProcessID,
  425. OUT gctUINT32 * Address
  426. );
  427. /* Map physical memory. */
  428. gceSTATUS
  429. gckOS_MapPhysical(
  430. IN gckOS Os,
  431. IN gctUINT32 Physical,
  432. IN gctSIZE_T Bytes,
  433. OUT gctPOINTER * Logical
  434. );
  435. /* Unmap previously mapped physical memory. */
  436. gceSTATUS
  437. gckOS_UnmapPhysical(
  438. IN gckOS Os,
  439. IN gctPOINTER Logical,
  440. IN gctSIZE_T Bytes
  441. );
  442. /* Get real physical address from descriptor. */
  443. gceSTATUS
  444. gckOS_PhysicalToPhysicalAddress(
  445. IN gckOS Os,
  446. IN gctPOINTER Physical,
  447. OUT gctUINT32 * PhysicalAddress
  448. );
  449. /* Read data from a hardware register. */
  450. gceSTATUS
  451. gckOS_ReadRegister(
  452. IN gckOS Os,
  453. IN gctUINT32 Address,
  454. OUT gctUINT32 * Data
  455. );
  456. /* Read data from a hardware register. */
  457. gceSTATUS
  458. gckOS_ReadRegisterEx(
  459. IN gckOS Os,
  460. IN gceCORE Core,
  461. IN gctUINT32 Address,
  462. OUT gctUINT32 * Data
  463. );
  464. /* Write data to a hardware register. */
  465. gceSTATUS
  466. gckOS_WriteRegister(
  467. IN gckOS Os,
  468. IN gctUINT32 Address,
  469. IN gctUINT32 Data
  470. );
  471. /* Write data to a hardware register. */
  472. gceSTATUS
  473. gckOS_WriteRegisterEx(
  474. IN gckOS Os,
  475. IN gceCORE Core,
  476. IN gctUINT32 Address,
  477. IN gctUINT32 Data
  478. );
  479. #if gcdMULTI_GPU
  480. gceSTATUS
  481. gckOS_ReadRegisterByCoreId(
  482. IN gckOS Os,
  483. IN gceCORE Core,
  484. IN gctUINT32 CoreId,
  485. IN gctUINT32 Address,
  486. OUT gctUINT32 * Data
  487. );
  488. gceSTATUS
  489. gckOS_WriteRegisterByCoreId(
  490. IN gckOS Os,
  491. IN gceCORE Core,
  492. IN gctUINT32 CoreId,
  493. IN gctUINT32 Address,
  494. IN gctUINT32 Data
  495. );
  496. #endif
  497. /* Write data to a 32-bit memory location. */
  498. gceSTATUS
  499. gckOS_WriteMemory(
  500. IN gckOS Os,
  501. IN gctPOINTER Address,
  502. IN gctUINT32 Data
  503. );
  504. /* Map physical memory into the process space. */
  505. gceSTATUS
  506. gckOS_MapMemory(
  507. IN gckOS Os,
  508. IN gctPHYS_ADDR Physical,
  509. IN gctSIZE_T Bytes,
  510. OUT gctPOINTER * Logical
  511. );
  512. /* Unmap physical memory from the specified process space. */
  513. gceSTATUS
  514. gckOS_UnmapMemoryEx(
  515. IN gckOS Os,
  516. IN gctPHYS_ADDR Physical,
  517. IN gctSIZE_T Bytes,
  518. IN gctPOINTER Logical,
  519. IN gctUINT32 PID
  520. );
  521. /* Unmap physical memory from the process space. */
  522. gceSTATUS
  523. gckOS_UnmapMemory(
  524. IN gckOS Os,
  525. IN gctPHYS_ADDR Physical,
  526. IN gctSIZE_T Bytes,
  527. IN gctPOINTER Logical
  528. );
  529. /* Unmap user logical memory out of physical memory.
  530. * This function is only supported in Linux currently.
  531. */
  532. gceSTATUS
  533. gckOS_UnmapUserLogical(
  534. IN gckOS Os,
  535. IN gctPHYS_ADDR Physical,
  536. IN gctSIZE_T Bytes,
  537. IN gctPOINTER Logical
  538. );
  539. /* Create a new mutex. */
  540. gceSTATUS
  541. gckOS_CreateMutex(
  542. IN gckOS Os,
  543. OUT gctPOINTER * Mutex
  544. );
  545. /* Delete a mutex. */
  546. gceSTATUS
  547. gckOS_DeleteMutex(
  548. IN gckOS Os,
  549. IN gctPOINTER Mutex
  550. );
  551. /* Acquire a mutex. */
  552. gceSTATUS
  553. gckOS_AcquireMutex(
  554. IN gckOS Os,
  555. IN gctPOINTER Mutex,
  556. IN gctUINT32 Timeout
  557. );
  558. /* Release a mutex. */
  559. gceSTATUS
  560. gckOS_ReleaseMutex(
  561. IN gckOS Os,
  562. IN gctPOINTER Mutex
  563. );
  564. /* Atomically exchange a pair of 32-bit values. */
  565. gceSTATUS
  566. gckOS_AtomicExchange(
  567. IN gckOS Os,
  568. IN OUT gctUINT32_PTR Target,
  569. IN gctUINT32 NewValue,
  570. OUT gctUINT32_PTR OldValue
  571. );
  572. /* Atomically exchange a pair of pointers. */
  573. gceSTATUS
  574. gckOS_AtomicExchangePtr(
  575. IN gckOS Os,
  576. IN OUT gctPOINTER * Target,
  577. IN gctPOINTER NewValue,
  578. OUT gctPOINTER * OldValue
  579. );
  580. gceSTATUS
  581. gckOS_AtomSetMask(
  582. IN gctPOINTER Atom,
  583. IN gctUINT32 Mask
  584. );
  585. gceSTATUS
  586. gckOS_AtomClearMask(
  587. IN gctPOINTER Atom,
  588. IN gctUINT32 Mask
  589. );
  590. gceSTATUS
  591. gckOS_DumpCallStack(
  592. IN gckOS Os
  593. );
  594. gceSTATUS
  595. gckOS_GetProcessNameByPid(
  596. IN gctINT Pid,
  597. IN gctSIZE_T Length,
  598. OUT gctUINT8_PTR String
  599. );
  600. /*******************************************************************************
  601. **
  602. ** gckOS_AtomConstruct
  603. **
  604. ** Create an atom.
  605. **
  606. ** INPUT:
  607. **
  608. ** gckOS Os
  609. ** Pointer to a gckOS object.
  610. **
  611. ** OUTPUT:
  612. **
  613. ** gctPOINTER * Atom
  614. ** Pointer to a variable receiving the constructed atom.
  615. */
  616. gceSTATUS
  617. gckOS_AtomConstruct(
  618. IN gckOS Os,
  619. OUT gctPOINTER * Atom
  620. );
  621. /*******************************************************************************
  622. **
  623. ** gckOS_AtomDestroy
  624. **
  625. ** Destroy an atom.
  626. **
  627. ** INPUT:
  628. **
  629. ** gckOS Os
  630. ** Pointer to a gckOS object.
  631. **
  632. ** gctPOINTER Atom
  633. ** Pointer to the atom to destroy.
  634. **
  635. ** OUTPUT:
  636. **
  637. ** Nothing.
  638. */
  639. gceSTATUS
  640. gckOS_AtomDestroy(
  641. IN gckOS Os,
  642. OUT gctPOINTER Atom
  643. );
  644. /*******************************************************************************
  645. **
  646. ** gckOS_AtomGet
  647. **
  648. ** Get the 32-bit value protected by an atom.
  649. **
  650. ** INPUT:
  651. **
  652. ** gckOS Os
  653. ** Pointer to a gckOS object.
  654. **
  655. ** gctPOINTER Atom
  656. ** Pointer to the atom.
  657. **
  658. ** OUTPUT:
  659. **
  660. ** gctINT32_PTR Value
  661. ** Pointer to a variable the receives the value of the atom.
  662. */
  663. gceSTATUS
  664. gckOS_AtomGet(
  665. IN gckOS Os,
  666. IN gctPOINTER Atom,
  667. OUT gctINT32_PTR Value
  668. );
  669. /*******************************************************************************
  670. **
  671. ** gckOS_AtomSet
  672. **
  673. ** Set the 32-bit value protected by an atom.
  674. **
  675. ** INPUT:
  676. **
  677. ** gckOS Os
  678. ** Pointer to a gckOS object.
  679. **
  680. ** gctPOINTER Atom
  681. ** Pointer to the atom.
  682. **
  683. ** gctINT32 Value
  684. ** The value of the atom.
  685. **
  686. ** OUTPUT:
  687. **
  688. ** Nothing.
  689. */
  690. gceSTATUS
  691. gckOS_AtomSet(
  692. IN gckOS Os,
  693. IN gctPOINTER Atom,
  694. IN gctINT32 Value
  695. );
  696. /*******************************************************************************
  697. **
  698. ** gckOS_AtomIncrement
  699. **
  700. ** Atomically increment the 32-bit integer value inside an atom.
  701. **
  702. ** INPUT:
  703. **
  704. ** gckOS Os
  705. ** Pointer to a gckOS object.
  706. **
  707. ** gctPOINTER Atom
  708. ** Pointer to the atom.
  709. **
  710. ** OUTPUT:
  711. **
  712. ** gctINT32_PTR Value
  713. ** Pointer to a variable the receives the original value of the atom.
  714. */
  715. gceSTATUS
  716. gckOS_AtomIncrement(
  717. IN gckOS Os,
  718. IN gctPOINTER Atom,
  719. OUT gctINT32_PTR Value
  720. );
  721. /*******************************************************************************
  722. **
  723. ** gckOS_AtomDecrement
  724. **
  725. ** Atomically decrement the 32-bit integer value inside an atom.
  726. **
  727. ** INPUT:
  728. **
  729. ** gckOS Os
  730. ** Pointer to a gckOS object.
  731. **
  732. ** gctPOINTER Atom
  733. ** Pointer to the atom.
  734. **
  735. ** OUTPUT:
  736. **
  737. ** gctINT32_PTR Value
  738. ** Pointer to a variable the receives the original value of the atom.
  739. */
  740. gceSTATUS
  741. gckOS_AtomDecrement(
  742. IN gckOS Os,
  743. IN gctPOINTER Atom,
  744. OUT gctINT32_PTR Value
  745. );
  746. /* Delay a number of microseconds. */
  747. gceSTATUS
  748. gckOS_Delay(
  749. IN gckOS Os,
  750. IN gctUINT32 Delay
  751. );
  752. /* Get time in milliseconds. */
  753. gceSTATUS
  754. gckOS_GetTicks(
  755. OUT gctUINT32_PTR Time
  756. );
  757. /* Compare time value. */
  758. gceSTATUS
  759. gckOS_TicksAfter(
  760. IN gctUINT32 Time1,
  761. IN gctUINT32 Time2,
  762. OUT gctBOOL_PTR IsAfter
  763. );
  764. /* Get time in microseconds. */
  765. gceSTATUS
  766. gckOS_GetTime(
  767. OUT gctUINT64_PTR Time
  768. );
  769. /* Memory barrier. */
  770. gceSTATUS
  771. gckOS_MemoryBarrier(
  772. IN gckOS Os,
  773. IN gctPOINTER Address
  774. );
  775. /* Map user pointer. */
  776. gceSTATUS
  777. gckOS_MapUserPointer(
  778. IN gckOS Os,
  779. IN gctPOINTER Pointer,
  780. IN gctSIZE_T Size,
  781. OUT gctPOINTER * KernelPointer
  782. );
  783. /* Unmap user pointer. */
  784. gceSTATUS
  785. gckOS_UnmapUserPointer(
  786. IN gckOS Os,
  787. IN gctPOINTER Pointer,
  788. IN gctSIZE_T Size,
  789. IN gctPOINTER KernelPointer
  790. );
  791. /*******************************************************************************
  792. **
  793. ** gckOS_QueryNeedCopy
  794. **
  795. ** Query whether the memory can be accessed or mapped directly or it has to be
  796. ** copied.
  797. **
  798. ** INPUT:
  799. **
  800. ** gckOS Os
  801. ** Pointer to an gckOS object.
  802. **
  803. ** gctUINT32 ProcessID
  804. ** Process ID of the current process.
  805. **
  806. ** OUTPUT:
  807. **
  808. ** gctBOOL_PTR NeedCopy
  809. ** Pointer to a boolean receiving gcvTRUE if the memory needs a copy or
  810. ** gcvFALSE if the memory can be accessed or mapped dircetly.
  811. */
  812. gceSTATUS
  813. gckOS_QueryNeedCopy(
  814. IN gckOS Os,
  815. IN gctUINT32 ProcessID,
  816. OUT gctBOOL_PTR NeedCopy
  817. );
  818. /*******************************************************************************
  819. **
  820. ** gckOS_CopyFromUserData
  821. **
  822. ** Copy data from user to kernel memory.
  823. **
  824. ** INPUT:
  825. **
  826. ** gckOS Os
  827. ** Pointer to an gckOS object.
  828. **
  829. ** gctPOINTER KernelPointer
  830. ** Pointer to kernel memory.
  831. **
  832. ** gctPOINTER Pointer
  833. ** Pointer to user memory.
  834. **
  835. ** gctSIZE_T Size
  836. ** Number of bytes to copy.
  837. **
  838. ** OUTPUT:
  839. **
  840. ** Nothing.
  841. */
  842. gceSTATUS
  843. gckOS_CopyFromUserData(
  844. IN gckOS Os,
  845. IN gctPOINTER KernelPointer,
  846. IN gctPOINTER Pointer,
  847. IN gctSIZE_T Size
  848. );
  849. /*******************************************************************************
  850. **
  851. ** gckOS_CopyToUserData
  852. **
  853. ** Copy data from kernel to user memory.
  854. **
  855. ** INPUT:
  856. **
  857. ** gckOS Os
  858. ** Pointer to an gckOS object.
  859. **
  860. ** gctPOINTER KernelPointer
  861. ** Pointer to kernel memory.
  862. **
  863. ** gctPOINTER Pointer
  864. ** Pointer to user memory.
  865. **
  866. ** gctSIZE_T Size
  867. ** Number of bytes to copy.
  868. **
  869. ** OUTPUT:
  870. **
  871. ** Nothing.
  872. */
  873. gceSTATUS
  874. gckOS_CopyToUserData(
  875. IN gckOS Os,
  876. IN gctPOINTER KernelPointer,
  877. IN gctPOINTER Pointer,
  878. IN gctSIZE_T Size
  879. );
  880. gceSTATUS
  881. gckOS_SuspendInterrupt(
  882. IN gckOS Os
  883. );
  884. gceSTATUS
  885. gckOS_SuspendInterruptEx(
  886. IN gckOS Os,
  887. IN gceCORE Core
  888. );
  889. gceSTATUS
  890. gckOS_ResumeInterrupt(
  891. IN gckOS Os
  892. );
  893. gceSTATUS
  894. gckOS_ResumeInterruptEx(
  895. IN gckOS Os,
  896. IN gceCORE Core
  897. );
  898. /* Get the base address for the physical memory. */
  899. gceSTATUS
  900. gckOS_GetBaseAddress(
  901. IN gckOS Os,
  902. OUT gctUINT32_PTR BaseAddress
  903. );
  904. /* Perform a memory copy. */
  905. gceSTATUS
  906. gckOS_MemCopy(
  907. IN gctPOINTER Destination,
  908. IN gctCONST_POINTER Source,
  909. IN gctSIZE_T Bytes
  910. );
  911. /* Zero memory. */
  912. gceSTATUS
  913. gckOS_ZeroMemory(
  914. IN gctPOINTER Memory,
  915. IN gctSIZE_T Bytes
  916. );
  917. /* Device I/O control to the kernel HAL layer. */
  918. gceSTATUS
  919. gckOS_DeviceControl(
  920. IN gckOS Os,
  921. IN gctBOOL FromUser,
  922. IN gctUINT32 IoControlCode,
  923. IN gctPOINTER InputBuffer,
  924. IN gctSIZE_T InputBufferSize,
  925. OUT gctPOINTER OutputBuffer,
  926. IN gctSIZE_T OutputBufferSize
  927. );
  928. /*******************************************************************************
  929. **
  930. ** gckOS_GetProcessID
  931. **
  932. ** Get current process ID.
  933. **
  934. ** INPUT:
  935. **
  936. ** Nothing.
  937. **
  938. ** OUTPUT:
  939. **
  940. ** gctUINT32_PTR ProcessID
  941. ** Pointer to the variable that receives the process ID.
  942. */
  943. gceSTATUS
  944. gckOS_GetProcessID(
  945. OUT gctUINT32_PTR ProcessID
  946. );
  947. gceSTATUS
  948. gckOS_GetCurrentProcessID(
  949. OUT gctUINT32_PTR ProcessID
  950. );
  951. /*******************************************************************************
  952. **
  953. ** gckOS_GetThreadID
  954. **
  955. ** Get current thread ID.
  956. **
  957. ** INPUT:
  958. **
  959. ** Nothing.
  960. **
  961. ** OUTPUT:
  962. **
  963. ** gctUINT32_PTR ThreadID
  964. ** Pointer to the variable that receives the thread ID.
  965. */
  966. gceSTATUS
  967. gckOS_GetThreadID(
  968. OUT gctUINT32_PTR ThreadID
  969. );
  970. #if gcdSECURITY
  971. gceSTATUS
  972. gckOS_OpenSecurityChannel(
  973. IN gckOS Os,
  974. IN gceCORE Core,
  975. OUT gctUINT32 *Channel
  976. );
  977. gceSTATUS
  978. gckOS_CloseSecurityChannel(
  979. IN gctUINT32 Channel
  980. );
  981. gceSTATUS
  982. gckOS_CallSecurityService(
  983. IN gctUINT32 Channel,
  984. IN gcsTA_INTERFACE * Interface
  985. );
  986. gceSTATUS
  987. gckOS_InitSecurityChannel(
  988. OUT gctUINT32 Channel
  989. );
  990. gceSTATUS
  991. gckOS_AllocatePageArray(
  992. IN gckOS Os,
  993. IN gctPHYS_ADDR Physical,
  994. IN gctSIZE_T PageCount,
  995. OUT gctPOINTER * PageArrayLogical,
  996. OUT gctPHYS_ADDR * PageArrayPhysical
  997. );
  998. #endif
  999. /******************************************************************************\
  1000. ********************************** Signal Object *********************************
  1001. \******************************************************************************/
  1002. /* Create a signal. */
  1003. gceSTATUS
  1004. gckOS_CreateSignal(
  1005. IN gckOS Os,
  1006. IN gctBOOL ManualReset,
  1007. OUT gctSIGNAL * Signal
  1008. );
  1009. /* Destroy a signal. */
  1010. gceSTATUS
  1011. gckOS_DestroySignal(
  1012. IN gckOS Os,
  1013. IN gctSIGNAL Signal
  1014. );
  1015. /* Signal a signal. */
  1016. gceSTATUS
  1017. gckOS_Signal(
  1018. IN gckOS Os,
  1019. IN gctSIGNAL Signal,
  1020. IN gctBOOL State
  1021. );
  1022. /* Wait for a signal. */
  1023. gceSTATUS
  1024. gckOS_WaitSignal(
  1025. IN gckOS Os,
  1026. IN gctSIGNAL Signal,
  1027. IN gctUINT32 Wait
  1028. );
  1029. #ifdef __QNXNTO__
  1030. gceSTATUS
  1031. gckOS_SignalPulse(
  1032. IN gckOS Os,
  1033. IN gctSIGNAL Signal
  1034. );
  1035. gceSTATUS
  1036. gckOS_SignalPending(
  1037. IN gckOS Os,
  1038. IN gctSIGNAL Signal
  1039. );
  1040. #endif
  1041. /* Map a user signal to the kernel space. */
  1042. gceSTATUS
  1043. gckOS_MapSignal(
  1044. IN gckOS Os,
  1045. IN gctSIGNAL Signal,
  1046. IN gctHANDLE Process,
  1047. OUT gctSIGNAL * MappedSignal
  1048. );
  1049. /* Unmap a user signal */
  1050. gceSTATUS
  1051. gckOS_UnmapSignal(
  1052. IN gckOS Os,
  1053. IN gctSIGNAL Signal
  1054. );
  1055. /* Map user memory. */
  1056. gceSTATUS
  1057. gckOS_MapUserMemory(
  1058. IN gckOS Os,
  1059. IN gceCORE Core,
  1060. IN gctPOINTER Memory,
  1061. IN gctUINT32 Physical,
  1062. IN gctSIZE_T Size,
  1063. OUT gctPOINTER * Info,
  1064. OUT gctUINT32_PTR Address
  1065. );
  1066. /* Unmap user memory. */
  1067. gceSTATUS
  1068. gckOS_UnmapUserMemory(
  1069. IN gckOS Os,
  1070. IN gceCORE Core,
  1071. IN gctPOINTER Memory,
  1072. IN gctSIZE_T Size,
  1073. IN gctPOINTER Info,
  1074. IN gctUINT32 Address
  1075. );
  1076. /******************************************************************************\
  1077. ************************** Android Native Fence Sync ***************************
  1078. \******************************************************************************/
  1079. gceSTATUS
  1080. gckOS_CreateSyncTimeline(
  1081. IN gckOS Os,
  1082. OUT gctHANDLE * Timeline
  1083. );
  1084. gceSTATUS
  1085. gckOS_DestroySyncTimeline(
  1086. IN gckOS Os,
  1087. IN gctHANDLE Timeline
  1088. );
  1089. gceSTATUS
  1090. gckOS_CreateSyncPoint(
  1091. IN gckOS Os,
  1092. OUT gctSYNC_POINT * SyncPoint
  1093. );
  1094. gceSTATUS
  1095. gckOS_ReferenceSyncPoint(
  1096. IN gckOS Os,
  1097. IN gctSYNC_POINT SyncPoint
  1098. );
  1099. gceSTATUS
  1100. gckOS_DestroySyncPoint(
  1101. IN gckOS Os,
  1102. IN gctSYNC_POINT SyncPoint
  1103. );
  1104. gceSTATUS
  1105. gckOS_SignalSyncPoint(
  1106. IN gckOS Os,
  1107. IN gctSYNC_POINT SyncPoint
  1108. );
  1109. gceSTATUS
  1110. gckOS_QuerySyncPoint(
  1111. IN gckOS Os,
  1112. IN gctSYNC_POINT SyncPoint,
  1113. OUT gctBOOL_PTR State
  1114. );
  1115. gceSTATUS
  1116. gckOS_CreateNativeFence(
  1117. IN gckOS Os,
  1118. IN gctHANDLE Timeline,
  1119. IN gctSYNC_POINT SyncPoint,
  1120. OUT gctINT * FenceFD
  1121. );
  1122. #if !USE_NEW_LINUX_SIGNAL
  1123. /* Create signal to be used in the user space. */
  1124. gceSTATUS
  1125. gckOS_CreateUserSignal(
  1126. IN gckOS Os,
  1127. IN gctBOOL ManualReset,
  1128. OUT gctINT * SignalID
  1129. );
  1130. /* Destroy signal used in the user space. */
  1131. gceSTATUS
  1132. gckOS_DestroyUserSignal(
  1133. IN gckOS Os,
  1134. IN gctINT SignalID
  1135. );
  1136. /* Wait for signal used in the user space. */
  1137. gceSTATUS
  1138. gckOS_WaitUserSignal(
  1139. IN gckOS Os,
  1140. IN gctINT SignalID,
  1141. IN gctUINT32 Wait
  1142. );
  1143. /* Signal a signal used in the user space. */
  1144. gceSTATUS
  1145. gckOS_SignalUserSignal(
  1146. IN gckOS Os,
  1147. IN gctINT SignalID,
  1148. IN gctBOOL State
  1149. );
  1150. #endif /* USE_NEW_LINUX_SIGNAL */
  1151. /* Set a signal owned by a process. */
  1152. #if defined(__QNXNTO__)
  1153. gceSTATUS
  1154. gckOS_UserSignal(
  1155. IN gckOS Os,
  1156. IN gctSIGNAL Signal,
  1157. IN gctINT Recvid,
  1158. IN gctINT Coid
  1159. );
  1160. #else
  1161. gceSTATUS
  1162. gckOS_UserSignal(
  1163. IN gckOS Os,
  1164. IN gctSIGNAL Signal,
  1165. IN gctHANDLE Process
  1166. );
  1167. #endif
  1168. /******************************************************************************\
  1169. ** Cache Support
  1170. */
  1171. gceSTATUS
  1172. gckOS_CacheClean(
  1173. gckOS Os,
  1174. gctUINT32 ProcessID,
  1175. gctPHYS_ADDR Handle,
  1176. gctUINT32 Physical,
  1177. gctPOINTER Logical,
  1178. gctSIZE_T Bytes
  1179. );
  1180. gceSTATUS
  1181. gckOS_CacheFlush(
  1182. gckOS Os,
  1183. gctUINT32 ProcessID,
  1184. gctPHYS_ADDR Handle,
  1185. gctUINT32 Physical,
  1186. gctPOINTER Logical,
  1187. gctSIZE_T Bytes
  1188. );
  1189. gceSTATUS
  1190. gckOS_CacheInvalidate(
  1191. gckOS Os,
  1192. gctUINT32 ProcessID,
  1193. gctPHYS_ADDR Handle,
  1194. gctUINT32 Physical,
  1195. gctPOINTER Logical,
  1196. gctSIZE_T Bytes
  1197. );
  1198. gceSTATUS
  1199. gckOS_CPUPhysicalToGPUPhysical(
  1200. IN gckOS Os,
  1201. IN gctUINT32 CPUPhysical,
  1202. IN gctUINT32_PTR GPUPhysical
  1203. );
  1204. gceSTATUS
  1205. gckOS_GPUPhysicalToCPUPhysical(
  1206. IN gckOS Os,
  1207. IN gctUINT32 GPUPhysical,
  1208. IN gctUINT32_PTR CPUPhysical
  1209. );
  1210. gceSTATUS
  1211. gckOS_QueryOption(
  1212. IN gckOS Os,
  1213. IN gctCONST_STRING Option,
  1214. OUT gctUINT32 * Value
  1215. );
  1216. /******************************************************************************\
  1217. ** Debug Support
  1218. */
  1219. void
  1220. gckOS_SetDebugLevel(
  1221. IN gctUINT32 Level
  1222. );
  1223. void
  1224. gckOS_SetDebugZone(
  1225. IN gctUINT32 Zone
  1226. );
  1227. void
  1228. gckOS_SetDebugLevelZone(
  1229. IN gctUINT32 Level,
  1230. IN gctUINT32 Zone
  1231. );
  1232. void
  1233. gckOS_SetDebugZones(
  1234. IN gctUINT32 Zones,
  1235. IN gctBOOL Enable
  1236. );
  1237. void
  1238. gckOS_SetDebugFile(
  1239. IN gctCONST_STRING FileName
  1240. );
  1241. /*******************************************************************************
  1242. ** Broadcast interface.
  1243. */
  1244. typedef enum _gceBROADCAST
  1245. {
  1246. /* GPU might be idle. */
  1247. gcvBROADCAST_GPU_IDLE,
  1248. /* A commit is going to happen. */
  1249. gcvBROADCAST_GPU_COMMIT,
  1250. /* GPU seems to be stuck. */
  1251. gcvBROADCAST_GPU_STUCK,
  1252. /* First process gets attached. */
  1253. gcvBROADCAST_FIRST_PROCESS,
  1254. /* Last process gets detached. */
  1255. gcvBROADCAST_LAST_PROCESS,
  1256. /* AXI bus error. */
  1257. gcvBROADCAST_AXI_BUS_ERROR,
  1258. /* Out of memory. */
  1259. gcvBROADCAST_OUT_OF_MEMORY,
  1260. }
  1261. gceBROADCAST;
  1262. gceSTATUS
  1263. gckOS_Broadcast(
  1264. IN gckOS Os,
  1265. IN gckHARDWARE Hardware,
  1266. IN gceBROADCAST Reason
  1267. );
  1268. gceSTATUS
  1269. gckOS_BroadcastHurry(
  1270. IN gckOS Os,
  1271. IN gckHARDWARE Hardware,
  1272. IN gctUINT Urgency
  1273. );
  1274. gceSTATUS
  1275. gckOS_BroadcastCalibrateSpeed(
  1276. IN gckOS Os,
  1277. IN gckHARDWARE Hardware,
  1278. IN gctUINT Idle,
  1279. IN gctUINT Time
  1280. );
  1281. /*******************************************************************************
  1282. **
  1283. ** gckOS_SetGPUPower
  1284. **
  1285. ** Set the power of the GPU on or off.
  1286. **
  1287. ** INPUT:
  1288. **
  1289. ** gckOS Os
  1290. ** Pointer to a gckOS object.
  1291. **
  1292. ** gceCORE Core
  1293. ** GPU whose power is set.
  1294. **
  1295. ** gctBOOL Clock
  1296. ** gcvTRUE to turn on the clock, or gcvFALSE to turn off the clock.
  1297. **
  1298. ** gctBOOL Power
  1299. ** gcvTRUE to turn on the power, or gcvFALSE to turn off the power.
  1300. **
  1301. ** OUTPUT:
  1302. **
  1303. ** Nothing.
  1304. */
  1305. gceSTATUS
  1306. gckOS_SetGPUPower(
  1307. IN gckOS Os,
  1308. IN gceCORE Core,
  1309. IN gctBOOL Clock,
  1310. IN gctBOOL Power
  1311. );
  1312. gceSTATUS
  1313. gckOS_ResetGPU(
  1314. IN gckOS Os,
  1315. IN gceCORE Core
  1316. );
  1317. gceSTATUS
  1318. gckOS_PrepareGPUFrequency(
  1319. IN gckOS Os,
  1320. IN gceCORE Core
  1321. );
  1322. gceSTATUS
  1323. gckOS_FinishGPUFrequency(
  1324. IN gckOS Os,
  1325. IN gceCORE Core
  1326. );
  1327. gceSTATUS
  1328. gckOS_QueryGPUFrequency(
  1329. IN gckOS Os,
  1330. IN gceCORE Core,
  1331. OUT gctUINT32 * Frequency,
  1332. OUT gctUINT8 * Scale
  1333. );
  1334. gceSTATUS
  1335. gckOS_SetGPUFrequency(
  1336. IN gckOS Os,
  1337. IN gceCORE Core,
  1338. IN gctUINT8 Scale
  1339. );
  1340. /*******************************************************************************
  1341. ** Semaphores.
  1342. */
  1343. /* Create a new semaphore. */
  1344. gceSTATUS
  1345. gckOS_CreateSemaphore(
  1346. IN gckOS Os,
  1347. OUT gctPOINTER * Semaphore
  1348. );
  1349. #if gcdENABLE_VG
  1350. gceSTATUS
  1351. gckOS_CreateSemaphoreVG(
  1352. IN gckOS Os,
  1353. OUT gctPOINTER * Semaphore
  1354. );
  1355. #endif
  1356. /* Delete a semahore. */
  1357. gceSTATUS
  1358. gckOS_DestroySemaphore(
  1359. IN gckOS Os,
  1360. IN gctPOINTER Semaphore
  1361. );
  1362. /* Acquire a semahore. */
  1363. gceSTATUS
  1364. gckOS_AcquireSemaphore(
  1365. IN gckOS Os,
  1366. IN gctPOINTER Semaphore
  1367. );
  1368. /* Try to acquire a semahore. */
  1369. gceSTATUS
  1370. gckOS_TryAcquireSemaphore(
  1371. IN gckOS Os,
  1372. IN gctPOINTER Semaphore
  1373. );
  1374. /* Release a semahore. */
  1375. gceSTATUS
  1376. gckOS_ReleaseSemaphore(
  1377. IN gckOS Os,
  1378. IN gctPOINTER Semaphore
  1379. );
  1380. /*******************************************************************************
  1381. ** Timer API.
  1382. */
  1383. typedef void (*gctTIMERFUNCTION)(gctPOINTER);
  1384. /* Create a timer. */
  1385. gceSTATUS
  1386. gckOS_CreateTimer(
  1387. IN gckOS Os,
  1388. IN gctTIMERFUNCTION Function,
  1389. IN gctPOINTER Data,
  1390. OUT gctPOINTER * Timer
  1391. );
  1392. /* Destory a timer. */
  1393. gceSTATUS
  1394. gckOS_DestroyTimer(
  1395. IN gckOS Os,
  1396. IN gctPOINTER Timer
  1397. );
  1398. /* Start a timer. */
  1399. gceSTATUS
  1400. gckOS_StartTimer(
  1401. IN gckOS Os,
  1402. IN gctPOINTER Timer,
  1403. IN gctUINT32 Delay
  1404. );
  1405. /* Stop a timer. */
  1406. gceSTATUS
  1407. gckOS_StopTimer(
  1408. IN gckOS Os,
  1409. IN gctPOINTER Timer
  1410. );
  1411. /******************************************************************************\
  1412. ********************************* gckHEAP Object ********************************
  1413. \******************************************************************************/
  1414. typedef struct _gckHEAP * gckHEAP;
  1415. /* Construct a new gckHEAP object. */
  1416. gceSTATUS
  1417. gckHEAP_Construct(
  1418. IN gckOS Os,
  1419. IN gctSIZE_T AllocationSize,
  1420. OUT gckHEAP * Heap
  1421. );
  1422. /* Destroy an gckHEAP object. */
  1423. gceSTATUS
  1424. gckHEAP_Destroy(
  1425. IN gckHEAP Heap
  1426. );
  1427. /* Allocate memory. */
  1428. gceSTATUS
  1429. gckHEAP_Allocate(
  1430. IN gckHEAP Heap,
  1431. IN gctSIZE_T Bytes,
  1432. OUT gctPOINTER * Node
  1433. );
  1434. /* Free memory. */
  1435. gceSTATUS
  1436. gckHEAP_Free(
  1437. IN gckHEAP Heap,
  1438. IN gctPOINTER Node
  1439. );
  1440. /* Profile the heap. */
  1441. gceSTATUS
  1442. gckHEAP_ProfileStart(
  1443. IN gckHEAP Heap
  1444. );
  1445. gceSTATUS
  1446. gckHEAP_ProfileEnd(
  1447. IN gckHEAP Heap,
  1448. IN gctCONST_STRING Title
  1449. );
  1450. /******************************************************************************\
  1451. ******************************** gckVIDMEM Object ******************************
  1452. \******************************************************************************/
  1453. typedef struct _gckVIDMEM * gckVIDMEM;
  1454. typedef struct _gckKERNEL * gckKERNEL;
  1455. typedef struct _gckDB * gckDB;
  1456. typedef struct _gckDVFS * gckDVFS;
  1457. /* Construct a new gckVIDMEM object. */
  1458. gceSTATUS
  1459. gckVIDMEM_Construct(
  1460. IN gckOS Os,
  1461. IN gctUINT32 BaseAddress,
  1462. IN gctSIZE_T Bytes,
  1463. IN gctSIZE_T Threshold,
  1464. IN gctSIZE_T Banking,
  1465. OUT gckVIDMEM * Memory
  1466. );
  1467. /* Destroy an gckVDIMEM object. */
  1468. gceSTATUS
  1469. gckVIDMEM_Destroy(
  1470. IN gckVIDMEM Memory
  1471. );
  1472. /* Allocate linear memory. */
  1473. gceSTATUS
  1474. gckVIDMEM_AllocateLinear(
  1475. IN gckKERNEL Kernel,
  1476. IN gckVIDMEM Memory,
  1477. IN gctSIZE_T Bytes,
  1478. IN gctUINT32 Alignment,
  1479. IN gceSURF_TYPE Type,
  1480. IN gctBOOL Specified,
  1481. OUT gcuVIDMEM_NODE_PTR * Node
  1482. );
  1483. /* Free memory. */
  1484. gceSTATUS
  1485. gckVIDMEM_Free(
  1486. IN gckKERNEL Kernel,
  1487. IN gcuVIDMEM_NODE_PTR Node
  1488. );
  1489. /* Lock memory. */
  1490. gceSTATUS
  1491. gckVIDMEM_Lock(
  1492. IN gckKERNEL Kernel,
  1493. IN gckVIDMEM_NODE Node,
  1494. IN gctBOOL Cacheable,
  1495. OUT gctUINT32 * Address,
  1496. OUT gctUINT32 * Gid,
  1497. OUT gctUINT64 * PhysicalAddress
  1498. );
  1499. /* Unlock memory. */
  1500. gceSTATUS
  1501. gckVIDMEM_Unlock(
  1502. IN gckKERNEL Kernel,
  1503. IN gckVIDMEM_NODE Node,
  1504. IN gceSURF_TYPE Type,
  1505. IN OUT gctBOOL * Asynchroneous
  1506. );
  1507. /* Construct a gcuVIDMEM_NODE union for virtual memory. */
  1508. gceSTATUS
  1509. gckVIDMEM_ConstructVirtual(
  1510. IN gckKERNEL Kernel,
  1511. IN gctUINT32 Flag,
  1512. IN gctSIZE_T Bytes,
  1513. OUT gcuVIDMEM_NODE_PTR * Node
  1514. );
  1515. /* Destroy a gcuVIDMEM_NODE union for virtual memory. */
  1516. gceSTATUS
  1517. gckVIDMEM_DestroyVirtual(
  1518. IN gcuVIDMEM_NODE_PTR Node
  1519. );
  1520. /******************************************************************************\
  1521. ******************************** gckKERNEL Object ******************************
  1522. \******************************************************************************/
  1523. struct _gcsHAL_INTERFACE;
  1524. /* Notifications. */
  1525. typedef enum _gceNOTIFY
  1526. {
  1527. gcvNOTIFY_INTERRUPT,
  1528. gcvNOTIFY_COMMAND_QUEUE,
  1529. }
  1530. gceNOTIFY;
  1531. /* Flush flags. */
  1532. typedef enum _gceKERNEL_FLUSH
  1533. {
  1534. gcvFLUSH_COLOR = 0x01,
  1535. gcvFLUSH_DEPTH = 0x02,
  1536. gcvFLUSH_TEXTURE = 0x04,
  1537. gcvFLUSH_2D = 0x08,
  1538. #if gcdMULTI_GPU
  1539. gcvFLUSH_L2 = 0x10,
  1540. #endif
  1541. gcvFLUSH_TILE_STATUS = 0x20,
  1542. gcvFLUSH_ALL = gcvFLUSH_COLOR
  1543. | gcvFLUSH_DEPTH
  1544. | gcvFLUSH_TEXTURE
  1545. | gcvFLUSH_2D
  1546. #if gcdMULTI_GPU
  1547. | gcvFLUSH_L2
  1548. #endif
  1549. | gcvFLUSH_TILE_STATUS
  1550. }
  1551. gceKERNEL_FLUSH;
  1552. /* Construct a new gckKERNEL object. */
  1553. gceSTATUS
  1554. gckKERNEL_Construct(
  1555. IN gckOS Os,
  1556. IN gceCORE Core,
  1557. IN gctPOINTER Context,
  1558. IN gckDB SharedDB,
  1559. OUT gckKERNEL * Kernel
  1560. );
  1561. /* Destroy an gckKERNEL object. */
  1562. gceSTATUS
  1563. gckKERNEL_Destroy(
  1564. IN gckKERNEL Kernel
  1565. );
  1566. /* Dispatch a user-level command. */
  1567. gceSTATUS
  1568. gckKERNEL_Dispatch(
  1569. IN gckKERNEL Kernel,
  1570. IN gctBOOL FromUser,
  1571. IN OUT struct _gcsHAL_INTERFACE * Interface
  1572. );
  1573. /* Query Database requirements. */
  1574. gceSTATUS
  1575. gckKERNEL_QueryDatabase(
  1576. IN gckKERNEL Kernel,
  1577. IN gctUINT32 ProcessID,
  1578. IN OUT gcsHAL_INTERFACE * Interface
  1579. );
  1580. /* Query the video memory. */
  1581. gceSTATUS
  1582. gckKERNEL_QueryVideoMemory(
  1583. IN gckKERNEL Kernel,
  1584. OUT struct _gcsHAL_INTERFACE * Interface
  1585. );
  1586. /* Lookup the gckVIDMEM object for a pool. */
  1587. gceSTATUS
  1588. gckKERNEL_GetVideoMemoryPool(
  1589. IN gckKERNEL Kernel,
  1590. IN gcePOOL Pool,
  1591. OUT gckVIDMEM * VideoMemory
  1592. );
  1593. gceSTATUS
  1594. gckKERNEL_AllocateLinearMemory(
  1595. IN gckKERNEL Kernel,
  1596. IN gctUINT32 ProcessID,
  1597. IN OUT gcePOOL * Pool,
  1598. IN gctSIZE_T Bytes,
  1599. IN gctUINT32 Alignment,
  1600. IN gceSURF_TYPE Type,
  1601. IN gctUINT32 Flag,
  1602. OUT gctUINT32 * Node
  1603. );
  1604. gceSTATUS
  1605. gckKERNEL_ReleaseVideoMemory(
  1606. IN gckKERNEL Kernel,
  1607. IN gctUINT32 ProcessID,
  1608. IN gctUINT32 Handle
  1609. );
  1610. gceSTATUS
  1611. gckKERNEL_LockVideoMemory(
  1612. IN gckKERNEL Kernel,
  1613. IN gceCORE Core,
  1614. IN gctUINT32 ProcessID,
  1615. IN gctBOOL FromUser,
  1616. IN OUT gcsHAL_INTERFACE * Interface
  1617. );
  1618. gceSTATUS
  1619. gckKERNEL_UnlockVideoMemory(
  1620. IN gckKERNEL Kernel,
  1621. IN gctUINT32 ProcessID,
  1622. IN OUT gcsHAL_INTERFACE * Interface
  1623. );
  1624. /* Map video memory. */
  1625. gceSTATUS
  1626. gckKERNEL_MapVideoMemory(
  1627. IN gckKERNEL Kernel,
  1628. IN gctBOOL InUserSpace,
  1629. IN gctUINT32 Address,
  1630. #ifdef __QNXNTO__
  1631. IN gctUINT32 Pid,
  1632. IN gctUINT32 Bytes,
  1633. #endif
  1634. OUT gctPOINTER * Logical
  1635. );
  1636. /* Map video memory. */
  1637. gceSTATUS
  1638. gckKERNEL_MapVideoMemoryEx(
  1639. IN gckKERNEL Kernel,
  1640. IN gceCORE Core,
  1641. IN gctBOOL InUserSpace,
  1642. IN gctUINT32 Address,
  1643. #ifdef __QNXNTO__
  1644. IN gctUINT32 Pid,
  1645. IN gctUINT32 Bytes,
  1646. #endif
  1647. OUT gctPOINTER * Logical
  1648. );
  1649. #ifdef __QNXNTO__
  1650. /* Unmap video memory. */
  1651. gceSTATUS
  1652. gckKERNEL_UnmapVideoMemory(
  1653. IN gckKERNEL Kernel,
  1654. IN gctPOINTER Logical,
  1655. IN gctUINT32 Pid,
  1656. IN gctUINT32 Bytes
  1657. );
  1658. #endif
  1659. /* Map memory. */
  1660. gceSTATUS
  1661. gckKERNEL_MapMemory(
  1662. IN gckKERNEL Kernel,
  1663. IN gctPHYS_ADDR Physical,
  1664. IN gctSIZE_T Bytes,
  1665. OUT gctPOINTER * Logical
  1666. );
  1667. /* Unmap memory. */
  1668. gceSTATUS
  1669. gckKERNEL_UnmapMemory(
  1670. IN gckKERNEL Kernel,
  1671. IN gctPHYS_ADDR Physical,
  1672. IN gctSIZE_T Bytes,
  1673. IN gctPOINTER Logical
  1674. );
  1675. /* Notification of events. */
  1676. gceSTATUS
  1677. gckKERNEL_Notify(
  1678. IN gckKERNEL Kernel,
  1679. #if gcdMULTI_GPU
  1680. IN gctUINT CoreId,
  1681. #endif
  1682. IN gceNOTIFY Notifcation,
  1683. IN gctBOOL Data
  1684. );
  1685. gceSTATUS
  1686. gckKERNEL_QuerySettings(
  1687. IN gckKERNEL Kernel,
  1688. OUT gcsKERNEL_SETTINGS * Settings
  1689. );
  1690. /*******************************************************************************
  1691. **
  1692. ** gckKERNEL_Recovery
  1693. **
  1694. ** Try to recover the GPU from a fatal error.
  1695. **
  1696. ** INPUT:
  1697. **
  1698. ** gckKERNEL Kernel
  1699. ** Pointer to an gckKERNEL object.
  1700. **
  1701. ** OUTPUT:
  1702. **
  1703. ** Nothing.
  1704. */
  1705. gceSTATUS
  1706. gckKERNEL_Recovery(
  1707. IN gckKERNEL Kernel
  1708. );
  1709. /* Set the value of timeout on HW operation. */
  1710. void
  1711. gckKERNEL_SetTimeOut(
  1712. IN gckKERNEL Kernel,
  1713. IN gctUINT32 timeOut
  1714. );
  1715. /* Get access to the user data. */
  1716. gceSTATUS
  1717. gckKERNEL_OpenUserData(
  1718. IN gckKERNEL Kernel,
  1719. IN gctBOOL NeedCopy,
  1720. IN gctPOINTER StaticStorage,
  1721. IN gctPOINTER UserPointer,
  1722. IN gctSIZE_T Size,
  1723. OUT gctPOINTER * KernelPointer
  1724. );
  1725. /* Release resources associated with the user data connection. */
  1726. gceSTATUS
  1727. gckKERNEL_CloseUserData(
  1728. IN gckKERNEL Kernel,
  1729. IN gctBOOL NeedCopy,
  1730. IN gctBOOL FlushData,
  1731. IN gctPOINTER UserPointer,
  1732. IN gctSIZE_T Size,
  1733. OUT gctPOINTER * KernelPointer
  1734. );
  1735. gceSTATUS
  1736. gckDVFS_Construct(
  1737. IN gckHARDWARE Hardware,
  1738. OUT gckDVFS * Frequency
  1739. );
  1740. gceSTATUS
  1741. gckDVFS_Destroy(
  1742. IN gckDVFS Dvfs
  1743. );
  1744. gceSTATUS
  1745. gckDVFS_Start(
  1746. IN gckDVFS Dvfs
  1747. );
  1748. gceSTATUS
  1749. gckDVFS_Stop(
  1750. IN gckDVFS Dvfs
  1751. );
  1752. /******************************************************************************\
  1753. ******************************* gckHARDWARE Object *****************************
  1754. \******************************************************************************/
  1755. /* Construct a new gckHARDWARE object. */
  1756. gceSTATUS
  1757. gckHARDWARE_Construct(
  1758. IN gckOS Os,
  1759. IN gceCORE Core,
  1760. OUT gckHARDWARE * Hardware
  1761. );
  1762. /* Destroy an gckHARDWARE object. */
  1763. gceSTATUS
  1764. gckHARDWARE_Destroy(
  1765. IN gckHARDWARE Hardware
  1766. );
  1767. /* Get hardware type. */
  1768. gceSTATUS
  1769. gckHARDWARE_GetType(
  1770. IN gckHARDWARE Hardware,
  1771. OUT gceHARDWARE_TYPE * Type
  1772. );
  1773. /* Query system memory requirements. */
  1774. gceSTATUS
  1775. gckHARDWARE_QuerySystemMemory(
  1776. IN gckHARDWARE Hardware,
  1777. OUT gctSIZE_T * SystemSize,
  1778. OUT gctUINT32 * SystemBaseAddress
  1779. );
  1780. /* Build virtual address. */
  1781. gceSTATUS
  1782. gckHARDWARE_BuildVirtualAddress(
  1783. IN gckHARDWARE Hardware,
  1784. IN gctUINT32 Index,
  1785. IN gctUINT32 Offset,
  1786. OUT gctUINT32 * Address
  1787. );
  1788. /* Query command buffer requirements. */
  1789. gceSTATUS
  1790. gckHARDWARE_QueryCommandBuffer(
  1791. IN gckHARDWARE Hardware,
  1792. OUT gctUINT32 * Alignment,
  1793. OUT gctUINT32 * ReservedHead,
  1794. OUT gctUINT32 * ReservedTail
  1795. );
  1796. /* Add a WAIT/LINK pair in the command queue. */
  1797. gceSTATUS
  1798. gckHARDWARE_WaitLink(
  1799. IN gckHARDWARE Hardware,
  1800. IN gctPOINTER Logical,
  1801. IN gctUINT32 Offset,
  1802. IN OUT gctUINT32 * Bytes,
  1803. OUT gctUINT32 * WaitOffset,
  1804. OUT gctUINT32 * WaitBytes
  1805. );
  1806. /* Kickstart the command processor. */
  1807. gceSTATUS
  1808. gckHARDWARE_Execute(
  1809. IN gckHARDWARE Hardware,
  1810. IN gctUINT32 Address,
  1811. IN gctSIZE_T Bytes
  1812. );
  1813. /* Add an END command in the command queue. */
  1814. gceSTATUS
  1815. gckHARDWARE_End(
  1816. IN gckHARDWARE Hardware,
  1817. IN gctPOINTER Logical,
  1818. IN OUT gctUINT32 * Bytes
  1819. );
  1820. #if gcdMULTI_GPU
  1821. gceSTATUS
  1822. gckHARDWARE_ChipEnable(
  1823. IN gckHARDWARE Hardware,
  1824. IN gctPOINTER Logical,
  1825. IN gceCORE_3D_MASK ChipEnable,
  1826. IN OUT gctSIZE_T * Bytes
  1827. );
  1828. #endif
  1829. /* Add a NOP command in the command queue. */
  1830. gceSTATUS
  1831. gckHARDWARE_Nop(
  1832. IN gckHARDWARE Hardware,
  1833. IN gctPOINTER Logical,
  1834. IN OUT gctSIZE_T * Bytes
  1835. );
  1836. /* Add a PIPESELECT command in the command queue. */
  1837. gceSTATUS
  1838. gckHARDWARE_PipeSelect(
  1839. IN gckHARDWARE Hardware,
  1840. IN gctPOINTER Logical,
  1841. IN gcePIPE_SELECT Pipe,
  1842. IN OUT gctUINT32 * Bytes
  1843. );
  1844. /* Add a LINK command in the command queue. */
  1845. gceSTATUS
  1846. gckHARDWARE_Link(
  1847. IN gckHARDWARE Hardware,
  1848. IN gctPOINTER Logical,
  1849. IN gctUINT32 FetchAddress,
  1850. IN gctUINT32 FetchSize,
  1851. IN OUT gctUINT32 * Bytes
  1852. );
  1853. /* Add an EVENT command in the command queue. */
  1854. gceSTATUS
  1855. gckHARDWARE_Event(
  1856. IN gckHARDWARE Hardware,
  1857. IN gctPOINTER Logical,
  1858. IN gctUINT8 Event,
  1859. IN gceKERNEL_WHERE FromWhere,
  1860. IN OUT gctUINT32 * Bytes
  1861. );
  1862. /* Query the available memory. */
  1863. gceSTATUS
  1864. gckHARDWARE_QueryMemory(
  1865. IN gckHARDWARE Hardware,
  1866. OUT gctSIZE_T * InternalSize,
  1867. OUT gctUINT32 * InternalBaseAddress,
  1868. OUT gctUINT32 * InternalAlignment,
  1869. OUT gctSIZE_T * ExternalSize,
  1870. OUT gctUINT32 * ExternalBaseAddress,
  1871. OUT gctUINT32 * ExternalAlignment,
  1872. OUT gctUINT32 * HorizontalTileSize,
  1873. OUT gctUINT32 * VerticalTileSize
  1874. );
  1875. /* Query the identity of the hardware. */
  1876. gceSTATUS
  1877. gckHARDWARE_QueryChipIdentity(
  1878. IN gckHARDWARE Hardware,
  1879. OUT gcsHAL_QUERY_CHIP_IDENTITY_PTR Identity
  1880. );
  1881. /* Query the shader uniforms support. */
  1882. gceSTATUS
  1883. gckHARDWARE_QueryShaderCaps(
  1884. IN gckHARDWARE Hardware,
  1885. OUT gctUINT * VertexUniforms,
  1886. OUT gctUINT * FragmentUniforms,
  1887. OUT gctBOOL * UnifiedUnforms
  1888. );
  1889. /* Split a harwdare specific address into API stuff. */
  1890. gceSTATUS
  1891. gckHARDWARE_SplitMemory(
  1892. IN gckHARDWARE Hardware,
  1893. IN gctUINT32 Address,
  1894. OUT gcePOOL * Pool,
  1895. OUT gctUINT32 * Offset
  1896. );
  1897. /* Update command queue tail pointer. */
  1898. gceSTATUS
  1899. gckHARDWARE_UpdateQueueTail(
  1900. IN gckHARDWARE Hardware,
  1901. IN gctPOINTER Logical,
  1902. IN gctUINT32 Offset
  1903. );
  1904. /* Convert logical address to hardware specific address. */
  1905. gceSTATUS
  1906. gckHARDWARE_ConvertLogical(
  1907. IN gckHARDWARE Hardware,
  1908. IN gctPOINTER Logical,
  1909. IN gctBOOL InUserSpace,
  1910. OUT gctUINT32 * Address
  1911. );
  1912. /* Interrupt manager. */
  1913. gceSTATUS
  1914. gckHARDWARE_Interrupt(
  1915. IN gckHARDWARE Hardware,
  1916. #if gcdMULTI_GPU
  1917. IN gctUINT CoreId,
  1918. #endif
  1919. IN gctBOOL InterruptValid
  1920. );
  1921. /* Program MMU. */
  1922. gceSTATUS
  1923. gckHARDWARE_SetMMU(
  1924. IN gckHARDWARE Hardware,
  1925. IN gctPOINTER Logical
  1926. );
  1927. /* Flush the MMU. */
  1928. gceSTATUS
  1929. gckHARDWARE_FlushMMU(
  1930. IN gckHARDWARE Hardware
  1931. );
  1932. /* Set the page table base address. */
  1933. gceSTATUS
  1934. gckHARDWARE_SetMMUv2(
  1935. IN gckHARDWARE Hardware,
  1936. IN gctBOOL Enable,
  1937. IN gctPOINTER MtlbAddress,
  1938. IN gceMMU_MODE Mode,
  1939. IN gctPOINTER SafeAddress,
  1940. IN gctBOOL FromPower
  1941. );
  1942. #if gcdPROCESS_ADDRESS_SPACE
  1943. /* Configure mmu configuration. */
  1944. gceSTATUS
  1945. gckHARDWARE_ConfigMMU(
  1946. IN gckHARDWARE Hardware,
  1947. IN gctPOINTER Logical,
  1948. IN gctPOINTER MtlbLogical,
  1949. IN gctUINT32 Offset,
  1950. IN OUT gctSIZE_T * Bytes,
  1951. OUT gctSIZE_T * WaitLinkOffset,
  1952. OUT gctSIZE_T * WaitLinkBytes
  1953. );
  1954. #endif
  1955. /* Get idle register. */
  1956. gceSTATUS
  1957. gckHARDWARE_GetIdle(
  1958. IN gckHARDWARE Hardware,
  1959. IN gctBOOL Wait,
  1960. OUT gctUINT32 * Data
  1961. );
  1962. /* Flush the caches. */
  1963. gceSTATUS
  1964. gckHARDWARE_Flush(
  1965. IN gckHARDWARE Hardware,
  1966. IN gceKERNEL_FLUSH Flush,
  1967. IN gctPOINTER Logical,
  1968. IN OUT gctUINT32 * Bytes
  1969. );
  1970. /* Enable/disable fast clear. */
  1971. gceSTATUS
  1972. gckHARDWARE_SetFastClear(
  1973. IN gckHARDWARE Hardware,
  1974. IN gctINT Enable,
  1975. IN gctINT Compression
  1976. );
  1977. gceSTATUS
  1978. gckHARDWARE_ReadInterrupt(
  1979. IN gckHARDWARE Hardware,
  1980. OUT gctUINT32_PTR IDs
  1981. );
  1982. /* Power management. */
  1983. gceSTATUS
  1984. gckHARDWARE_SetPowerManagementState(
  1985. IN gckHARDWARE Hardware,
  1986. IN gceCHIPPOWERSTATE State
  1987. );
  1988. gceSTATUS
  1989. gckHARDWARE_QueryPowerManagementState(
  1990. IN gckHARDWARE Hardware,
  1991. OUT gceCHIPPOWERSTATE* State
  1992. );
  1993. gceSTATUS
  1994. gckHARDWARE_SetPowerManagement(
  1995. IN gckHARDWARE Hardware,
  1996. IN gctBOOL PowerManagement
  1997. );
  1998. gceSTATUS
  1999. gckHARDWARE_SetGpuProfiler(
  2000. IN gckHARDWARE Hardware,
  2001. IN gctBOOL GpuProfiler
  2002. );
  2003. #if gcdENABLE_FSCALE_VAL_ADJUST
  2004. gceSTATUS
  2005. gckHARDWARE_SetFscaleValue(
  2006. IN gckHARDWARE Hardware,
  2007. IN gctUINT32 FscaleValue
  2008. );
  2009. gceSTATUS
  2010. gckHARDWARE_GetFscaleValue(
  2011. IN gckHARDWARE Hardware,
  2012. IN gctUINT * FscaleValue,
  2013. IN gctUINT * MinFscaleValue,
  2014. IN gctUINT * MaxFscaleValue
  2015. );
  2016. gceSTATUS
  2017. gckHARDWARE_SetMinFscaleValue(
  2018. IN gckHARDWARE Hardware,
  2019. IN gctUINT MinFscaleValue
  2020. );
  2021. #endif
  2022. #if gcdPOWEROFF_TIMEOUT
  2023. gceSTATUS
  2024. gckHARDWARE_SetPowerOffTimeout(
  2025. IN gckHARDWARE Hardware,
  2026. IN gctUINT32 Timeout
  2027. );
  2028. gceSTATUS
  2029. gckHARDWARE_QueryPowerOffTimeout(
  2030. IN gckHARDWARE Hardware,
  2031. OUT gctUINT32* Timeout
  2032. );
  2033. #endif
  2034. /* Profile 2D Engine. */
  2035. gceSTATUS
  2036. gckHARDWARE_ProfileEngine2D(
  2037. IN gckHARDWARE Hardware,
  2038. OUT gcs2D_PROFILE_PTR Profile
  2039. );
  2040. gceSTATUS
  2041. gckHARDWARE_InitializeHardware(
  2042. IN gckHARDWARE Hardware
  2043. );
  2044. gceSTATUS
  2045. gckHARDWARE_Reset(
  2046. IN gckHARDWARE Hardware
  2047. );
  2048. typedef gceSTATUS (*gctISRMANAGERFUNC)(gctPOINTER Context);
  2049. gceSTATUS
  2050. gckHARDWARE_SetIsrManager(
  2051. IN gckHARDWARE Hardware,
  2052. IN gctISRMANAGERFUNC StartIsr,
  2053. IN gctISRMANAGERFUNC StopIsr,
  2054. IN gctPOINTER Context
  2055. );
  2056. /* Start a composition. */
  2057. gceSTATUS
  2058. gckHARDWARE_Compose(
  2059. IN gckHARDWARE Hardware,
  2060. IN gctUINT32 ProcessID,
  2061. IN gctPHYS_ADDR Physical,
  2062. IN gctPOINTER Logical,
  2063. IN gctSIZE_T Offset,
  2064. IN gctSIZE_T Size,
  2065. IN gctUINT8 EventID
  2066. );
  2067. /* Check for Hardware features. */
  2068. gceSTATUS
  2069. gckHARDWARE_IsFeatureAvailable(
  2070. IN gckHARDWARE Hardware,
  2071. IN gceFEATURE Feature
  2072. );
  2073. gceSTATUS
  2074. gckHARDWARE_DumpMMUException(
  2075. IN gckHARDWARE Hardware
  2076. );
  2077. gceSTATUS
  2078. gckHARDWARE_DumpGPUState(
  2079. IN gckHARDWARE Hardware
  2080. );
  2081. gceSTATUS
  2082. gckHARDWARE_InitDVFS(
  2083. IN gckHARDWARE Hardware
  2084. );
  2085. gceSTATUS
  2086. gckHARDWARE_QueryLoad(
  2087. IN gckHARDWARE Hardware,
  2088. OUT gctUINT32 * Load
  2089. );
  2090. gceSTATUS
  2091. gckHARDWARE_SetDVFSPeroid(
  2092. IN gckHARDWARE Hardware,
  2093. IN gctUINT32 Frequency
  2094. );
  2095. gceSTATUS
  2096. gckHARDWARE_PrepareFunctions(
  2097. gckHARDWARE Hardware
  2098. );
  2099. gceSTATUS
  2100. gckHARDWARE_SetMMUStates(
  2101. IN gckHARDWARE Hardware,
  2102. IN gctPOINTER MtlbAddress,
  2103. IN gceMMU_MODE Mode,
  2104. IN gctPOINTER SafeAddress,
  2105. IN gctPOINTER Logical,
  2106. IN OUT gctUINT32 * Bytes
  2107. );
  2108. #if !gcdENABLE_VG
  2109. /******************************************************************************\
  2110. ***************************** gckINTERRUPT Object ******************************
  2111. \******************************************************************************/
  2112. typedef struct _gckINTERRUPT * gckINTERRUPT;
  2113. typedef gceSTATUS (* gctINTERRUPT_HANDLER)(
  2114. IN gckKERNEL Kernel
  2115. );
  2116. gceSTATUS
  2117. gckINTERRUPT_Construct(
  2118. IN gckKERNEL Kernel,
  2119. OUT gckINTERRUPT * Interrupt
  2120. );
  2121. gceSTATUS
  2122. gckINTERRUPT_Destroy(
  2123. IN gckINTERRUPT Interrupt
  2124. );
  2125. gceSTATUS
  2126. gckINTERRUPT_SetHandler(
  2127. IN gckINTERRUPT Interrupt,
  2128. IN OUT gctINT32_PTR Id,
  2129. IN gctINTERRUPT_HANDLER Handler
  2130. );
  2131. gceSTATUS
  2132. gckINTERRUPT_Notify(
  2133. IN gckINTERRUPT Interrupt,
  2134. IN gctBOOL Valid
  2135. );
  2136. #endif
  2137. /******************************************************************************\
  2138. ******************************** gckEVENT Object *******************************
  2139. \******************************************************************************/
  2140. typedef struct _gckEVENT * gckEVENT;
  2141. /* Construct a new gckEVENT object. */
  2142. gceSTATUS
  2143. gckEVENT_Construct(
  2144. IN gckKERNEL Kernel,
  2145. OUT gckEVENT * Event
  2146. );
  2147. /* Destroy an gckEVENT object. */
  2148. gceSTATUS
  2149. gckEVENT_Destroy(
  2150. IN gckEVENT Event
  2151. );
  2152. /* Reserve the next available hardware event. */
  2153. #if gcdMULTI_GPU
  2154. gceSTATUS
  2155. gckEVENT_GetEvent(
  2156. IN gckEVENT Event,
  2157. IN gctBOOL Wait,
  2158. OUT gctUINT8 * EventID,
  2159. IN gceKERNEL_WHERE Source,
  2160. IN gceCORE_3D_MASK ChipEnable
  2161. );
  2162. #else
  2163. gceSTATUS
  2164. gckEVENT_GetEvent(
  2165. IN gckEVENT Event,
  2166. IN gctBOOL Wait,
  2167. OUT gctUINT8 * EventID,
  2168. IN gceKERNEL_WHERE Source
  2169. );
  2170. #endif
  2171. /* Add a new event to the list of events. */
  2172. gceSTATUS
  2173. gckEVENT_AddList(
  2174. IN gckEVENT Event,
  2175. IN gcsHAL_INTERFACE_PTR Interface,
  2176. IN gceKERNEL_WHERE FromWhere,
  2177. IN gctBOOL AllocateAllowed,
  2178. IN gctBOOL FromKernel
  2179. );
  2180. /* Schedule a FreeNonPagedMemory event. */
  2181. gceSTATUS
  2182. gckEVENT_FreeNonPagedMemory(
  2183. IN gckEVENT Event,
  2184. IN gctSIZE_T Bytes,
  2185. IN gctPHYS_ADDR Physical,
  2186. IN gctPOINTER Logical,
  2187. IN gceKERNEL_WHERE FromWhere
  2188. );
  2189. /* Schedule a FreeContiguousMemory event. */
  2190. gceSTATUS
  2191. gckEVENT_FreeContiguousMemory(
  2192. IN gckEVENT Event,
  2193. IN gctSIZE_T Bytes,
  2194. IN gctPHYS_ADDR Physical,
  2195. IN gctPOINTER Logical,
  2196. IN gceKERNEL_WHERE FromWhere
  2197. );
  2198. /* Schedule a FreeVideoMemory event. */
  2199. gceSTATUS
  2200. gckEVENT_FreeVideoMemory(
  2201. IN gckEVENT Event,
  2202. IN gcuVIDMEM_NODE_PTR VideoMemory,
  2203. IN gceKERNEL_WHERE FromWhere
  2204. );
  2205. /* Schedule a signal event. */
  2206. gceSTATUS
  2207. gckEVENT_Signal(
  2208. IN gckEVENT Event,
  2209. IN gctSIGNAL Signal,
  2210. IN gceKERNEL_WHERE FromWhere
  2211. );
  2212. /* Schedule an Unlock event. */
  2213. gceSTATUS
  2214. gckEVENT_Unlock(
  2215. IN gckEVENT Event,
  2216. IN gceKERNEL_WHERE FromWhere,
  2217. IN gctPOINTER Node,
  2218. IN gceSURF_TYPE Type
  2219. );
  2220. gceSTATUS
  2221. gckEVENT_CommitDone(
  2222. IN gckEVENT Event,
  2223. IN gceKERNEL_WHERE FromWhere
  2224. );
  2225. /* Schedule a FreeVirtualCommandBuffer event. */
  2226. gceSTATUS
  2227. gckEVENT_DestroyVirtualCommandBuffer(
  2228. IN gckEVENT Event,
  2229. IN gctSIZE_T Bytes,
  2230. IN gctPHYS_ADDR Physical,
  2231. IN gctPOINTER Logical,
  2232. IN gceKERNEL_WHERE FromWhere
  2233. );
  2234. #if gcdMULTI_GPU
  2235. gceSTATUS
  2236. gckEVENT_Submit(
  2237. IN gckEVENT Event,
  2238. IN gctBOOL Wait,
  2239. IN gctBOOL FromPower,
  2240. IN gceCORE_3D_MASK ChipEnable
  2241. );
  2242. #else
  2243. gceSTATUS
  2244. gckEVENT_Submit(
  2245. IN gckEVENT Event,
  2246. IN gctBOOL Wait,
  2247. IN gctBOOL FromPower
  2248. );
  2249. #endif
  2250. #if gcdMULTI_GPU
  2251. gceSTATUS
  2252. gckEVENT_Commit(
  2253. IN gckEVENT Event,
  2254. IN gcsQUEUE_PTR Queue,
  2255. IN gceCORE_3D_MASK ChipEnable
  2256. );
  2257. #else
  2258. gceSTATUS
  2259. gckEVENT_Commit(
  2260. IN gckEVENT Event,
  2261. IN gcsQUEUE_PTR Queue
  2262. );
  2263. #endif
  2264. /* Schedule a composition event. */
  2265. gceSTATUS
  2266. gckEVENT_Compose(
  2267. IN gckEVENT Event,
  2268. IN gcsHAL_COMPOSE_PTR Info
  2269. );
  2270. /* Event callback routine. */
  2271. gceSTATUS
  2272. gckEVENT_Notify(
  2273. IN gckEVENT Event,
  2274. IN gctUINT32 IDs
  2275. );
  2276. /* Event callback routine. */
  2277. gceSTATUS
  2278. gckEVENT_Interrupt(
  2279. IN gckEVENT Event,
  2280. #if gcdMULTI_GPU
  2281. IN gctUINT CoreId,
  2282. #endif
  2283. IN gctUINT32 IDs
  2284. );
  2285. gceSTATUS
  2286. gckEVENT_Dump(
  2287. IN gckEVENT Event
  2288. );
  2289. /******************************************************************************\
  2290. ******************************* gckCOMMAND Object ******************************
  2291. \******************************************************************************/
  2292. typedef struct _gckCOMMAND * gckCOMMAND;
  2293. /* Construct a new gckCOMMAND object. */
  2294. gceSTATUS
  2295. gckCOMMAND_Construct(
  2296. IN gckKERNEL Kernel,
  2297. OUT gckCOMMAND * Command
  2298. );
  2299. /* Destroy an gckCOMMAND object. */
  2300. gceSTATUS
  2301. gckCOMMAND_Destroy(
  2302. IN gckCOMMAND Command
  2303. );
  2304. /* Acquire command queue synchronization objects. */
  2305. gceSTATUS
  2306. gckCOMMAND_EnterCommit(
  2307. IN gckCOMMAND Command,
  2308. IN gctBOOL FromPower
  2309. );
  2310. /* Release command queue synchronization objects. */
  2311. gceSTATUS
  2312. gckCOMMAND_ExitCommit(
  2313. IN gckCOMMAND Command,
  2314. IN gctBOOL FromPower
  2315. );
  2316. /* Start the command queue. */
  2317. gceSTATUS
  2318. gckCOMMAND_Start(
  2319. IN gckCOMMAND Command
  2320. );
  2321. /* Stop the command queue. */
  2322. gceSTATUS
  2323. gckCOMMAND_Stop(
  2324. IN gckCOMMAND Command,
  2325. IN gctBOOL FromRecovery
  2326. );
  2327. #if gcdMULTI_GPU
  2328. /* Commit a buffer to the command queue. */
  2329. gceSTATUS
  2330. gckCOMMAND_Commit(
  2331. IN gckCOMMAND Command,
  2332. IN gckCONTEXT Context,
  2333. IN gcoCMDBUF CommandBuffer,
  2334. IN gcsSTATE_DELTA_PTR StateDelta,
  2335. IN gcsQUEUE_PTR EventQueue,
  2336. IN gctUINT32 ProcessID,
  2337. IN gceCORE_3D_MASK ChipEnable
  2338. );
  2339. #else
  2340. gceSTATUS
  2341. gckCOMMAND_Commit(
  2342. IN gckCOMMAND Command,
  2343. IN gckCONTEXT Context,
  2344. IN gcoCMDBUF CommandBuffer,
  2345. IN gcsSTATE_DELTA_PTR StateDelta,
  2346. IN gcsQUEUE_PTR EventQueue,
  2347. IN gctUINT32 ProcessID
  2348. );
  2349. #endif
  2350. /* Reserve space in the command buffer. */
  2351. gceSTATUS
  2352. gckCOMMAND_Reserve(
  2353. IN gckCOMMAND Command,
  2354. IN gctUINT32 RequestedBytes,
  2355. OUT gctPOINTER * Buffer,
  2356. OUT gctUINT32 * BufferSize
  2357. );
  2358. /* Execute reserved space in the command buffer. */
  2359. gceSTATUS
  2360. gckCOMMAND_Execute(
  2361. IN gckCOMMAND Command,
  2362. IN gctUINT32 RequstedBytes
  2363. );
  2364. /* Stall the command queue. */
  2365. #if gcdMULTI_GPU
  2366. gceSTATUS
  2367. gckCOMMAND_Stall(
  2368. IN gckCOMMAND Command,
  2369. IN gctBOOL FromPower,
  2370. IN gceCORE_3D_MASK ChipEnable
  2371. );
  2372. #else
  2373. gceSTATUS
  2374. gckCOMMAND_Stall(
  2375. IN gckCOMMAND Command,
  2376. IN gctBOOL FromPower
  2377. );
  2378. #endif
  2379. /* Attach user process. */
  2380. gceSTATUS
  2381. gckCOMMAND_Attach(
  2382. IN gckCOMMAND Command,
  2383. OUT gckCONTEXT * Context,
  2384. OUT gctSIZE_T * StateCount,
  2385. IN gctUINT32 ProcessID
  2386. );
  2387. /* Detach user process. */
  2388. gceSTATUS
  2389. gckCOMMAND_Detach(
  2390. IN gckCOMMAND Command,
  2391. IN gckCONTEXT Context
  2392. );
  2393. /* Dump command buffer being executed by GPU. */
  2394. gceSTATUS
  2395. gckCOMMAND_DumpExecutingBuffer(
  2396. IN gckCOMMAND Command
  2397. );
  2398. /* Whether a kernel command buffer address. */
  2399. gceSTATUS
  2400. gckCOMMAND_AddressInKernelCommandBuffer(
  2401. IN gckCOMMAND Command,
  2402. IN gctUINT32 Address,
  2403. OUT gctBOOL *In
  2404. );
  2405. /******************************************************************************\
  2406. ********************************* gckMMU Object ********************************
  2407. \******************************************************************************/
  2408. typedef struct _gckMMU * gckMMU;
  2409. /* Construct a new gckMMU object. */
  2410. gceSTATUS
  2411. gckMMU_Construct(
  2412. IN gckKERNEL Kernel,
  2413. IN gctSIZE_T MmuSize,
  2414. OUT gckMMU * Mmu
  2415. );
  2416. /* Destroy an gckMMU object. */
  2417. gceSTATUS
  2418. gckMMU_Destroy(
  2419. IN gckMMU Mmu
  2420. );
  2421. /* Allocate pages inside the MMU. */
  2422. gceSTATUS
  2423. gckMMU_AllocatePages(
  2424. IN gckMMU Mmu,
  2425. IN gctSIZE_T PageCount,
  2426. OUT gctPOINTER * PageTable,
  2427. OUT gctUINT32 * Address
  2428. );
  2429. gceSTATUS
  2430. gckMMU_AllocatePagesEx(
  2431. IN gckMMU Mmu,
  2432. IN gctSIZE_T PageCount,
  2433. IN gceSURF_TYPE Type,
  2434. OUT gctPOINTER * PageTable,
  2435. OUT gctUINT32 * Address
  2436. );
  2437. /* Remove a page table from the MMU. */
  2438. gceSTATUS
  2439. gckMMU_FreePages(
  2440. IN gckMMU Mmu,
  2441. IN gctPOINTER PageTable,
  2442. IN gctSIZE_T PageCount
  2443. );
  2444. /* Set the MMU page with info. */
  2445. gceSTATUS
  2446. gckMMU_SetPage(
  2447. IN gckMMU Mmu,
  2448. IN gctUINT32 PageAddress,
  2449. IN gctUINT32 *PageEntry
  2450. );
  2451. gceSTATUS
  2452. gckMMU_Flush(
  2453. IN gckMMU Mmu,
  2454. IN gceSURF_TYPE Type
  2455. );
  2456. gceSTATUS
  2457. gckMMU_DumpPageTableEntry(
  2458. IN gckMMU Mmu,
  2459. IN gctUINT32 Address
  2460. );
  2461. #if VIVANTE_PROFILER
  2462. gceSTATUS
  2463. gckHARDWARE_QueryProfileRegisters(
  2464. IN gckHARDWARE Hardware,
  2465. IN gctBOOL Reset,
  2466. OUT gcsPROFILER_COUNTERS * Counters
  2467. );
  2468. #endif
  2469. #if VIVANTE_PROFILER_CONTEXT
  2470. gceSTATUS
  2471. gckHARDWARE_QueryContextProfile(
  2472. IN gckHARDWARE Hardware,
  2473. IN gctBOOL Reset,
  2474. IN gckCONTEXT Context,
  2475. OUT gcsPROFILER_COUNTERS * Counters
  2476. );
  2477. gceSTATUS
  2478. gckHARDWARE_UpdateContextProfile(
  2479. IN gckHARDWARE Hardware,
  2480. IN gckCONTEXT Context
  2481. );
  2482. #endif
  2483. #if VIVANTE_PROFILER_NEW
  2484. gceSTATUS
  2485. gckHARDWARE_InitProfiler(
  2486. IN gckHARDWARE Hardware
  2487. );
  2488. #endif
  2489. gceSTATUS
  2490. gckOS_SignalQueryHardware(
  2491. IN gckOS Os,
  2492. IN gctSIGNAL Signal,
  2493. OUT gckHARDWARE * Hardware
  2494. );
  2495. gceSTATUS
  2496. gckOS_SignalSetHardware(
  2497. IN gckOS Os,
  2498. IN gctSIGNAL Signal,
  2499. gckHARDWARE Hardware
  2500. );
  2501. gceSTATUS
  2502. gckOS_DetectProcessByName(
  2503. IN gctCONST_POINTER Name
  2504. );
  2505. void
  2506. gckOS_DumpParam(
  2507. void
  2508. );
  2509. #ifdef __cplusplus
  2510. }
  2511. #endif
  2512. #if gcdENABLE_VG
  2513. #include "gc_hal_vg.h"
  2514. #endif
  2515. #endif /* __gc_hal_h_ */