util.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /**
  3. ******************************************************************************
  4. * @file util.c
  5. * @author StarFive Technology
  6. * @version V1.0
  7. * @date 06/25/2020
  8. * @brief
  9. ******************************************************************************
  10. * @copy
  11. *
  12. * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  13. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  14. * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
  15. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  16. * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  17. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  18. *
  19. * COPYRIGHT 2020 Shanghai StarFive Technology Co., Ltd.
  20. */
  21. #include "util.h"
  22. #include "comdef.h"
  23. //#include "stdio.h"
  24. #include "encoding.h"
  25. //unsigned int funcpll_432 = 0;
  26. //unsigned int osc_clk = 0;
  27. /*===========================================================================
  28. FUNCTION: sys_memcpy
  29. DESCRIPTION:
  30. copy one block memory to another position
  31. INPUT PARAMETER:
  32. void *p_des: destination address
  33. const void * p_src: source address
  34. unsigned long size: length of memory to copy (unit is byte)
  35. OUTPUT PARAMETER:
  36. RETURN VALUE:
  37. ===========================================================================*/
  38. extern unsigned int test_flag;
  39. void * sys_memcpy(void *p_des,const void * p_src,unsigned long size)
  40. {
  41. char *tmp = p_des;
  42. const char *s = p_src;
  43. while (size--)
  44. *tmp++ = *s++;
  45. return p_des;
  46. }
  47. int sys_memcmp(const void * cs,const void * ct,unsigned int count)
  48. {
  49. const unsigned char *su1, *su2;
  50. int res = 0;
  51. for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
  52. if ((res = *su1 - *su2) != 0)
  53. break;
  54. return res;
  55. }
  56. void * _memcpy(void * dest,const void *src,unsigned int count)
  57. {
  58. char *tmp = (char *) dest;
  59. const char *s = (char *) src;
  60. while (count--)
  61. *tmp++ = *s++;
  62. return dest;
  63. }
  64. /*===========================================================================
  65. FUNCTION: sys_memcpy_32
  66. DESCRIPTION:
  67. copy one block memory to another position
  68. caller guarantee the src/des address are DWORD allign
  69. INPUT PARAMETER:
  70. void *p_des: destination address
  71. const void * p_src: source address
  72. unsigned long size: length of memory to copy (unit is DWORD)
  73. OUTPUT PARAMETER:
  74. RETURN VALUE:
  75. ===========================================================================*/
  76. void sys_memcpy_32(void *p_des,const void * p_src,unsigned long size)
  77. {
  78. unsigned long i;
  79. for (i=0;i<size;i++)
  80. *((unsigned long*)p_des+i) = *((unsigned long*)p_src+i);
  81. }
  82. /*===========================================================================
  83. FUNCTION: sys_memset
  84. DESCRIPTION:
  85. fill memory with specifed value
  86. INPUT PARAMETER:
  87. void *p_des: destination address
  88. int c: value to set
  89. unsigned long size: length of memory
  90. OUTPUT PARAMETER:
  91. RETURN VALUE:
  92. ===========================================================================*/
  93. void sys_memset(void *p_des,unsigned char c,unsigned long size)
  94. {
  95. unsigned long i;
  96. for (i=0;i<size;i++)
  97. *((char*)p_des+i) = c;
  98. }
  99. /*===========================================================================
  100. FUNCTION: sys_memset32
  101. DESCRIPTION:
  102. fill memory with specifed value
  103. INPUT PARAMETER:
  104. void *p_des: destination address
  105. int c: value to set
  106. unsigned long size: length of memory in word(32bit)
  107. OUTPUT PARAMETER:
  108. RETURN VALUE:
  109. ===========================================================================*/
  110. void sys_memset32(void *p_des,int c,unsigned long size)
  111. {
  112. unsigned long i;
  113. for(i=0; i< size; i++)
  114. ((unsigned long*)p_des)[i] = c;
  115. }