mxc_lock.h 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /**
  2. * @file
  3. * @brief Exclusive access lock utility functions.
  4. */
  5. /* ****************************************************************************
  6. * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
  7. *
  8. * Permission is hereby granted, free of charge, to any person obtaining a
  9. * copy of this software and associated documentation files (the "Software"),
  10. * to deal in the Software without restriction, including without limitation
  11. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  12. * and/or sell copies of the Software, and to permit persons to whom the
  13. * Software is furnished to do so, subject to the following conditions:
  14. *
  15. * The above copyright notice and this permission notice shall be included
  16. * in all copies or substantial portions of the Software.
  17. *
  18. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19. * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  21. * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
  22. * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  23. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  24. * OTHER DEALINGS IN THE SOFTWARE.
  25. *
  26. * Except as contained in this notice, the name of Maxim Integrated
  27. * Products, Inc. shall not be used except as stated in the Maxim Integrated
  28. * Products, Inc. Branding Policy.
  29. *
  30. * The mere transfer of this software does not imply any licenses
  31. * of trade secrets, proprietary technology, copyrights, patents,
  32. * trademarks, maskwork rights, or any other form of intellectual
  33. * property whatsoever. Maxim Integrated Products, Inc. retains all
  34. * ownership rights.
  35. *
  36. * $Date: 2018-08-09 18:45:02 -0500 (Thu, 09 Aug 2018) $
  37. * $Revision: 36818 $
  38. *
  39. *************************************************************************** */
  40. /* Define to prevent redundant inclusion */
  41. #ifndef _MXC_LOCK_H_
  42. #define _MXC_LOCK_H_
  43. /* **** Includes **** */
  44. #include "mxc_config.h"
  45. #ifdef __cplusplus
  46. extern "C" {
  47. #endif
  48. /**
  49. * @ingroup syscfg
  50. * @defgroup mxc_lock_utilities Exclusive Access Locks
  51. * @brief Lock functions to obtain and release a variable for exclusive
  52. * access. These functions are marked interrupt safe if they are
  53. * interrupt safe.
  54. * @{
  55. */
  56. /* **** Definitions **** */
  57. /* **** Globals **** */
  58. /* **** Function Prototypes **** */
  59. /**
  60. * @brief Attempts to acquire the lock.
  61. * @details This in an interrupt safe function that can be used as a mutex.
  62. * The lock variable must remain in scope until the lock is
  63. * released. Will not block if another thread has already acquired
  64. * the lock.
  65. * @param lock Pointer to variable that is used for the lock.
  66. * @param value Value to be place in the lock. Can not be 0.
  67. *
  68. * @return #E_NO_ERROR if everything successful, #E_BUSY if lock is taken.
  69. */
  70. int mxc_get_lock(uint32_t *lock, uint32_t value);
  71. /**
  72. * @brief Free the given lock.
  73. * @param[in,out] lock Pointer to the variable used for the lock. When the lock
  74. * is free, the value pointed to by @p lock is set to zero.
  75. */
  76. void mxc_free_lock(uint32_t *lock);
  77. /**@} end of group mxc_lock_utilities */
  78. #ifdef __cplusplus
  79. }
  80. #endif
  81. #endif /* _MXC_LOCK_H_ */