sf_semaphore.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2022 StarFive Technology Co., Ltd.
  4. */
  5. #include "sf_semaphore.h"
  6. #include "SF_OMX_Core.h"
  7. OMX_ERRORTYPE SF_SemaphoreCreate(OMX_HANDLETYPE *semaphoreHandle)
  8. {
  9. sem_t *sema;
  10. sema = (sem_t *)malloc(sizeof(sem_t));
  11. if (!sema)
  12. return OMX_ErrorInsufficientResources;
  13. if (sem_init(sema, 0, 0) != 0) {
  14. free(sema);
  15. return OMX_ErrorUndefined;
  16. }
  17. *semaphoreHandle = (OMX_HANDLETYPE)sema;
  18. LOG(SF_LOG_INFO,"SF_SemaphoreCreate %p\r\n", sema);
  19. return OMX_ErrorNone;
  20. }
  21. OMX_ERRORTYPE SF_SemaphoreTerminate(OMX_HANDLETYPE semaphoreHandle)
  22. {
  23. sem_t *sema = (sem_t *)semaphoreHandle;
  24. if (sema == NULL)
  25. return OMX_ErrorBadParameter;
  26. if (sem_destroy(sema) != 0)
  27. return OMX_ErrorUndefined;
  28. free(sema);
  29. return OMX_ErrorNone;
  30. }
  31. OMX_ERRORTYPE SF_SemaphoreWait(OMX_HANDLETYPE semaphoreHandle)
  32. {
  33. sem_t *sema = (sem_t *)semaphoreHandle;
  34. FunctionIn();
  35. LOG(SF_LOG_INFO,"SF_SemaphoreWait %p\r\n", semaphoreHandle);
  36. if (sema == NULL)
  37. return OMX_ErrorBadParameter;
  38. if (sem_wait(sema) != 0)
  39. return OMX_ErrorUndefined;
  40. FunctionOut();
  41. return OMX_ErrorNone;
  42. }
  43. OMX_ERRORTYPE SF_SemaphorePost(OMX_HANDLETYPE semaphoreHandle)
  44. {
  45. sem_t *sema = (sem_t *)semaphoreHandle;
  46. FunctionIn();
  47. LOG(SF_LOG_INFO,"SF_SemaphorePost %p\r\n", semaphoreHandle);
  48. if (sema == NULL)
  49. return OMX_ErrorBadParameter;
  50. if (sem_post(sema) != 0)
  51. return OMX_ErrorUndefined;
  52. FunctionOut();
  53. return OMX_ErrorNone;
  54. }
  55. OMX_ERRORTYPE SF_Set_SemaphoreCount(OMX_HANDLETYPE semaphoreHandle, OMX_S32 val)
  56. {
  57. sem_t *sema = (sem_t *)semaphoreHandle;
  58. if (sema == NULL)
  59. return OMX_ErrorBadParameter;
  60. if (sem_init(sema, 0, val) != 0)
  61. return OMX_ErrorUndefined;
  62. return OMX_ErrorNone;
  63. }
  64. OMX_ERRORTYPE SF_Get_SemaphoreCount(OMX_HANDLETYPE semaphoreHandle, OMX_S32 *val)
  65. {
  66. sem_t *sema = (sem_t *)semaphoreHandle;
  67. int semaVal = 0;
  68. if (sema == NULL)
  69. return OMX_ErrorBadParameter;
  70. if (sem_getvalue(sema, &semaVal) != 0)
  71. return OMX_ErrorUndefined;
  72. *val = (OMX_S32)semaVal;
  73. return OMX_ErrorNone;
  74. }