@@ -411,13 +411,13 @@ static inline int queue_in_packet(struct amdtp_stream *s)
411411 amdtp_stream_get_max_payload (s ));
412412}
413413
414- static int handle_out_packet (struct amdtp_stream * s , unsigned int cycle ,
414+ static int handle_out_packet (struct amdtp_stream * s ,
415+ unsigned int payload_length , unsigned int cycle ,
415416 unsigned int index )
416417{
417418 __be32 * buffer ;
418419 unsigned int syt ;
419420 unsigned int data_blocks ;
420- unsigned int payload_length ;
421421 unsigned int pcm_frames ;
422422 struct snd_pcm_substream * pcm ;
423423
@@ -458,7 +458,7 @@ static int handle_out_packet(struct amdtp_stream *s, unsigned int cycle,
458458}
459459
460460static int handle_in_packet (struct amdtp_stream * s ,
461- unsigned int payload_quadlets , unsigned int cycle ,
461+ unsigned int payload_length , unsigned int cycle ,
462462 unsigned int index )
463463{
464464 __be32 * buffer ;
@@ -474,7 +474,7 @@ static int handle_in_packet(struct amdtp_stream *s,
474474 cip_header [0 ] = be32_to_cpu (buffer [0 ]);
475475 cip_header [1 ] = be32_to_cpu (buffer [1 ]);
476476
477- trace_in_packet (s , cycle , cip_header , payload_quadlets , index );
477+ trace_in_packet (s , cycle , cip_header , payload_length , index );
478478
479479 /*
480480 * This module supports 'Two-quadlet CIP header with SYT field'.
@@ -505,7 +505,7 @@ static int handle_in_packet(struct amdtp_stream *s,
505505
506506 /* Calculate data blocks */
507507 fdf = (cip_header [1 ] & CIP_FDF_MASK ) >> CIP_FDF_SHIFT ;
508- if (payload_quadlets < 3 ||
508+ if (payload_length < 12 ||
509509 (fmt == CIP_FMT_AM && fdf == AMDTP_FDF_NO_DATA )) {
510510 data_blocks = 0 ;
511511 } else {
@@ -521,7 +521,8 @@ static int handle_in_packet(struct amdtp_stream *s,
521521 if (s -> flags & CIP_WRONG_DBS )
522522 data_block_quadlets = s -> data_block_quadlets ;
523523
524- data_blocks = (payload_quadlets - 2 ) / data_block_quadlets ;
524+ data_blocks = (payload_length / 4 - 2 ) /
525+ data_block_quadlets ;
525526 }
526527
527528 /* Check data block counter continuity */
@@ -615,7 +616,7 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
615616
616617 for (i = 0 ; i < packets ; ++ i ) {
617618 cycle = increment_cycle_count (cycle , 1 );
618- if (handle_out_packet (s , cycle , i ) < 0 ) {
619+ if (handle_out_packet (s , 0 , cycle , i ) < 0 ) {
619620 s -> packet_index = -1 ;
620621 amdtp_stream_pcm_abort (s );
621622 return ;
@@ -631,7 +632,7 @@ static void in_stream_callback(struct fw_iso_context *context, u32 tstamp,
631632{
632633 struct amdtp_stream * s = private_data ;
633634 unsigned int i , packets ;
634- unsigned int payload_quadlets , max_payload_quadlets ;
635+ unsigned int payload_length , max_payload_length ;
635636 __be32 * headers = header ;
636637 u32 cycle ;
637638
@@ -647,22 +648,22 @@ static void in_stream_callback(struct fw_iso_context *context, u32 tstamp,
647648 cycle = decrement_cycle_count (cycle , packets );
648649
649650 /* For buffer-over-run prevention. */
650- max_payload_quadlets = amdtp_stream_get_max_payload (s ) / 4 ;
651+ max_payload_length = amdtp_stream_get_max_payload (s );
651652
652653 for (i = 0 ; i < packets ; i ++ ) {
653654 cycle = increment_cycle_count (cycle , 1 );
654655
655656 /* The number of quadlets in this packet */
656- payload_quadlets =
657- (be32_to_cpu (headers [i ]) >> ISO_DATA_LENGTH_SHIFT ) / 4 ;
658- if (payload_quadlets > max_payload_quadlets ) {
657+ payload_length =
658+ (be32_to_cpu (headers [i ]) >> ISO_DATA_LENGTH_SHIFT );
659+ if (payload_length > max_payload_length ) {
659660 dev_err (& s -> unit -> device ,
660- "Detect jumbo payload: %02x %02x \n" ,
661- payload_quadlets , max_payload_quadlets );
661+ "Detect jumbo payload: %04x %04x \n" ,
662+ payload_length , max_payload_length );
662663 break ;
663664 }
664665
665- if (handle_in_packet (s , payload_quadlets , cycle , i ) < 0 )
666+ if (handle_in_packet (s , payload_length , cycle , i ) < 0 )
666667 break ;
667668 }
668669
0 commit comments