I've never gotten my FireWire CDR working for my
PowerBook running a 2.6 kernel, although it works just
fine with older Linux kernels.
Looking in 2.6.4, directory drivers/ieee1394:
hpsb_packet::ack_code is of type char (see
ieee1394_core.h). Whether this is a signed or an
unsigned type is implementation-dependent. On x86 it's
signed; on ppc, it's unsigned.
The ACK-codes for internal use are defined as negative
numbers (see ieee1394.h).
The function hpsb_packet_success() (see
ieee1394_transactions.c) switches on ACK code; it
should return -EGAIN for the internal error codes, but
instead fails first with the message "got invalid ack
254 from node 65535 (tcode 0)" and then later with
"ieee1394: sbp2: Error logging into SBP-2 device -
login timed-out" and "sbp2: probe of 0001db0250003667-1
failed with error -16"
It appears that the ack code gets extended to an int
for the switch argument; "negative" numbers will be
sign-extended on some systems (so they will stay
negative), but zero-extended on others (so they are now
positive and not match any of the case labels). This
would explain that first error message.
Tested fix: make hpsb_packet::ack_code a signed char.
This gets rid of the "invalid ack" error message,
though things still don't work.
Logged In: YES
user_id=105550
The bug is still present in the 2.6.6 kernel. Please change
drivers/ieee1394/ieee1394_core.h, line 41:
/* These are core internal. */
signed char tlabel;
- char ack_code;
+ signed char ack_code;
char tcode;
This fixes at least the "invalid ack" bug when loading the
driver, although the problems connecting to an actual
external device remain.
Logged In: YES
user_id=943591
seem to need this