Subversion Repositories HelenOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  *  The PCI Library -- System-Dependent Stuff
  3.  *
  4.  *  Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
  5.  *
  6.  *  May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
  7.  *
  8.  *  Can be freely distributed and used under the terms of the GNU GPL.
  9.  */
  10.  
  11. #ifdef __GNUC__
  12. #define UNUSED __attribute__((unused))
  13. #define NONRET __attribute__((noreturn))
  14. #else
  15. #define UNUSED
  16. #define NONRET
  17. #define inline
  18. #endif
  19.  
  20. typedef u8 byte;
  21. typedef u16 word;
  22.  
  23. static inline void swap(u8 *x, u8 *y)
  24. {
  25.     u8 z = *x;
  26.     *x = *y;
  27.     *y = z;
  28. }
  29.  
  30. static inline u16 invert_endianess_16(u16 x)
  31. {
  32.     u8 *px = (u8 *)&x;
  33.     swap(&px[0], &px[1]);
  34.     return x;
  35. }
  36.  
  37. static inline u32 invert_endianess_32(u32 x)
  38. {
  39.     u8 *px = (u8 *)&x;
  40.     swap(&px[0], &px[3]);
  41.     swap(&px[1], &px[2]);
  42.     return x;
  43. }
  44.  
  45. #ifdef UARCH_sparc64
  46.     #define cpu_to_le16(x) (invert_endianess_16(x))
  47.     #define cpu_to_le32(x) (invert_endianess_32(x))
  48.     #define le16_to_cpu(x) (invert_endianess_16(x))
  49.     #define le32_to_cpu(x) (invert_endianess_32(x))
  50. #else
  51.     #define cpu_to_le16(x) (x)
  52.     #define cpu_to_le32(x) (x)
  53.     #define le16_to_cpu(x) (x)
  54.     #define le32_to_cpu(x) (x)
  55. #endif
  56.