/* * Point to the Byte3 */ 
/* Point to the Byte3 */  
acpi_rs_extended_irq_resource (	u8                              *byte_stream_buffer,	acpi_size                       *bytes_consumed,	u8                              **output_buffer,	acpi_size                       *structure_size){	u8                              *buffer = byte_stream_buffer;	struct acpi_resource            *output_struct = (void *) *output_buffer;	u16                             temp16 = 0;	u8                              temp8 = 0;	u8                              *temp_ptr;	u8                              index;	acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_ext_irq);	ACPI_FUNCTION_TRACE ("rs_extended_irq_resource");	/*	 * Point past the Descriptor to get the number of bytes consumed	 */	buffer += 1;	ACPI_MOVE_16_TO_16 (&temp16, buffer);	/* Validate minimum descriptor length */	if (temp16 < 6) {		return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);	}	*bytes_consumed = temp16 + 3;	output_struct->id = ACPI_RSTYPE_EXT_IRQ;	/*	 * Point to the Byte3	 */	buffer += 2;	temp8 = *buffer;	output_struct->data.extended_irq.producer_consumer = temp8 & 0x01;	/*	 * Check for Interrupt Mode	 *	 * The definition of an Extended IRQ changed between ACPI spec v1.0b	 * and ACPI spec 2.0 (section 6.4.3.6 in both).	 *	 * - Edge/Level are defined opposite in the table vs the headers	 */	output_struct->data.extended_irq.edge_level =			   (temp8 & 0x2) ? ACPI_EDGE_SENSITIVE : ACPI_LEVEL_SENSITIVE;	/*	 * Check Interrupt Polarity	 */	output_struct->data.extended_irq.active_high_low = (temp8 >> 2) & 0x1;	/*	 * Check for sharable	 */	output_struct->data.extended_irq.shared_exclusive = (temp8 >> 3) & 0x01;	/*	 * Point to Byte4 (IRQ Table length)	 */	buffer += 1;	temp8 = *buffer;	/* Must have at least one IRQ */	if (temp8 < 1) {		return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);	}	output_struct->data.extended_irq.number_of_interrupts = temp8;	/*	 * Add any additional structure size to properly calculate	 * the next pointer at the end of this function	 */	struct_size += (temp8 - 1) * 4;	/*	 * Point to Byte5 (First IRQ Number)	 */	buffer += 1;	/*	 * Cycle through every IRQ in the table	 */	for (index = 0; index < temp8; index++) {		ACPI_MOVE_32_TO_32 (			&output_struct->data.extended_irq.interrupts[index], buffer);		/* Point to the next IRQ */		buffer += 4;	}	/*	 * This will leave us pointing to the Resource Source Index	 * If it is present, then save it off and calculate the	 * pointer to where the null terminated string goes:	 * Each Interrupt takes 32-bits + the 5 bytes of the	 * stream that are default.	 *	 * Note: Some resource descriptors will have an additional null, so	 * we add 1 to the length.	 */	if (*bytes_consumed >		((acpi_size) output_struct->data.extended_irq.number_of_interrupts * 4) + (5 + 1)) {		/* Dereference the Index */		temp8 = *buffer;		output_struct->data.extended_irq.resource_source.index = (u32) temp8;		/* Point to the String */		buffer += 1;		/*		 * Point the String pointer to the end of this structure.		 */		output_struct->data.extended_irq.resource_source.string_ptr =				(char *)((char *) output_struct + struct_size);		temp_ptr = (u8 *) output_struct->data.extended_irq.resource_source.string_ptr;		/* Copy the string into the buffer */		index = 0;		while (0x00 != *buffer) {			*temp_ptr = *buffer;			temp_ptr += 1;			buffer += 1;			index += 1;		}		/*		 * Add the terminating null		 */		*temp_ptr = 0x00;		output_struct->data.extended_irq.resource_source.string_length = index + 1;		/*		 * In order for the struct_size to fall on a 32-bit boundary,		 * calculate the length of the string and expand the		 * struct_size to the next 32-bit boundary.		 */		temp8 = (u8) (index + 1);		struct_size += ACPI_ROUND_UP_to_32_bITS (temp8);	}	else {		output_struct->data.extended_irq.resource_source.index = 0x00;		output_struct->data.extended_irq.resource_source.string_length = 0;		output_struct->data.extended_irq.resource_source.string_ptr = NULL;	}	/*	 * Set the Length parameter	 */	output_struct->length = (u32) struct_size;	/*	 * Return the final size of the structure	 */	*structure_size = struct_size;	return_ACPI_STATUS (AE_OK);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/44f6c01242da4e162f28d8e1216a8c7a91174605/rsirq.c/clean/drivers/acpi/resources/rsirq.c