On 2007-06-26 18:20:35 (+0800), Li YanBo <dreamfly281@xxxxxxxxx> wrote: > hi all, > > I am try to define a hardware specific struct, it is like below: > > struct xxx { > __be32 pdu_cnt:6; > __be32 y:3; > __be32 wep_key:2; > __be32 uses_wep_key:1; > __be32 keep_alive:1; > __be32 buff_tail_addr:19; > > __be32 cts_11g:1; > __be32 rts_11g:1; > __be32 x:2; > __be32 frag_size:12; > __be32 payload_len:12; > __be32 frag_num:4; > } > > but I am confuse with how to assign the values to the fields > "buff_tail_addr" and "payload_len", I think there are two ways to > assign values to them, but I don't know which is right? > > eg: I declare a variable struct xxx X; > > 1: X.buff_tail_addr = 0x3456; X.payload_len = 0x20; > 2: X.buff_tail_addr = cpu_to_be32(0x3456); X.payload_len = > cpu_to_be16(0x20); > > There are two way I think to assign values. Could anyone tell me which > is right or both are wrong? I will be appreciate for any hints, thanks > in advance! > > BR > > lyb Disclaimer: I'm not exactly an expert, so someone tell me if I'm wrong. You'll need to use cpu_to_be32, to make sure the values you assign are big endian too. You'll need to do this for every field larger than 8 bits (as endianness is not an issue if there's only one byte). You should be able to test this if you write a small program to populate that struct and then dump it byte per byte (or just use gdb to see the content). Kristof - To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html