debug_string(&p_ca_message->msg[4], length, 0); 
debug_string(&p_ca_message->msg[4], length, 0); /*	length is excluding tag & length	*/ 
static int ca_set_pmt(struct dst_state *state, struct ca_msg *p_ca_message, struct ca_msg *hw_buffer, u8 reply, u8 query){	u32 length = 0, count = 0;	u8 asn_1_words, program_header_length;	u16 program_info_length = 0, es_info_length = 0;	u32 hw_offset = 0, buf_offset = 0, i;	u8 dst_tag_length;	length = asn_1_decode(&p_ca_message->msg[3]);	dprintk("%s: CA Message length=[%d]\n", __FUNCTION__, length);	dprintk("%s: ASN.1 ", __FUNCTION__);	debug_string(&p_ca_message->msg[4], length, 0); // length does not include tag and length	init_buffer(hw_buffer->msg, length);	handle_dst_tag(state, p_ca_message, hw_buffer, length);	hw_offset = 7;	asn_1_words = 1; // just a hack to test, should compute this one	buf_offset = 3;	program_header_length = 6;	dst_tag_length = 7;//	debug_twinhan_ca_params(state, p_ca_message, hw_buffer, reply, query, length, hw_offset, buf_offset);//	dprintk("%s: Program Header(BUF)", __FUNCTION__);//	debug_string(&p_ca_message->msg[4], program_header_length, 0);//	dprintk("%s: Copying Program header\n", __FUNCTION__);	copy_string(hw_buffer->msg, p_ca_message->msg, hw_offset, (buf_offset + asn_1_words), program_header_length);	buf_offset += program_header_length, hw_offset += program_header_length;	modify_4_bits(hw_buffer->msg, (hw_offset - 2));	if (state->type_flags & DST_TYPE_HAS_INC_COUNT) {	// workaround		dprintk("%s: Probably an ASIC bug !!!\n", __FUNCTION__);		debug_string(hw_buffer->msg, (hw_offset + program_header_length), 0);		hw_buffer->msg[hw_offset - 1] += 1;	}//	dprintk("%s: Program Header(HW), Count=[%d]", __FUNCTION__, count);//	debug_string(hw_buffer->msg, hw_offset, 0);	program_info_length =  ((program_info_length | (p_ca_message->msg[buf_offset - 1] & 0x0f)) << 8) | p_ca_message->msg[buf_offset];	dprintk("%s: Program info length=[%02x]\n", __FUNCTION__, program_info_length);	if (program_info_length) {		count = copy_string(hw_buffer->msg, p_ca_message->msg, hw_offset, (buf_offset + 1), (program_info_length + 1) ); // copy next elem, not current		buf_offset += count, hw_offset += count;//		dprintk("%s: Program level ", __FUNCTION__);//		debug_string(hw_buffer->msg, hw_offset, 0);	}	buf_offset += 1;// hw_offset += 1;	for (i = buf_offset; i < length; i++) {//		dprintk("%s: Stream Header ", __FUNCTION__);		count = copy_string(hw_buffer->msg, p_ca_message->msg, hw_offset, buf_offset, 5);		modify_4_bits(hw_buffer->msg, (hw_offset + 3));		hw_offset += 5, buf_offset += 5, i += 4;//		debug_string(hw_buffer->msg, hw_offset, (hw_offset - 5));		es_info_length = ((es_info_length | (p_ca_message->msg[buf_offset - 1] & 0x0f)) << 8) | p_ca_message->msg[buf_offset];		dprintk("%s: ES info length=[%02x]\n", __FUNCTION__, es_info_length);		if (es_info_length) {			// copy descriptors @ STREAM level			dprintk("%s: Descriptors @ STREAM level...!!! \n", __FUNCTION__);		}	}	hw_buffer->msg[length + dst_tag_length] = dst_check_sum(hw_buffer->msg, (length + dst_tag_length));//	dprintk("%s: Total length=[%d], Checksum=[%02x]\n", __FUNCTION__, (length + dst_tag_length), hw_buffer->msg[length + dst_tag_length]);	debug_string(hw_buffer->msg, (length + dst_tag_length + 1), 0);	// dst tags also	write_to_8820(state, hw_buffer, (length + dst_tag_length + 1), reply);	// checksum	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/94b7410c8a2d23fad5937b326a0a9e8c5a876e2d/dst_ca.c/buggy/drivers/media/dvb/bt8xx/dst_ca.c