ls1c_public.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // 一些常用的、共用的接口
  2. #ifndef __OPENLOONGSON_PUBLIC_H
  3. #define __OPENLOONGSON_PUBLIC_H
  4. #include <stdio.h>
  5. // pmon提供的打印函数,见main()函数
  6. struct callvectors {
  7. int (*open) (char *, int, int);
  8. int (*close) (int);
  9. int (*read) (int, void *, int);
  10. int (*write) (int, void *, int);
  11. long long (*lseek) (int, long long, int);
  12. int (*printf) (const char *, ...);
  13. void (*cacheflush) (void);
  14. char *(*gets) (char *);
  15. };
  16. #define myprintf (*callvec->printf)
  17. #define mygets (*callvec->gets)
  18. extern struct callvectors *callvec;
  19. #define MIN(a, b) ((a) > (b) ? (b) : (a))
  20. #define MAX(a, b) ((a) > (b) ? (a) : (b))
  21. #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
  22. typedef enum
  23. {
  24. FALSE=0,
  25. TRUE=1
  26. }BOOL;
  27. /*
  28. * 将指定寄存器的指定位置1
  29. * @reg 寄存器地址
  30. * @bit 需要置1的那一bit
  31. */
  32. void reg_set_one_bit(volatile unsigned int *reg, unsigned int bit);
  33. /*
  34. * 将指定寄存器的指定位清零
  35. * @reg 寄存器地址
  36. * @bit 需要清零的那一bit
  37. */
  38. void reg_clr_one_bit(volatile unsigned int *reg, unsigned int bit);
  39. /*
  40. * 获取指定寄存器的指定位的值
  41. * @reg 寄存器地址
  42. * @bit 需要读取值的那一bit
  43. * @ret 指定位的值
  44. */
  45. unsigned int reg_get_bit(volatile unsigned int *reg, unsigned int bit);
  46. /*
  47. * 向寄存器中写入8bit(一个字节)数据
  48. * @data 待写入的数据
  49. * @addr 寄存器地址
  50. */
  51. void reg_write_8(unsigned char data, volatile unsigned char *addr);
  52. /*
  53. * 从寄存器读出8bit(一个字节)数据
  54. * @addr 寄存器地址
  55. * @ret 读出的数据
  56. */
  57. unsigned char reg_read_8(volatile unsigned char *addr);
  58. /*
  59. * 向寄存器中写一个32bit的数据
  60. * @data 待写入的数据
  61. * @addr 寄存器地址
  62. */
  63. void reg_write_32(unsigned int data, volatile unsigned int *addr);
  64. /*
  65. * 从寄存器读出一个32bit数据
  66. * @addr 寄存器地址
  67. * @ret 读出的数据
  68. */
  69. unsigned int reg_read_32(volatile unsigned int *addr);
  70. /**
  71. * ffs - find first bit set
  72. * @x: the word to search
  73. */
  74. int ls1c_ffs(int x);
  75. /*
  76. * fls - find last (most-significant) bit set
  77. * @x: the word to search
  78. *
  79. * This is defined the same way as ffs.
  80. * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
  81. */
  82. int ls1c_fls(int x);
  83. #endif