···100100 (obj_desc->field.region_obj->region.space_id ==101101 ACPI_ADR_SPACE_SMBUS102102 || obj_desc->field.region_obj->region.space_id ==103103+ ACPI_ADR_SPACE_GSBUS104104+ || obj_desc->field.region_obj->region.space_id ==103105 ACPI_ADR_SPACE_IPMI)) {104106 /*105105- * This is an SMBus or IPMI read. We must create a buffer to hold107107+ * This is an SMBus, GSBus or IPMI read. We must create a buffer to hold106108 * the data and then directly access the region handler.107109 *108108- * Note: Smbus protocol value is passed in upper 16-bits of Function110110+ * Note: SMBus and GSBus protocol value is passed in upper 16-bits of Function109111 */110112 if (obj_desc->field.region_obj->region.space_id ==111113 ACPI_ADR_SPACE_SMBUS) {112114 length = ACPI_SMBUS_BUFFER_SIZE;115115+ function =116116+ ACPI_READ | (obj_desc->field.attribute << 16);117117+ } else if (obj_desc->field.region_obj->region.space_id ==118118+ ACPI_ADR_SPACE_GSBUS) {119119+ length = ACPI_GSBUS_BUFFER_SIZE;113120 function =114121 ACPI_READ | (obj_desc->field.attribute << 16);115122 } else { /* IPMI */···255248 (obj_desc->field.region_obj->region.space_id ==256249 ACPI_ADR_SPACE_SMBUS257250 || obj_desc->field.region_obj->region.space_id ==251251+ ACPI_ADR_SPACE_GSBUS252252+ || obj_desc->field.region_obj->region.space_id ==258253 ACPI_ADR_SPACE_IPMI)) {259254 /*260260- * This is an SMBus or IPMI write. We will bypass the entire field255255+ * This is an SMBus, GSBus or IPMI write. We will bypass the entire field261256 * mechanism and handoff the buffer directly to the handler. For262257 * these address spaces, the buffer is bi-directional; on a write,263258 * return data is returned in the same buffer.264259 *265260 * Source must be a buffer of sufficient size:266266- * ACPI_SMBUS_BUFFER_SIZE or ACPI_IPMI_BUFFER_SIZE.261261+ * ACPI_SMBUS_BUFFER_SIZE, ACPI_GSBUS_BUFFER_SIZE, or ACPI_IPMI_BUFFER_SIZE.267262 *268268- * Note: SMBus protocol type is passed in upper 16-bits of Function263263+ * Note: SMBus and GSBus protocol type is passed in upper 16-bits of Function269264 */270265 if (source_desc->common.type != ACPI_TYPE_BUFFER) {271266 ACPI_ERROR((AE_INFO,272272- "SMBus or IPMI write requires Buffer, found type %s",267267+ "SMBus/IPMI/GenericSerialBus write requires Buffer, found type %s",273268 acpi_ut_get_object_type_name(source_desc)));274269275270 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);···282273 length = ACPI_SMBUS_BUFFER_SIZE;283274 function =284275 ACPI_WRITE | (obj_desc->field.attribute << 16);276276+ } else if (obj_desc->field.region_obj->region.space_id ==277277+ ACPI_ADR_SPACE_GSBUS) {278278+ length = ACPI_GSBUS_BUFFER_SIZE;279279+ function =280280+ ACPI_WRITE | (obj_desc->field.attribute << 16);285281 } else { /* IPMI */286282287283 length = ACPI_IPMI_BUFFER_SIZE;···295281296282 if (source_desc->buffer.length < length) {297283 ACPI_ERROR((AE_INFO,298298- "SMBus or IPMI write requires Buffer of length %u, found length %u",284284+ "SMBus/IPMI/GenericSerialBus write requires Buffer of length %u, found length %u",299285 length, source_desc->buffer.length));300286301287 return_ACPI_STATUS(AE_AML_BUFFER_LIMIT);
+2-1
drivers/acpi/acpica/exfldio.c
···131131 }132132133133 /*134134- * Exit now for SMBus or IPMI address space, it has a non-linear134134+ * Exit now for SMBus, GSBus or IPMI address space, it has a non-linear135135 * address space and the request cannot be directly validated136136 */137137 if (space_id == ACPI_ADR_SPACE_SMBUS ||138138+ space_id == ACPI_ADR_SPACE_GSBUS ||138139 space_id == ACPI_ADR_SPACE_IPMI) {139140140141 /* SMBus or IPMI has a non-linear address space */