Hi Adam, 1. Which platform? * little-endian ARM * big-endian MIPS 2. The atomic element size is 16-bit? No idea about this question. 3. Maybe you should take a look at __be32 and __le32. * little-endian # 1 "arch/arm/include/asm/types.h" 1 # 1 "include/asm-generic/int-ll64.h" 1 # 17 "include/asm-generic/int-ll64.h" typedef __signed__ char __s8; typedef unsigned char __u8; typedef __signed__ short __s16; typedef unsigned short __u16; typedef __signed__ int __s32; typedef unsigned int __u32; # 168 "include/linux/types.h" typedef __u16 __le16; typedef __u16 __be16; typedef __u32 __le32; typedef __u32 __be32; * big-endian # 21 "arch/mips/include/asm/types.h" # 1 "include/asm-generic/int-ll64.h" 1 # 17 "include/asm-generic/int-ll64.h" typedef __signed__ char __s8; typedef unsigned char __u8; typedef __signed__ short __s16; typedef unsigned short __u16; typedef __signed__ int __s32; typedef unsigned int __u32; # 168 "include/linux/types.h" typedef __u16 __le16; typedef __u16 __be16; typedef __u32 __le32; typedef __u32 __be32; I'm using Linux 2.6.30. Regards, GC 2011/8/24 Adam Lee <adam8157@xxxxxxxxx>: > On Tue, Aug 09, 2011 at 03:25:52PM +0800, 陳國成 wrote: >> Please tell me the difference between using unsigned short and __be16 to >> declear a variable in a data structure. >> For example, in include/net/inet_sock.h, struct inet_sock is decleared as >> >> struct inet_sock { >> __be16 inet_dport; >> }; >> >> not >> >> struct inet_sock { >> unsigned short inet_dport; >> }; >> >> I think it has something to do with endianness. But I see that both __le16 and >> __be16 are unsigned short when using gcc with -E option for little-endian and >> big-endian platform. Can someone give me more information? >> >> * little-endian >> typedef unsigned short __u16; >> typedef __u16 __le16; >> typedef __u16 __be16; >> >> * big-endian >> typedef unsigned short __u16; >> typedef __u16 __le16; >> typedef __u16 __be16; >> > > Which platform? The atomic element size is 16-bit? Maybe you should take > a look at __be32 and __le32. > > FYI: This is in the kernel types.h > > ---- > #ifdef __CHECKER__ > #define __bitwise__ __attribute__((bitwise)) > #else > #define __bitwise__ > #endif > #ifdef __CHECK_ENDIAN__ > #define __bitwise __bitwise__ > #else > #define __bitwise > #endif > > typedef __u16 __bitwise __le16; > typedef __u16 __bitwise __be16; > ---- > > -- > Regards, > Adam Lee > -------------------------------------------------- > E-mail: adam8157@xxxxxxxxx > Website: http://www.adam8157.info > -------------------------------------------------- > _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies