diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5013-drm-amd-display-flatten-aux_engine-and-engine.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/5013-drm-amd-display-flatten-aux_engine-and-engine.patch | 665 |
1 files changed, 665 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5013-drm-amd-display-flatten-aux_engine-and-engine.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5013-drm-amd-display-flatten-aux_engine-and-engine.patch new file mode 100644 index 00000000..2149dd7c --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5013-drm-amd-display-flatten-aux_engine-and-engine.patch @@ -0,0 +1,665 @@ +From 203490d30f7a7fd075207aece8f802e23b462aa6 Mon Sep 17 00:00:00 2001 +From: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +Date: Thu, 28 Jun 2018 17:50:05 -0400 +Subject: [PATCH 5013/5725] drm/amd/display: flatten aux_engine and engine + +[Why] +engine and aux_engine are unnecessary layers we want to remove this +layer. + +[How] +flatten engine and aux engine structs into one struct called +aux_engine and remove all references to the engine struct. + +Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +Reviewed-by: Harry Wentland <Harry.Wentland@amd.com> +Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c | 8 +- + drivers/gpu/drm/amd/display/dc/dce/dce_aux.c | 55 ++++----- + drivers/gpu/drm/amd/display/dc/dce/dce_aux.h | 4 +- + .../drm/amd/display/dc/dce100/dce100_resource.c | 4 +- + .../drm/amd/display/dc/dce110/dce110_resource.c | 4 +- + .../drm/amd/display/dc/dce112/dce112_resource.c | 4 +- + .../drm/amd/display/dc/dce120/dce120_resource.c | 4 +- + .../gpu/drm/amd/display/dc/dce80/dce80_resource.c | 4 +- + .../gpu/drm/amd/display/dc/dcn10/dcn10_resource.c | 4 +- + drivers/gpu/drm/amd/display/dc/inc/core_types.h | 2 +- + drivers/gpu/drm/amd/display/dc/inc/hw/aux_engine.h | 127 ++++++++++++++++----- + drivers/gpu/drm/amd/display/dc/inc/hw/engine.h | 106 ----------------- + 12 files changed, 140 insertions(+), 186 deletions(-) + delete mode 100644 drivers/gpu/drm/amd/display/dc/inc/hw/engine.h + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c +index 4019fe07..8def0d9 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c +@@ -33,7 +33,6 @@ + #include "include/vector.h" + #include "core_types.h" + #include "dc_link_ddc.h" +-#include "engine.h" + #include "aux_engine.h" + + #define AUX_POWER_UP_WA_DELAY 500 +@@ -640,7 +639,6 @@ int dc_link_aux_transfer(struct ddc_service *ddc, + enum i2caux_transaction_action action) + { + struct ddc *ddc_pin = ddc->ddc_pin; +- struct engine *engine; + struct aux_engine *aux_engine; + enum aux_channel_operation_result operation_result; + struct aux_request_transaction_data aux_req; +@@ -652,8 +650,8 @@ int dc_link_aux_transfer(struct ddc_service *ddc, + memset(&aux_req, 0, sizeof(aux_req)); + memset(&aux_rep, 0, sizeof(aux_rep)); + +- engine = ddc->ctx->dc->res_pool->engines[ddc_pin->pin_data->en]; +- aux_engine = engine->funcs->acquire(engine, ddc_pin); ++ aux_engine = ddc->ctx->dc->res_pool->engines[ddc_pin->pin_data->en]; ++ aux_engine->funcs->acquire(aux_engine, ddc_pin); + + aux_req.type = type; + aux_req.action = action; +@@ -685,7 +683,7 @@ int dc_link_aux_transfer(struct ddc_service *ddc, + res = -1; + break; + } +- aux_engine->base.funcs->release_engine(&aux_engine->base); ++ aux_engine->funcs->release_engine(aux_engine); + return res; + } + +diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c +index b28e212..3f5b2e6 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c ++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c +@@ -28,12 +28,12 @@ + #include "dce/dce_11_0_sh_mask.h" + + #define CTX \ +- aux110->base.base.ctx ++ aux110->base.ctx + #define REG(reg_name)\ + (aux110->regs->reg_name) + + #define DC_LOGGER \ +- engine->base.ctx->logger ++ engine->ctx->logger + + #include "reg_helper.h" + +@@ -51,9 +51,9 @@ enum { + AUX_DEFER_RETRY_COUNTER = 6 + }; + static void release_engine( +- struct engine *engine) ++ struct aux_engine *engine) + { +- struct aux_engine_dce110 *aux110 = FROM_ENGINE(engine); ++ struct aux_engine_dce110 *aux110 = FROM_AUX_ENGINE(engine); + + dal_ddc_close(engine->ddc); + +@@ -827,22 +827,21 @@ static bool end_of_transaction_command( + + /* according Syed, it does not need now DoDummyMOT */ + } +-bool submit_request( +- struct engine *engine, ++static bool submit_request( ++ struct aux_engine *engine, + struct i2caux_transaction_request *request, + bool middle_of_transaction) + { +- struct aux_engine *aux_engine = FROM_AUX_ENGINE_ENGINE(engine); + + bool result; + bool mot_used = true; + + switch (request->operation) { + case I2CAUX_TRANSACTION_READ: +- result = read_command(aux_engine, request, mot_used); ++ result = read_command(engine, request, mot_used); + break; + case I2CAUX_TRANSACTION_WRITE: +- result = write_command(aux_engine, request, mot_used); ++ result = write_command(engine, request, mot_used); + break; + default: + result = false; +@@ -854,45 +853,45 @@ bool submit_request( + */ + + if (!middle_of_transaction || !result) +- end_of_transaction_command(aux_engine, request); ++ end_of_transaction_command(engine, request); + + /* mask AUX interrupt */ + + return result; + } + enum i2caux_engine_type get_engine_type( +- const struct engine *engine) ++ const struct aux_engine *engine) + { + return I2CAUX_ENGINE_TYPE_AUX; + } + +-static struct aux_engine *acquire( +- struct engine *engine, ++static bool acquire( ++ struct aux_engine *engine, + struct ddc *ddc) + { +- struct aux_engine *aux_engine = FROM_AUX_ENGINE_ENGINE(engine); ++ + enum gpio_result result; + +- if (aux_engine->funcs->is_engine_available) { ++ if (engine->funcs->is_engine_available) { + /*check whether SW could use the engine*/ +- if (!aux_engine->funcs->is_engine_available(aux_engine)) +- return NULL; ++ if (!engine->funcs->is_engine_available(engine)) ++ return false; + } + + result = dal_ddc_open(ddc, GPIO_MODE_HARDWARE, + GPIO_DDC_CONFIG_TYPE_MODE_AUX); + + if (result != GPIO_RESULT_OK) +- return NULL; ++ return false; + +- if (!aux_engine->funcs->acquire_engine(aux_engine)) { ++ if (!engine->funcs->acquire_engine(engine)) { + dal_ddc_close(ddc); +- return NULL; ++ return false; + } + + engine->ddc = ddc; + +- return aux_engine; ++ return true; + } + + static const struct aux_engine_funcs aux_engine_funcs = { +@@ -902,9 +901,6 @@ static const struct aux_engine_funcs aux_engine_funcs = { + .read_channel_reply = read_channel_reply, + .get_channel_status = get_channel_status, + .is_engine_available = is_engine_available, +-}; +- +-static const struct engine_funcs engine_funcs = { + .release_engine = release_engine, + .destroy_engine = dce110_engine_destroy, + .submit_request = submit_request, +@@ -912,10 +908,10 @@ static const struct engine_funcs engine_funcs = { + .acquire = acquire, + }; + +-void dce110_engine_destroy(struct engine **engine) ++void dce110_engine_destroy(struct aux_engine **engine) + { + +- struct aux_engine_dce110 *engine110 = FROM_ENGINE(*engine); ++ struct aux_engine_dce110 *engine110 = FROM_AUX_ENGINE(*engine); + + kfree(engine110); + *engine = NULL; +@@ -927,13 +923,12 @@ struct aux_engine *dce110_aux_engine_construct(struct aux_engine_dce110 *aux_eng + uint32_t timeout_period, + const struct dce110_aux_registers *regs) + { +- aux_engine110->base.base.ddc = NULL; +- aux_engine110->base.base.ctx = ctx; ++ aux_engine110->base.ddc = NULL; ++ aux_engine110->base.ctx = ctx; + aux_engine110->base.delay = 0; + aux_engine110->base.max_defer_write_retry = 0; +- aux_engine110->base.base.funcs = &engine_funcs; + aux_engine110->base.funcs = &aux_engine_funcs; +- aux_engine110->base.base.inst = inst; ++ aux_engine110->base.inst = inst; + aux_engine110->timeout_period = timeout_period; + aux_engine110->regs = regs; + +diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.h b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.h +index c6b2aec..f7caab8 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.h ++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.h +@@ -103,9 +103,9 @@ struct aux_engine *dce110_aux_engine_construct( + uint32_t timeout_period, + const struct dce110_aux_registers *regs); + +-void dce110_engine_destroy(struct engine **engine); ++void dce110_engine_destroy(struct aux_engine **engine); + + bool dce110_aux_engine_acquire( +- struct engine *aux_engine, ++ struct aux_engine *aux_engine, + struct ddc *ddc); + #endif +diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c +index c34c953..fd2bdae 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c +@@ -586,7 +586,7 @@ struct output_pixel_processor *dce100_opp_create( + return &opp->base; + } + +-struct engine *dce100_aux_engine_create( ++struct aux_engine *dce100_aux_engine_create( + struct dc_context *ctx, + uint32_t inst) + { +@@ -600,7 +600,7 @@ struct engine *dce100_aux_engine_create( + SW_AUX_TIMEOUT_PERIOD_MULTIPLIER * AUX_TIMEOUT_PERIOD, + &aux_engine_regs[inst]); + +- return &aux_engine->base.base; ++ return &aux_engine->base; + } + + struct clock_source *dce100_clock_source_create( +diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c +index 4a665a2..e5e9e92 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c +@@ -604,7 +604,7 @@ static struct output_pixel_processor *dce110_opp_create( + return &opp->base; + } + +-struct engine *dce110_aux_engine_create( ++struct aux_engine *dce110_aux_engine_create( + struct dc_context *ctx, + uint32_t inst) + { +@@ -618,7 +618,7 @@ struct engine *dce110_aux_engine_create( + SW_AUX_TIMEOUT_PERIOD_MULTIPLIER * AUX_TIMEOUT_PERIOD, + &aux_engine_regs[inst]); + +- return &aux_engine->base.base; ++ return &aux_engine->base; + } + + struct clock_source *dce110_clock_source_create( +diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c +index caf90ae..84a05ff 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c +@@ -604,7 +604,7 @@ struct output_pixel_processor *dce112_opp_create( + return &opp->base; + } + +-struct engine *dce112_aux_engine_create( ++struct aux_engine *dce112_aux_engine_create( + struct dc_context *ctx, + uint32_t inst) + { +@@ -618,7 +618,7 @@ struct engine *dce112_aux_engine_create( + SW_AUX_TIMEOUT_PERIOD_MULTIPLIER * AUX_TIMEOUT_PERIOD, + &aux_engine_regs[inst]); + +- return &aux_engine->base.base; ++ return &aux_engine->base; + } + + struct clock_source *dce112_clock_source_create( +diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c +index f7d02f2..61d8e22 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c +@@ -376,7 +376,7 @@ struct output_pixel_processor *dce120_opp_create( + ctx, inst, &opp_regs[inst], &opp_shift, &opp_mask); + return &opp->base; + } +-struct engine *dce120_aux_engine_create( ++struct aux_engine *dce120_aux_engine_create( + struct dc_context *ctx, + uint32_t inst) + { +@@ -390,7 +390,7 @@ struct engine *dce120_aux_engine_create( + SW_AUX_TIMEOUT_PERIOD_MULTIPLIER * AUX_TIMEOUT_PERIOD, + &aux_engine_regs[inst]); + +- return &aux_engine->base.base; ++ return &aux_engine->base; + } + + static const struct bios_registers bios_regs = { +diff --git a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c +index 6fb33ad..dc9f3e9 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c +@@ -464,7 +464,7 @@ static struct output_pixel_processor *dce80_opp_create( + return &opp->base; + } + +-struct engine *dce80_aux_engine_create( ++struct aux_engine *dce80_aux_engine_create( + struct dc_context *ctx, + uint32_t inst) + { +@@ -478,7 +478,7 @@ struct engine *dce80_aux_engine_create( + SW_AUX_TIMEOUT_PERIOD_MULTIPLIER * AUX_TIMEOUT_PERIOD, + &aux_engine_regs[inst]); + +- return &aux_engine->base.base; ++ return &aux_engine->base; + } + + static struct stream_encoder *dce80_stream_encoder_create( +diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c +index c39934f..6b44ed3 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c +@@ -594,7 +594,7 @@ static struct output_pixel_processor *dcn10_opp_create( + return &opp->base; + } + +-struct engine *dcn10_aux_engine_create( ++struct aux_engine *dcn10_aux_engine_create( + struct dc_context *ctx, + uint32_t inst) + { +@@ -608,7 +608,7 @@ struct engine *dcn10_aux_engine_create( + SW_AUX_TIMEOUT_PERIOD_MULTIPLIER * AUX_TIMEOUT_PERIOD, + &aux_engine_regs[inst]); + +- return &aux_engine->base.base; ++ return &aux_engine->base; + } + + static struct mpc *dcn10_mpc_create(struct dc_context *ctx) +diff --git a/drivers/gpu/drm/amd/display/dc/inc/core_types.h b/drivers/gpu/drm/amd/display/dc/inc/core_types.h +index 3b7e9aa..b4d3300 100644 +--- a/drivers/gpu/drm/amd/display/dc/inc/core_types.h ++++ b/drivers/gpu/drm/amd/display/dc/inc/core_types.h +@@ -138,7 +138,7 @@ struct resource_pool { + struct output_pixel_processor *opps[MAX_PIPES]; + struct timing_generator *timing_generators[MAX_PIPES]; + struct stream_encoder *stream_enc[MAX_PIPES * 2]; +- struct engine *engines[MAX_PIPES]; ++ struct aux_engine *engines[MAX_PIPES]; + struct hubbub *hubbub; + struct mpc *mpc; + struct pp_smu_funcs_rv *pp_smu; +diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/aux_engine.h b/drivers/gpu/drm/amd/display/dc/inc/hw/aux_engine.h +index 06d7e5d..e79cd4e 100644 +--- a/drivers/gpu/drm/amd/display/dc/inc/hw/aux_engine.h ++++ b/drivers/gpu/drm/amd/display/dc/inc/hw/aux_engine.h +@@ -26,46 +26,72 @@ + #ifndef __DAL_AUX_ENGINE_H__ + #define __DAL_AUX_ENGINE_H__ + +-#include "engine.h" ++#include "dc_ddc_types.h" + #include "include/i2caux_interface.h" + +-struct aux_engine; +-union aux_config; +-struct aux_engine_funcs { +- void (*destroy)( +- struct aux_engine **ptr); +- bool (*acquire_engine)( +- struct aux_engine *engine); +- void (*configure)( +- struct aux_engine *engine, +- union aux_config cfg); +- void (*submit_channel_request)( +- struct aux_engine *engine, +- struct aux_request_transaction_data *request); +- void (*process_channel_reply)( +- struct aux_engine *engine, +- struct aux_reply_transaction_data *reply); +- int (*read_channel_reply)( +- struct aux_engine *engine, +- uint32_t size, +- uint8_t *buffer, +- uint8_t *reply_result, +- uint32_t *sw_status); +- enum aux_channel_operation_result (*get_channel_status)( +- struct aux_engine *engine, +- uint8_t *returned_bytes); +- bool (*is_engine_available)(struct aux_engine *engine); ++enum i2caux_transaction_operation { ++ I2CAUX_TRANSACTION_READ, ++ I2CAUX_TRANSACTION_WRITE ++}; ++ ++enum i2caux_transaction_address_space { ++ I2CAUX_TRANSACTION_ADDRESS_SPACE_I2C = 1, ++ I2CAUX_TRANSACTION_ADDRESS_SPACE_DPCD ++}; ++ ++struct i2caux_transaction_payload { ++ enum i2caux_transaction_address_space address_space; ++ uint32_t address; ++ uint32_t length; ++ uint8_t *data; ++}; ++ ++enum i2caux_transaction_status { ++ I2CAUX_TRANSACTION_STATUS_UNKNOWN = (-1L), ++ I2CAUX_TRANSACTION_STATUS_SUCCEEDED, ++ I2CAUX_TRANSACTION_STATUS_FAILED_CHANNEL_BUSY, ++ I2CAUX_TRANSACTION_STATUS_FAILED_TIMEOUT, ++ I2CAUX_TRANSACTION_STATUS_FAILED_PROTOCOL_ERROR, ++ I2CAUX_TRANSACTION_STATUS_FAILED_NACK, ++ I2CAUX_TRANSACTION_STATUS_FAILED_INCOMPLETE, ++ I2CAUX_TRANSACTION_STATUS_FAILED_OPERATION, ++ I2CAUX_TRANSACTION_STATUS_FAILED_INVALID_OPERATION, ++ I2CAUX_TRANSACTION_STATUS_FAILED_BUFFER_OVERFLOW, ++ I2CAUX_TRANSACTION_STATUS_FAILED_HPD_DISCON ++}; ++ ++struct i2caux_transaction_request { ++ enum i2caux_transaction_operation operation; ++ struct i2caux_transaction_payload payload; ++ enum i2caux_transaction_status status; ++}; ++ ++enum i2caux_engine_type { ++ I2CAUX_ENGINE_TYPE_UNKNOWN = (-1L), ++ I2CAUX_ENGINE_TYPE_AUX, ++ I2CAUX_ENGINE_TYPE_I2C_DDC_HW, ++ I2CAUX_ENGINE_TYPE_I2C_GENERIC_HW, ++ I2CAUX_ENGINE_TYPE_I2C_SW ++}; ++ ++enum i2c_default_speed { ++ I2CAUX_DEFAULT_I2C_HW_SPEED = 50, ++ I2CAUX_DEFAULT_I2C_SW_SPEED = 50 + }; +-struct engine; ++ ++union aux_config; ++ + struct aux_engine { +- struct engine base; ++ uint32_t inst; ++ struct ddc *ddc; ++ struct dc_context *ctx; + const struct aux_engine_funcs *funcs; + /* following values are expressed in milliseconds */ + uint32_t delay; + uint32_t max_defer_write_retry; +- + bool acquire_reset; + }; ++ + struct read_command_context { + uint8_t *buffer; + uint32_t current_read_length; +@@ -86,6 +112,7 @@ struct read_command_context { + bool transaction_complete; + bool operation_succeeded; + }; ++ + struct write_command_context { + bool mot; + +@@ -110,4 +137,44 @@ struct write_command_context { + bool transaction_complete; + bool operation_succeeded; + }; ++ ++ ++struct aux_engine_funcs { ++ void (*destroy)( ++ struct aux_engine **ptr); ++ bool (*acquire_engine)( ++ struct aux_engine *engine); ++ void (*configure)( ++ struct aux_engine *engine, ++ union aux_config cfg); ++ void (*submit_channel_request)( ++ struct aux_engine *engine, ++ struct aux_request_transaction_data *request); ++ void (*process_channel_reply)( ++ struct aux_engine *engine, ++ struct aux_reply_transaction_data *reply); ++ int (*read_channel_reply)( ++ struct aux_engine *engine, ++ uint32_t size, ++ uint8_t *buffer, ++ uint8_t *reply_result, ++ uint32_t *sw_status); ++ enum aux_channel_operation_result (*get_channel_status)( ++ struct aux_engine *engine, ++ uint8_t *returned_bytes); ++ bool (*is_engine_available)(struct aux_engine *engine); ++ enum i2caux_engine_type (*get_engine_type)( ++ const struct aux_engine *engine); ++ bool (*acquire)( ++ struct aux_engine *engine, ++ struct ddc *ddc); ++ bool (*submit_request)( ++ struct aux_engine *engine, ++ struct i2caux_transaction_request *request, ++ bool middle_of_transaction); ++ void (*release_engine)( ++ struct aux_engine *engine); ++ void (*destroy_engine)( ++ struct aux_engine **engine); ++}; + #endif +diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/engine.h b/drivers/gpu/drm/amd/display/dc/inc/hw/engine.h +deleted file mode 100644 +index 1f5476f..0000000 +--- a/drivers/gpu/drm/amd/display/dc/inc/hw/engine.h ++++ /dev/null +@@ -1,106 +0,0 @@ +-/* +- * Copyright 2012-15 Advanced Micro Devices, Inc. +- * +- * Permission is hereby granted, free of charge, to any person obtaining a +- * copy of this software and associated documentation files (the "Software"), +- * to deal in the Software without restriction, including without limitation +- * the rights to use, copy, modify, merge, publish, distribute, sublicense, +- * and/or sell copies of the Software, and to permit persons to whom the +- * Software is furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +- * OTHER DEALINGS IN THE SOFTWARE. +- * +- * Authors: AMD +- * +- */ +- +-#ifndef __DAL_ENGINE_H__ +-#define __DAL_ENGINE_H__ +- +-#include "dc_ddc_types.h" +- +-enum i2caux_transaction_operation { +- I2CAUX_TRANSACTION_READ, +- I2CAUX_TRANSACTION_WRITE +-}; +- +-enum i2caux_transaction_address_space { +- I2CAUX_TRANSACTION_ADDRESS_SPACE_I2C = 1, +- I2CAUX_TRANSACTION_ADDRESS_SPACE_DPCD +-}; +- +-struct i2caux_transaction_payload { +- enum i2caux_transaction_address_space address_space; +- uint32_t address; +- uint32_t length; +- uint8_t *data; +-}; +- +-enum i2caux_transaction_status { +- I2CAUX_TRANSACTION_STATUS_UNKNOWN = (-1L), +- I2CAUX_TRANSACTION_STATUS_SUCCEEDED, +- I2CAUX_TRANSACTION_STATUS_FAILED_CHANNEL_BUSY, +- I2CAUX_TRANSACTION_STATUS_FAILED_TIMEOUT, +- I2CAUX_TRANSACTION_STATUS_FAILED_PROTOCOL_ERROR, +- I2CAUX_TRANSACTION_STATUS_FAILED_NACK, +- I2CAUX_TRANSACTION_STATUS_FAILED_INCOMPLETE, +- I2CAUX_TRANSACTION_STATUS_FAILED_OPERATION, +- I2CAUX_TRANSACTION_STATUS_FAILED_INVALID_OPERATION, +- I2CAUX_TRANSACTION_STATUS_FAILED_BUFFER_OVERFLOW, +- I2CAUX_TRANSACTION_STATUS_FAILED_HPD_DISCON +-}; +- +-struct i2caux_transaction_request { +- enum i2caux_transaction_operation operation; +- struct i2caux_transaction_payload payload; +- enum i2caux_transaction_status status; +-}; +- +-enum i2caux_engine_type { +- I2CAUX_ENGINE_TYPE_UNKNOWN = (-1L), +- I2CAUX_ENGINE_TYPE_AUX, +- I2CAUX_ENGINE_TYPE_I2C_DDC_HW, +- I2CAUX_ENGINE_TYPE_I2C_GENERIC_HW, +- I2CAUX_ENGINE_TYPE_I2C_SW +-}; +- +-enum i2c_default_speed { +- I2CAUX_DEFAULT_I2C_HW_SPEED = 50, +- I2CAUX_DEFAULT_I2C_SW_SPEED = 50 +-}; +- +-struct engine; +- +-struct engine_funcs { +- enum i2caux_engine_type (*get_engine_type)( +- const struct engine *engine); +- struct aux_engine* (*acquire)( +- struct engine *engine, +- struct ddc *ddc); +- bool (*submit_request)( +- struct engine *engine, +- struct i2caux_transaction_request *request, +- bool middle_of_transaction); +- void (*release_engine)( +- struct engine *engine); +- void (*destroy_engine)( +- struct engine **engine); +-}; +- +-struct engine { +- const struct engine_funcs *funcs; +- uint32_t inst; +- struct ddc *ddc; +- struct dc_context *ctx; +-}; +- +-#endif +-- +2.7.4 + |