diff options
Diffstat (limited to 'drivers/acpi/acpica/rscalc.c')
| -rw-r--r-- | drivers/acpi/acpica/rscalc.c | 139 | 
1 files changed, 139 insertions, 0 deletions
| diff --git a/drivers/acpi/acpica/rscalc.c b/drivers/acpi/acpica/rscalc.c index 74e47f829ccb..659fb718504a 100644 --- a/drivers/acpi/acpica/rscalc.c +++ b/drivers/acpi/acpica/rscalc.c @@ -340,6 +340,22 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,  			break; +		case ACPI_RESOURCE_TYPE_PIN_FUNCTION: + +			total_size = (acpi_rs_length)(total_size + +						      (resource->data. +						       pin_function. +						       pin_table_length * 2) + +						      resource->data. +						      pin_function. +						      resource_source. +						      string_length + +						      resource->data. +						      pin_function. +						      vendor_length); + +			break; +  		case ACPI_RESOURCE_TYPE_SERIAL_BUS:  			total_size = @@ -359,6 +375,67 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,  			break; +		case ACPI_RESOURCE_TYPE_PIN_CONFIG: + +			total_size = (acpi_rs_length)(total_size + +						      (resource->data. +						       pin_config. +						       pin_table_length * 2) + +						      resource->data.pin_config. +						      resource_source. +						      string_length + +						      resource->data.pin_config. +						      vendor_length); + +			break; + +		case ACPI_RESOURCE_TYPE_PIN_GROUP: + +			total_size = (acpi_rs_length)(total_size + +						      (resource->data.pin_group. +						       pin_table_length * 2) + +						      resource->data.pin_group. +						      resource_label. +						      string_length + +						      resource->data.pin_group. +						      vendor_length); + +			break; + +		case ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION: + +			total_size = (acpi_rs_length)(total_size + +						      resource->data. +						      pin_group_function. +						      resource_source. +						      string_length + +						      resource->data. +						      pin_group_function. +						      resource_source_label. +						      string_length + +						      resource->data. +						      pin_group_function. +						      vendor_length); + +			break; + +		case ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG: + +			total_size = (acpi_rs_length)(total_size + +						      resource->data. +						      pin_group_config. +						      resource_source. +						      string_length + +						      resource->data. +						      pin_group_config. +						      resource_source_label. +						      string_length + +						      resource->data. +						      pin_group_config. +						      vendor_length); + +			break; +  		default:  			break; @@ -537,6 +614,24 @@ acpi_rs_get_list_length(u8 *aml_buffer,  			}  			break; +		case ACPI_RESOURCE_NAME_PIN_FUNCTION: + +			/* Vendor data is optional */ + +			if (aml_resource->pin_function.vendor_length) { +				extra_struct_bytes += +				    aml_resource->pin_function.vendor_offset - +				    aml_resource->pin_function. +				    pin_table_offset + +				    aml_resource->pin_function.vendor_length; +			} else { +				extra_struct_bytes += +				    aml_resource->large_header.resource_length + +				    sizeof(struct aml_resource_large_header) - +				    aml_resource->pin_function.pin_table_offset; +			} +			break; +  		case ACPI_RESOURCE_NAME_SERIAL_BUS:  			minimum_aml_resource_length = @@ -547,6 +642,50 @@ acpi_rs_get_list_length(u8 *aml_buffer,  			    minimum_aml_resource_length;  			break; +		case ACPI_RESOURCE_NAME_PIN_CONFIG: + +			/* Vendor data is optional */ + +			if (aml_resource->pin_config.vendor_length) { +				extra_struct_bytes += +				    aml_resource->pin_config.vendor_offset - +				    aml_resource->pin_config.pin_table_offset + +				    aml_resource->pin_config.vendor_length; +			} else { +				extra_struct_bytes += +				    aml_resource->large_header.resource_length + +				    sizeof(struct aml_resource_large_header) - +				    aml_resource->pin_config.pin_table_offset; +			} +			break; + +		case ACPI_RESOURCE_NAME_PIN_GROUP: + +			extra_struct_bytes += +			    aml_resource->pin_group.vendor_offset - +			    aml_resource->pin_group.pin_table_offset + +			    aml_resource->pin_group.vendor_length; + +			break; + +		case ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION: + +			extra_struct_bytes += +			    aml_resource->pin_group_function.vendor_offset - +			    aml_resource->pin_group_function.res_source_offset + +			    aml_resource->pin_group_function.vendor_length; + +			break; + +		case ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG: + +			extra_struct_bytes += +			    aml_resource->pin_group_config.vendor_offset - +			    aml_resource->pin_group_config.res_source_offset + +			    aml_resource->pin_group_config.vendor_length; + +			break; +  		default:  			break; |