[alsa-devel] endianness problems in fireworks/bebob_maudio

Clemens Ladisch clemens at ladisch.de
Sun Dec 7 22:24:02 CET 2014


Hi,

sparse complains:

sound/firewire/fireworks/fireworks_transaction.c:127:18: warning: restricted __be32 degrades to integer

        t = (struct snd_efw_transaction *)data;
        length = min_t(size_t, t->length * sizeof(t->length), length);

't->length' is still a big-endian value.  This means that the driver
ends up always using 'length'.


sound/firewire/bebob/bebob_maudio.c:100:17: warning: incorrect type in initializer (different base types)
sound/firewire/bebob/bebob_maudio.c:100:17:    expected restricted __be32
sound/firewire/bebob/bebob_maudio.c:100:17:    got int

        __be32 cues[3] = {
                MAUDIO_BOOTLOADER_CUE1,
                MAUDIO_BOOTLOADER_CUE2,
                MAUDIO_BOOTLOADER_CUE3
        };

        rcode = fw_run_transaction(device->card, TCODE_WRITE_BLOCK_REQUEST,
                                   device->node_id, device->generation,
                                   device->max_speed, BEBOB_ADDR_REG_REQ,
                                   cues, sizeof(cues));

The three MAUDIO_BOOTLOADER_CUEx values will end up as a different byte
sequence on big-endian machines.  The simplest way to have these twelve
bytes unchanged on the bus is to have a twelve-byte array in the driver.


Regards,
Clemens


More information about the Alsa-devel mailing list