ls1c_public.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. typedef enum
  22. {
  23. FALSE=0,
  24. TRUE=1
  25. }BOOL;
  26. /*
  27. * 将指定寄存器的指定位置1
  28. * @reg 寄存器地址
  29. * @bit 需要置1的那一bit
  30. */
  31. void reg_set_one_bit(volatile unsigned int *reg, unsigned int bit);
  32. /*
  33. * 将指定寄存器的指定位清零
  34. * @reg 寄存器地址
  35. * @bit 需要清零的那一bit
  36. */
  37. void reg_clr_one_bit(volatile unsigned int *reg, unsigned int bit);
  38. /*
  39. * 获取指定寄存器的指定位的值
  40. * @reg 寄存器地址
  41. * @bit 需要读取值的那一bit
  42. * @ret 指定位的值
  43. */
  44. unsigned int reg_get_bit(volatile unsigned int *reg, unsigned int bit);
  45. /*
  46. * 向寄存器中写一个32bit的数据
  47. * @data 待写入的数据
  48. * @addr 寄存器地址
  49. */
  50. void reg_write_32(unsigned int data, volatile unsigned int *addr);
  51. /*
  52. * 从寄存器读出一个32bit数据
  53. * @addr 寄存器地址
  54. * @ret 读出的数据
  55. */
  56. unsigned int reg_read_32(volatile unsigned int *addr);
  57. /**
  58. * ffs - find first bit set
  59. * @x: the word to search
  60. */
  61. int ls1c_ffs(int x);
  62. #endif