sys.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /**
  3. ******************************************************************************
  4. * @file sys.c
  5. * @author StarFive Technology
  6. * @version V1.0
  7. * @date 07/10/2021
  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 "sys.h"
  22. #include "comdef.h"
  23. //unsigned int funcpll_432 = 0;
  24. //unsigned int osc_clk = 0;
  25. /*===========================================================================
  26. FUNCTION: sys_memcpy
  27. DESCRIPTION:
  28. copy one block memory to another position
  29. INPUT PARAMETER:
  30. void *p_des: destination address
  31. const void * p_src: source address
  32. unsigned long size: length of memory to copy (unit is byte)
  33. OUTPUT PARAMETER:
  34. RETURN VALUE:
  35. ===========================================================================*/
  36. void sys_memcpy(void *dest,const void * src,unsigned long count)
  37. {
  38. unsigned long *dl = (unsigned long *)dest, *sl = (unsigned long *)src;
  39. char *d8, *s8;
  40. if (src == dest)
  41. return dest;
  42. /* while all data is aligned (common case), copy a word at a time */
  43. if ( (((unsigned long)dest | (unsigned long)src) & (sizeof(*dl) - 1)) == 0) {
  44. while (count >= sizeof(*dl)) {
  45. *dl++ = *sl++;
  46. count -= sizeof(*dl);
  47. }
  48. }
  49. /* copy the reset one byte at a time */
  50. d8 = (char *)dl;
  51. s8 = (char *)sl;
  52. while (count--)
  53. *d8++ = *s8++;
  54. }
  55. int sys_memcmp(const void * cs,const void * ct,unsigned int count)
  56. {
  57. const unsigned char *su1, *su2;
  58. int res = 0;
  59. for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
  60. if ((res = *su1 - *su2) != 0)
  61. break;
  62. return res;
  63. }
  64. void * _memcpy(void * dest,const void *src,unsigned int count)
  65. {
  66. char *tmp = (char *) dest;
  67. const char *s = (char *) src;
  68. while (count--)
  69. *tmp++ = *s++;
  70. return dest;
  71. }
  72. /*===========================================================================
  73. FUNCTION: sys_memcpy_32
  74. DESCRIPTION:
  75. copy one block memory to another position
  76. caller guarantee the src/des address are DWORD allign
  77. INPUT PARAMETER:
  78. void *p_des: destination address
  79. const void * p_src: source address
  80. unsigned long size: length of memory to copy (unit is DWORD)
  81. OUTPUT PARAMETER:
  82. RETURN VALUE:
  83. ===========================================================================*/
  84. void sys_memcpy_32(void *p_des,const void * p_src,unsigned long size)
  85. {
  86. unsigned long i;
  87. for (i=0;i<size;i++)
  88. *((unsigned long*)p_des+i) = *((unsigned long*)p_src+i);
  89. }
  90. /*===========================================================================
  91. FUNCTION: sys_memset
  92. DESCRIPTION:
  93. fill memory with specifed value
  94. INPUT PARAMETER:
  95. void *p_des: destination address
  96. int c: value to set
  97. unsigned long size: length of memory
  98. OUTPUT PARAMETER:
  99. RETURN VALUE:
  100. ===========================================================================*/
  101. void sys_memset(void *p_des,unsigned char c,unsigned long size)
  102. {
  103. unsigned long i;
  104. for (i=0;i<size;i++)
  105. *((char*)p_des+i) = c;
  106. }
  107. /*===========================================================================
  108. FUNCTION: sys_memset32
  109. DESCRIPTION:
  110. fill memory with specifed value
  111. INPUT PARAMETER:
  112. void *p_des: destination address
  113. int c: value to set
  114. unsigned long size: length of memory in word(32bit)
  115. OUTPUT PARAMETER:
  116. RETURN VALUE:
  117. ===========================================================================*/
  118. void sys_memset32(void *p_des,int c,unsigned long size)
  119. {
  120. unsigned long i;
  121. for(i=0; i< size; i++)
  122. ((unsigned long*)p_des)[i] = c;
  123. }