lkml.org 
[lkml]   [2006]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 0/3] New firewire stack
    Benjamin Herrenschmidt wrote:
    > On Tue, 2006-12-05 at 00:22 -0500, Kristian Høgsberg wrote:
    >> Hi,
    >>
    >> I'm announcing an alternative firewire stack that I've been working on
    >> the last few weeks. I'm aiming to implement feature parity with the
    >> current firewire stack, but not necessarily interface compatibility.
    >> For now, I have the low-level OHCI driver done, the mid-level
    >> transaction logic done, and the SBP-2 (storage) driver is basically
    >> done. What's missing is a streaming interface (in progress) to allow
    >> reception and transmission of isochronous data and a userspace
    >> interface for controlling devices (much like raw1394 or libusb for
    >> usb). I'm working out of this git repository:
    >
    > A very very very quick look at the code shows that:
    >
    > - It looks nice / clear

    Great, good to hear.

    > - It's horribly broken in at least two area :
    >
    > DO NOT USE BITFIELDS FOR DATA ON THE WIRE !!!
    >
    > and
    >
    > Where do you handle endianness ? (no need to shout for
    > that one).

    Well, the code isn't big-endian safe yet, but the only place where I expect to
    have to fix this is in fw-ohci.c. I need to figure out how I want to set up
    the OHCI controller to this - it has a couple of bits to control this. All
    data outside the low-level driver is cpu-endian, with the exception of payload
    data. IEEE1394 doesn't specify an endianness for the payload data, even
    though most protocols use big-endian. Some protocols have a mix of
    byte-arrays and be32 words (eg SBP-2) so it's up to the protocol to byteswap
    its data as appropriate.

    > (Or in general, do not use bitfields period ....)
    >
    > bitfields format is not guaranteed, and is not endian consistent.

    Ok... I was planning to make big-endian versions of the structs so that the
    endian issue would be solved. But if the bit layout is not consistent, I
    guess bitfields are useless for wire formats. I didn't know that though, I
    thought the C standard specified that the compiler should allocate bits out of
    a word using the lower bits first. Is the problem that it allocates them out
    of a 64-bit word on 64-bit platforms?

    cheers,
    Kristian

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-12-05 07:27    [W:5.245 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site