Home | History | Annotate | Download | only in netboot
      1 #ifndef	__OSDEP_H__
      2 #define __OSDEP_H__
      3 
      4 /*
      5  * This program is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU General Public License as
      7  * published by the Free Software Foundation; either version 2, or (at
      8  * your option) any later version.
      9  */
     10 
     11 #define	__LITTLE_ENDIAN		/* x86 */
     12 
     13 /* Taken from /usr/include/linux/hfs_sysdep.h */
     14 #if defined(__BIG_ENDIAN)
     15 #	if !defined(__constant_htonl)
     16 #		define __constant_htonl(x) (x)
     17 #	endif
     18 #	if !defined(__constant_htons)
     19 #		define __constant_htons(x) (x)
     20 #	endif
     21 #elif defined(__LITTLE_ENDIAN)
     22 #	if !defined(__constant_htonl)
     23 #		define __constant_htonl(x) \
     24         ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \
     25                              (((unsigned long int)(x) & 0x0000ff00U) <<  8) | \
     26                              (((unsigned long int)(x) & 0x00ff0000U) >>  8) | \
     27                              (((unsigned long int)(x) & 0xff000000U) >> 24)))
     28 #	endif
     29 #	if !defined(__constant_htons)
     30 #		define __constant_htons(x) \
     31         ((unsigned short int)((((unsigned short int)(x) & 0x00ff) << 8) | \
     32                               (((unsigned short int)(x) & 0xff00) >> 8)))
     33 #	endif
     34 #else
     35 #	error "Don't know if bytes are big- or little-endian!"
     36 #endif
     37 
     38 #define ntohl(x) \
     39 (__builtin_constant_p(x) ? \
     40  __constant_htonl((x)) : \
     41  __swap32(x))
     42 #define htonl(x) \
     43 (__builtin_constant_p(x) ? \
     44  __constant_htonl((x)) : \
     45  __swap32(x))
     46 #define ntohs(x) \
     47 (__builtin_constant_p(x) ? \
     48  __constant_htons((x)) : \
     49  __swap16(x))
     50 #define htons(x) \
     51 (__builtin_constant_p(x) ? \
     52  __constant_htons((x)) : \
     53  __swap16(x))
     54 
     55 static inline unsigned long int __swap32(unsigned long int x)
     56 {
     57 	__asm__("xchgb %b0,%h0\n\t"
     58 		"rorl $16,%0\n\t"
     59 		"xchgb %b0,%h0"
     60 		: "=q" (x)
     61 		: "0" (x));
     62 	return x;
     63 }
     64 
     65 static inline unsigned short int __swap16(unsigned short int x)
     66 {
     67 	__asm__("xchgb %b0,%h0"
     68 		: "=q" (x)
     69 		: "0" (x));
     70 	return x;
     71 }
     72 
     73 /* Make routines available to all */
     74 #define	swap32(x)	__swap32(x)
     75 #define	swap16(x)	__swap16(x)
     76 
     77 #include "linux-asm-io.h"
     78 
     79 typedef	unsigned long Address;
     80 
     81 /* ANSI prototyping macro */
     82 #ifdef	__STDC__
     83 #define	P(x)	x
     84 #else
     85 #define	P(x)	()
     86 #endif
     87 
     88 #endif
     89 
     90 /*
     91  * Local variables:
     92  *  c-basic-offset: 8
     93  * End:
     94  */
     95