diff options
Diffstat (limited to 'common/mock')
-rw-r--r-- | common/mock/README.md | 88 | ||||
-rw-r--r-- | common/mock/battery_mock.c | 211 | ||||
-rw-r--r-- | common/mock/build.mk | 23 | ||||
-rw-r--r-- | common/mock/charge_manager_mock.c | 50 | ||||
-rw-r--r-- | common/mock/dp_alt_mode_mock.c | 35 | ||||
-rw-r--r-- | common/mock/fp_sensor_mock.c | 87 | ||||
-rw-r--r-- | common/mock/fpsensor_detect_mock.c | 28 | ||||
-rw-r--r-- | common/mock/fpsensor_state_mock.c | 34 | ||||
-rw-r--r-- | common/mock/mkbp_events_mock.c | 26 | ||||
-rw-r--r-- | common/mock/rollback_mock.c | 41 | ||||
-rw-r--r-- | common/mock/tcpc_mock.c | 227 | ||||
-rw-r--r-- | common/mock/tcpci_i2c_mock.c | 1004 | ||||
-rw-r--r-- | common/mock/tcpm_mock.c | 72 | ||||
-rw-r--r-- | common/mock/timer_mock.c | 22 | ||||
-rw-r--r-- | common/mock/usb_mux_mock.c | 63 | ||||
-rw-r--r-- | common/mock/usb_pd_dpm_mock.c | 72 | ||||
-rw-r--r-- | common/mock/usb_pe_sm_mock.c | 120 | ||||
-rw-r--r-- | common/mock/usb_prl_mock.c | 200 | ||||
-rw-r--r-- | common/mock/usb_tc_sm_mock.c | 214 |
19 files changed, 0 insertions, 2617 deletions
diff --git a/common/mock/README.md b/common/mock/README.md deleted file mode 100644 index c7695531b6..0000000000 --- a/common/mock/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# Common Mocks - -This directory holds mock implementations for use in fuzzers and tests. - -Each mock is given some friendly build name, like ROLLBACK or FP_SENSOR. This -name is defined in [common/mock/build.mk](build.mk) and referenced from unit -tests and fuzzers' `.mocklist` file. - -## Creating a new mock - -* Add the mock source to [common/mock](/common/mock) and the optional header - file to [include/mock](/include/mock). Header files are only necessary if - you want to expose additional [mock control](#mock-controls) - functions/variables. See the [Design Patterns](#design-patterns) section for - more detail on design patterns. -* Add a new entry in [common/mock/build.mk](build.mk) that is conditioned on - your mock's name. - -If a unit test or fuzzer requests this mock, the build system will set the -variable `HAS_MOCK_<BUILD_NAME>` to `y` at build time. This variable is used to -conditionally include the mock source in [common/mock/build.mk](build.mk). - -Example line from [common/mock/build.mk](build.mk): - -```make -# Mocks -mock-$(HAS_MOCK_ROLLBACK) += mock/rollback_mock.o -``` - -## Using a mock - -Unit tests and fuzzers can request a particular mock by adding an entry to their -`.mocklist` file. The mocklist file is similar to a `.tasklist` file, where it -is named according to the test/fuzz's name followed by `.mocklist`, like -`fpsensor.mocklist`. The mocklist file is optional, so you may need to create -one. - -Example `.mocklist`: - -```c -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - - #define CONFIG_TEST_MOCK_LIST \ - MOCK(ROLLBACK) \ - MOCK(FP_SENSOR) -``` - -If you need additional [mock control](#mock-controls) functionality, you may -need to include the mock's header file, which is prepended with `mock/` in the -include line. - -For example, to control the return values of the rollback mock: - -```c -#include "mock/rollback_mock.h" - -void yourfunction() { - mock_ctrl_rollback.get_secret_fail = true; -} -``` - -## Mock Controls - -Mocks can change their behavior by exposing "mock controls". - -We do this, most commonly, by exposing an additional global struct per mock that -acts as the settings for the mock implementation. The mock user can then modify -fields of the struct to change the mock's behavior. For example, the -`fp_sensor_init_return` field may control what value the mocked `fp_sensor_init` -function returns. - -The declaration for these controls are specified in the mock's header file, -which resides in [include/mock](/include/mock). - -## Design Patterns - -* When creating mock controls, consider placing all your mock parameters in - one externally facing struct, like in - [fp_sensor_mock.h](/include/mock/fp_sensor_mock.h). The primary reason for - this is to allow the mock to be easily used by a fuzzer (write random bytes - into the struct with memcpy). -* When following the above pattern, please provide a macro for resetting - default values for this struct, like in - [fp_sensor_mock.h](/include/mock/fp_sensor_mock.h). This allows unit tests - to quickly reset the mock state/parameters before each unrelated unit test. diff --git a/common/mock/battery_mock.c b/common/mock/battery_mock.c deleted file mode 100644 index 63e94c660b..0000000000 --- a/common/mock/battery_mock.c +++ /dev/null @@ -1,211 +0,0 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "battery.h" -#include "string.h" - -/***************************************************************************** - * Battery functions needed to enable CONFIG_BATTERY - */ -static int battery_soc_value = 100; -int board_get_battery_soc(void) -{ - return battery_soc_value; -} -void set_battery_soc(int new_value) -{ - battery_soc_value = new_value; -} - -static int battery_status_value; -int battery_status(int *status) -{ - *status = battery_status_value; - return EC_SUCCESS; -} -void set_battery_status(int new_value) -{ - battery_status_value = new_value; -} - -static int battery_serial_number_value; -int battery_serial_number(int *serial) -{ - *serial = battery_serial_number_value; - return EC_SUCCESS; -} -void set_battery_serial_number(int new_value) -{ - battery_serial_number_value = new_value; -} - -static int battery_design_voltage_value = 5000; -int battery_design_voltage(int *voltage) -{ - *voltage = battery_design_voltage_value; - return EC_SUCCESS; -} -void set_battery_design_voltage(int new_value) -{ - battery_design_voltage_value = new_value; -} - -static int battery_mode_value; -int battery_get_mode(int *mode) -{ - *mode = battery_mode_value; - return EC_SUCCESS; -} -void set_battery_mode(int new_value) -{ - battery_mode_value = new_value; -} - -static int battery_soc_abs_value = 100; -int battery_state_of_charge_abs(int *percent) -{ - *percent = battery_soc_abs_value; - return EC_SUCCESS; -} -void set_battery_soc_abs(int new_value) -{ - battery_soc_abs_value = new_value; -} - -static int battery_remaining_capacity_value = 100; -int battery_remaining_capacity(int *capacity) -{ - *capacity = battery_remaining_capacity_value; - return EC_SUCCESS; -} -void set_battery_remaining_capacity(int new_value) -{ - battery_remaining_capacity_value = new_value; -} - -static int battery_full_charge_capacity_value = 100; -int battery_full_charge_capacity(int *capacity) -{ - *capacity = battery_full_charge_capacity_value; - return EC_SUCCESS; -} -void set_battery_full_charge_capacity(int new_value) -{ - battery_full_charge_capacity_value = new_value; -} - -static int battery_design_capacity_value = 100; -int battery_design_capacity(int *capacity) -{ - *capacity = battery_design_capacity_value; - return EC_SUCCESS; -} -void set_battery_design_capacity(int new_value) -{ - battery_design_capacity_value = new_value; -} - -static int battery_time_to_empty_value = 60; -int battery_time_to_empty(int *minutes) -{ - *minutes = battery_time_to_empty_value; - return EC_SUCCESS; -} -void set_battery_time_to_empty(int new_value) -{ - battery_time_to_empty_value = new_value; -} - -static int battery_run_time_to_empty_value = 60; -int battery_run_time_to_empty(int *minutes) -{ - *minutes = battery_run_time_to_empty_value; - return EC_SUCCESS; -} -void set_battery_run_time_to_empty(int new_value) -{ - battery_run_time_to_empty_value = new_value; -} - -static int battery_time_to_full_value; -int battery_time_to_full(int *minutes) -{ - *minutes = battery_time_to_full_value; - return EC_SUCCESS; -} -void set_battery_time_to_full(int new_value) -{ - battery_time_to_full_value = new_value; -} - -#define MAX_DEVICE_NAME_LENGTH 40 -static char battery_device_name_value[MAX_DEVICE_NAME_LENGTH+1] = "?"; -int battery_device_name(char *dest, int size) -{ - int i; - - for (i = 0; i < size && i < MAX_DEVICE_NAME_LENGTH; ++i) - dest[i] = battery_device_name_value[i]; - for (; i < size; ++i) - dest[i] = '\0'; - return EC_SUCCESS; -} -void set_battery_device_name(char *new_value) -{ - int i; - int size = strlen(new_value); - - for (i = 0; i < size && i < MAX_DEVICE_NAME_LENGTH; ++i) - battery_device_name_value[i] = new_value[i]; - for (; i < MAX_DEVICE_NAME_LENGTH+1; ++i) - battery_device_name_value[i] = '\0'; -} - -#define MAX_DEVICE_CHEMISTRY_LENGTH 40 -static char battery_device_chemistry_value[MAX_DEVICE_CHEMISTRY_LENGTH+1] = "?"; -int battery_device_chemistry(char *dest, int size) -{ - int i; - - for (i = 0; i < size && i < MAX_DEVICE_CHEMISTRY_LENGTH; ++i) - dest[i] = battery_device_chemistry_value[i]; - for (; i < size; ++i) - dest[i] = '\0'; - return EC_SUCCESS; -} -void set_battery_device_chemistry(char *new_value) -{ - int i; - int size = strlen(new_value); - - for (i = 0; i < size && i < MAX_DEVICE_CHEMISTRY_LENGTH; ++i) - battery_device_chemistry_value[i] = new_value[i]; - for (; i < MAX_DEVICE_CHEMISTRY_LENGTH+1; ++i) - battery_device_chemistry_value[i] = '\0'; -} - -static int battery_current_value = 3000; -static int battery_desired_current_value = 3000; -static int battery_desired_voltage_value = 5000; -static int battery_is_present_value = BP_YES; -static int battery_temperature_value = 20; -static int battery_voltage_value = 5000; -void battery_get_params(struct batt_params *batt) -{ - struct batt_params batt_new = {0}; - - batt_new.temperature = battery_temperature_value; - batt_new.state_of_charge = battery_soc_value; - batt_new.voltage = battery_voltage_value; - batt_new.current = battery_current_value; - batt_new.desired_voltage = battery_desired_voltage_value; - batt_new.desired_current = battery_desired_current_value; - batt_new.remaining_capacity = battery_remaining_capacity_value; - batt_new.full_capacity = battery_full_charge_capacity_value; - batt_new.status = battery_status_value; - batt_new.is_present = battery_is_present_value; - - memcpy(batt, &batt_new, sizeof(*batt)); -} diff --git a/common/mock/build.mk b/common/mock/build.mk deleted file mode 100644 index 91607b2b1e..0000000000 --- a/common/mock/build.mk +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2019 The Chromium OS Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# See common/mock/README.md for more information. - -mock-$(HAS_MOCK_BATTERY) += battery_mock.o -mock-$(HAS_MOCK_CHARGE_MANAGER) += charge_manager_mock.o -mock-$(HAS_MOCK_FP_SENSOR) += fp_sensor_mock.o -mock-$(HAS_MOCK_FPSENSOR_DETECT) += fpsensor_detect_mock.o -mock-$(HAS_MOCK_FPSENSOR_STATE) += fpsensor_state_mock.o -mock-$(HAS_MOCK_MKBP_EVENTS) += mkbp_events_mock.o -mock-$(HAS_MOCK_ROLLBACK) += rollback_mock.o -mock-$(HAS_MOCK_TCPC) += tcpc_mock.o -mock-$(HAS_MOCK_TCPM) += tcpm_mock.o -mock-$(HAS_MOCK_TCPCI_I2C) += tcpci_i2c_mock.o -mock-$(HAS_MOCK_TIMER) += timer_mock.o -mock-$(HAS_MOCK_USB_MUX) += usb_mux_mock.o -mock-$(HAS_MOCK_USB_PE_SM) += usb_pe_sm_mock.o -mock-$(HAS_MOCK_USB_TC_SM) += usb_tc_sm_mock.o -mock-$(HAS_MOCK_USB_PD_DPM) += usb_pd_dpm_mock.o -mock-$(HAS_MOCK_DP_ALT_MODE) += dp_alt_mode_mock.o -mock-$(HAS_MOCK_USB_PRL) += usb_prl_mock.o diff --git a/common/mock/charge_manager_mock.c b/common/mock/charge_manager_mock.c deleted file mode 100644 index 11661d2b2e..0000000000 --- a/common/mock/charge_manager_mock.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/** - * @file - * @brief Mock charge_manager - */ - -#include <stdlib.h> - -#include "charge_manager.h" -#include "common.h" -#include "mock/charge_manager_mock.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -void charge_manager_update_dualrole(int port, enum dualrole_capabilities cap) -{ -} - -void charge_manager_set_ceil(int port, enum ceil_requestor requestor, int ceil) -{ -} - -int charge_manager_get_selected_charge_port(void) -{ - return 0; -} - -int charge_manager_get_active_charge_port(void) -{ - return 0; -} - -int charge_manager_get_vbus_voltage(int port) -{ - return mock_ctrl_charge_manager.vbus_voltage_mv; -} - -void mock_charge_manager_set_vbus_voltage(int voltage_mv) -{ - mock_ctrl_charge_manager.vbus_voltage_mv = voltage_mv; -} - -struct mock_ctrl_charge_manager mock_ctrl_charge_manager = -MOCK_CTRL_DEFAULT_CHARGE_MANAGER; diff --git a/common/mock/dp_alt_mode_mock.c b/common/mock/dp_alt_mode_mock.c deleted file mode 100644 index c489d39830..0000000000 --- a/common/mock/dp_alt_mode_mock.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* - * Mock for DisplayPort alternate mode support - * Refer to VESA DisplayPort Alt Mode on USB Type-C Standard, version 2.0, - * section 5.2 - */ - -#include "usb_dp_alt_mode.h" -#include "mock/dp_alt_mode_mock.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -#ifdef CONFIG_COMMON_RUNTIME -#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args) -#define CPRINTS(format, args...) cprints(CC_USBPD, format, ## args) -#else -#define CPRINTF(format, args...) -#define CPRINTS(format, args...) -#endif - -void mock_dp_alt_mode_reset(void) -{ - /* Nothing to do right now, but in the future ... */ -} - -void dp_init(int port) -{ - CPRINTS("C%d: DP init", port); -} diff --git a/common/mock/fp_sensor_mock.c b/common/mock/fp_sensor_mock.c deleted file mode 100644 index 363f092ff1..0000000000 --- a/common/mock/fp_sensor_mock.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/** - * @file - * @brief Mock fpsensor private driver - */ - -#include <stdlib.h> - -#include "common.h" -#include "fpsensor.h" -#include "mock/fp_sensor_mock.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -struct mock_ctrl_fp_sensor mock_ctrl_fp_sensor = MOCK_CTRL_DEFAULT_FP_SENSOR; - -int fp_sensor_init(void) -{ - return mock_ctrl_fp_sensor.fp_sensor_init_return; -} - -int fp_sensor_deinit(void) -{ - return mock_ctrl_fp_sensor.fp_sensor_deinit_return; -} - -int fp_sensor_get_info(struct ec_response_fp_info *resp) -{ - resp->version = 0; - return mock_ctrl_fp_sensor.fp_sensor_get_info_return; -} - -void fp_sensor_low_power(void) -{ -} - -void fp_sensor_configure_detect(void) -{ -} - -enum finger_state fp_sensor_finger_status(void) -{ - return mock_ctrl_fp_sensor.fp_sensor_finger_status_return; -} - -int fp_sensor_acquire_image(uint8_t *image_data) -{ - return mock_ctrl_fp_sensor.fp_sensor_acquire_image_return; -} - -int fp_sensor_acquire_image_with_mode(uint8_t *image_data, int mode) -{ - return mock_ctrl_fp_sensor.fp_sensor_acquire_image_with_mode_return; -} - -int fp_finger_match(void *templ, uint32_t templ_count, - uint8_t *image, int32_t *match_index, - uint32_t *update_bitmap) -{ - return mock_ctrl_fp_sensor.fp_finger_match_return; -} - -int fp_enrollment_begin(void) -{ - return mock_ctrl_fp_sensor.fp_enrollment_begin_return; -} - -int fp_enrollment_finish(void *templ) -{ - return mock_ctrl_fp_sensor.fp_enrollment_finish_return; -} - -int fp_finger_enroll(uint8_t *image, int *completion) -{ - return mock_ctrl_fp_sensor.fp_finger_enroll_return; -} - -int fp_maintenance(void) -{ - return mock_ctrl_fp_sensor.fp_maintenance_return; -} diff --git a/common/mock/fpsensor_detect_mock.c b/common/mock/fpsensor_detect_mock.c deleted file mode 100644 index 6e3ca839f1..0000000000 --- a/common/mock/fpsensor_detect_mock.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "mock/fpsensor_detect_mock.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -struct mock_ctrl_fpsensor_detect mock_ctrl_fpsensor_detect = - MOCK_CTRL_DEFAULT_FPSENSOR_DETECT; - -enum fp_sensor_type get_fp_sensor_type(void) -{ - return mock_ctrl_fpsensor_detect.get_fp_sensor_type_return; -} - -enum fp_transport_type get_fp_transport_type(void) -{ - return mock_ctrl_fpsensor_detect.get_fp_transport_type_return; -} - -enum fp_sensor_spi_select get_fp_sensor_spi_select(void) -{ - return mock_ctrl_fpsensor_detect.get_fp_sensor_spi_select_return; -} diff --git a/common/mock/fpsensor_state_mock.c b/common/mock/fpsensor_state_mock.c deleted file mode 100644 index c3092fe860..0000000000 --- a/common/mock/fpsensor_state_mock.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include <stddef.h> -#include <string.h> - -#include "common.h" -#include "ec_commands.h" -#include "test_util.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -const uint8_t default_fake_tpm_seed[] = { - 0xd9, 0x71, 0xaf, 0xc4, 0xcd, 0x36, 0xe3, 0x60, 0xf8, 0x5a, 0xa0, - 0xa6, 0x2c, 0xb3, 0xf5, 0xe2, 0xeb, 0xb9, 0xd8, 0x2f, 0xb5, 0x78, - 0x5c, 0x79, 0x82, 0xce, 0x06, 0x3f, 0xcc, 0x23, 0xb9, 0xe7, -}; -BUILD_ASSERT(sizeof(default_fake_tpm_seed) == FP_CONTEXT_TPM_BYTES); - -int fpsensor_state_mock_set_tpm_seed( - const uint8_t tpm_seed[FP_CONTEXT_TPM_BYTES]) -{ - struct ec_params_fp_seed params; - - params.struct_version = FP_TEMPLATE_FORMAT_VERSION; - memcpy(params.seed, tpm_seed, FP_CONTEXT_TPM_BYTES); - - return test_send_host_command(EC_CMD_FP_SEED, 0, ¶ms, - sizeof(params), NULL, 0); -} diff --git a/common/mock/mkbp_events_mock.c b/common/mock/mkbp_events_mock.c deleted file mode 100644 index d42c06fdec..0000000000 --- a/common/mock/mkbp_events_mock.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/** - * @file - * @brief Mock event handling for MKBP keyboard protocol - */ - -#include <stdint.h> - -#include "common.h" -#include "mock/mkbp_events_mock.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -struct mock_ctrl_mkbp_events mock_ctrl_mkbp_events = - MOCK_CTRL_DEFAULT_MKBP_EVENTS; - -int mkbp_send_event(uint8_t event_type) -{ - return mock_ctrl_mkbp_events.mkbp_send_event_return; -} diff --git a/common/mock/rollback_mock.c b/common/mock/rollback_mock.c deleted file mode 100644 index 2b26d9d8d7..0000000000 --- a/common/mock/rollback_mock.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/** - * @file - * @brief Mock rollback block library - */ - -#include <stdint.h> -#include <string.h> - -#include "common.h" -#include "compile_time_macros.h" -#include "util.h" -#include "mock/rollback_mock.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -struct mock_ctrl_rollback mock_ctrl_rollback = MOCK_CTRL_DEFAULT_ROLLBACK; - -static const uint8_t fake_rollback_secret[] = { - 0xcf, 0xe3, 0x23, 0x76, 0x35, 0x04, 0xc2, 0x0f, - 0x0d, 0xb6, 0x02, 0xa9, 0x68, 0xba, 0x2a, 0x61, - 0x86, 0x2a, 0x85, 0xd1, 0xca, 0x09, 0x54, 0x8a, - 0x6b, 0xe2, 0xe3, 0x38, 0xde, 0x5d, 0x59, 0x14, -}; - -BUILD_ASSERT(sizeof(fake_rollback_secret) == CONFIG_ROLLBACK_SECRET_SIZE); - -/* Mock the rollback for unit or fuzz tests. */ -int rollback_get_secret(uint8_t *secret) -{ - if (mock_ctrl_rollback.get_secret_fail) - return EC_ERROR_UNKNOWN; - memcpy(secret, fake_rollback_secret, sizeof(fake_rollback_secret)); - return EC_SUCCESS; -} diff --git a/common/mock/tcpc_mock.c b/common/mock/tcpc_mock.c deleted file mode 100644 index 7097837268..0000000000 --- a/common/mock/tcpc_mock.c +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ -/* Mock for the TCPC interface */ - -#include "common.h" -#include "console.h" -#include "memory.h" -#include "mock/tcpc_mock.h" -#include "test_util.h" -#include "tests/enum_strings.h" -#include "timer.h" -#include "usb_pd_tcpm.h" - -#ifndef CONFIG_COMMON_RUNTIME -#define cprints(format, args...) -#endif - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -/* Public API for controlling/inspecting this mock */ -struct mock_tcpc_ctrl mock_tcpc; - -void mock_tcpc_reset(void) -{ - /* Reset all control values to 0. See also build assert below */ - memset(&mock_tcpc, 0, sizeof(mock_tcpc)); - - /* Reset all last viewed variables to -1 to make them invalid */ - memset(&mock_tcpc.last, 0xff, sizeof(mock_tcpc.last)); -} -BUILD_ASSERT(TYPEC_CC_VOLT_OPEN == 0, "Ensure Open is 0-value for memset"); - -static int mock_init(int port) -{ - return EC_SUCCESS; -} - -static int mock_release(int port) -{ - return EC_SUCCESS; -} - -static int mock_get_cc(int port, enum tcpc_cc_voltage_status *cc1, - enum tcpc_cc_voltage_status *cc2) -{ - *cc1 = mock_tcpc.cc1; - *cc2 = mock_tcpc.cc2; - return EC_SUCCESS; -} - -static bool mock_check_vbus_level(int port, enum vbus_level level) -{ - if (level == VBUS_PRESENT) - return mock_tcpc.vbus_level; - else if (level == VBUS_SAFE0V || level == VBUS_REMOVED) - return !mock_tcpc.vbus_level; - - /* - * Unknown vbus_level was added, force a failure. - * Note that TCPC drivers and pd_check_vbus_level() implementations - * should be carefully checked on new level additions in case they - * need updated. - */ - ccprints("[TCPC] Unhandled Vbus check %d", level); - TEST_ASSERT(0); -} - -static int mock_select_rp_value(int port, int rp) -{ - mock_tcpc.last.rp = rp; - - if (!mock_tcpc.should_print_call) - return EC_SUCCESS; - - ccprints("[TCPC] Setting TCPM-side Rp to %s", from_tcpc_rp_value(rp)); - - return EC_SUCCESS; -} - -static int mock_set_cc(int port, int pull) -{ - mock_tcpc.last.cc = pull; - - if (mock_tcpc.callbacks.set_cc) - mock_tcpc.callbacks.set_cc(port, pull); - - if (!mock_tcpc.should_print_call) - return EC_SUCCESS; - - ccprints("[TCPC] Setting TCPM-side CC to %s", from_tcpc_cc_pull(pull)); - - return EC_SUCCESS; -} - -static int mock_set_polarity(int port, enum tcpc_cc_polarity polarity) -{ - mock_tcpc.last.polarity = polarity; - - if (!mock_tcpc.should_print_call) - return EC_SUCCESS; - - ccprints("[TCPC] Setting TCPM-side polarity to %s", - from_tcpc_cc_polarity(polarity)); - - return EC_SUCCESS; -} - -static int mock_set_vconn(int port, int enable) -{ - return EC_SUCCESS; -} - -static int mock_set_msg_header(int port, int power_role, int data_role) -{ - ++mock_tcpc.num_calls_to_set_header; - - mock_tcpc.last.power_role = power_role; - mock_tcpc.last.data_role = data_role; - - if (!mock_tcpc.should_print_call) - return EC_SUCCESS; - - ccprints("[TCPC] Setting TCPM-side header to %s %s", - from_pd_power_role(power_role), - from_pd_data_role(data_role)); - - return EC_SUCCESS; -} - -static int mock_set_rx_enable(int port, int enable) -{ - return EC_SUCCESS; -} - -static int mock_get_message_raw(int port, uint32_t *payload, int *head) -{ - return EC_SUCCESS; -} - -static int mock_transmit(int port, enum tcpci_msg_type type, - uint16_t header, const uint32_t *data) -{ - return EC_SUCCESS; -} - -void mock_tcpc_alert(int port) -{ -} - -void mock_tcpc_discharge_vbus(int port, int enable) -{ -} - -__maybe_unused static int mock_drp_toggle(int port) -{ - /* Only set the time the first time this is called. */ - if (mock_tcpc.first_call_to_enable_auto_toggle == 0) - mock_tcpc.first_call_to_enable_auto_toggle = get_time().val; - - if (!mock_tcpc.should_print_call) - return EC_SUCCESS; - - ccprints("[TCPC] Enabling Auto Toggle"); - - return EC_SUCCESS; -} - -static int mock_get_chip_info(int port, int live, - struct ec_response_pd_chip_info_v1 *info) -{ - return EC_SUCCESS; -} - -__maybe_unused static int mock_set_snk_ctrl(int port, int enable) -{ - return EC_SUCCESS; -} - -__maybe_unused static int mock_set_src_ctrl(int port, int enable) -{ - return EC_SUCCESS; -} - -__maybe_unused static int mock_enter_low_power_mode(int port) -{ - return EC_SUCCESS; -} - -int mock_set_frs_enable(int port, int enable) -{ - return EC_SUCCESS; -} - -const struct tcpm_drv mock_tcpc_driver = { - .init = &mock_init, - .release = &mock_release, - .get_cc = &mock_get_cc, - .check_vbus_level = &mock_check_vbus_level, - .select_rp_value = &mock_select_rp_value, - .set_cc = &mock_set_cc, - .set_polarity = &mock_set_polarity, - .set_vconn = &mock_set_vconn, - .set_msg_header = &mock_set_msg_header, - .set_rx_enable = &mock_set_rx_enable, - .get_message_raw = &mock_get_message_raw, - .transmit = &mock_transmit, - .tcpc_alert = &mock_tcpc_alert, - .tcpc_discharge_vbus = &mock_tcpc_discharge_vbus, -#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE - .drp_toggle = &mock_drp_toggle, -#endif - .get_chip_info = &mock_get_chip_info, -#ifdef CONFIG_USB_PD_PPC - .set_snk_ctrl = &mock_set_snk_ctrl, - .set_src_ctrl = &mock_set_src_ctrl, -#endif -#ifdef CONFIG_USB_PD_TCPC_LOW_POWER - .enter_low_power_mode = &mock_enter_low_power_mode, -#endif -#ifdef CONFIG_USB_PD_FRS_TCPC - .set_frs_enable = &mock_set_frs_enable, -#endif -}; diff --git a/common/mock/tcpci_i2c_mock.c b/common/mock/tcpci_i2c_mock.c deleted file mode 100644 index 8ec7556fca..0000000000 --- a/common/mock/tcpci_i2c_mock.c +++ /dev/null @@ -1,1004 +0,0 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "mock/tcpci_i2c_mock.h" -#include "task.h" -#include "tcpm/tcpci.h" -#include "test_util.h" -#include "timer.h" -#include "usb_pd_tcpm.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -#define BUFFER_SIZE 100 -#define VERIFY_TIMEOUT (5 * SECOND) - -struct tcpci_reg { - uint8_t offset; - uint8_t size; - uint16_t value; - const char *name; -}; - -#define TCPCI_REG(reg_name, reg_size) \ - [reg_name] = { .offset = (reg_name), .size = (reg_size), \ - .value = 0, .name = #reg_name, } - -static struct tcpci_reg tcpci_regs[] = { - TCPCI_REG(TCPC_REG_VENDOR_ID, 2), - TCPCI_REG(TCPC_REG_PRODUCT_ID, 2), - TCPCI_REG(TCPC_REG_BCD_DEV, 2), - TCPCI_REG(TCPC_REG_TC_REV, 2), - TCPCI_REG(TCPC_REG_PD_REV, 2), - TCPCI_REG(TCPC_REG_PD_INT_REV, 2), - TCPCI_REG(TCPC_REG_ALERT, 2), - TCPCI_REG(TCPC_REG_ALERT_MASK, 2), - TCPCI_REG(TCPC_REG_POWER_STATUS_MASK, 1), - TCPCI_REG(TCPC_REG_FAULT_STATUS_MASK, 1), - TCPCI_REG(TCPC_REG_EXT_STATUS_MASK, 1), - TCPCI_REG(TCPC_REG_ALERT_EXTENDED_MASK, 1), - TCPCI_REG(TCPC_REG_CONFIG_STD_OUTPUT, 1), - TCPCI_REG(TCPC_REG_TCPC_CTRL, 1), - TCPCI_REG(TCPC_REG_ROLE_CTRL, 1), - TCPCI_REG(TCPC_REG_FAULT_CTRL, 1), - TCPCI_REG(TCPC_REG_POWER_CTRL, 1), - TCPCI_REG(TCPC_REG_CC_STATUS, 1), - TCPCI_REG(TCPC_REG_POWER_STATUS, 1), - TCPCI_REG(TCPC_REG_FAULT_STATUS, 1), - TCPCI_REG(TCPC_REG_EXT_STATUS, 1), - TCPCI_REG(TCPC_REG_ALERT_EXT, 1), - TCPCI_REG(TCPC_REG_DEV_CAP_1, 2), - TCPCI_REG(TCPC_REG_DEV_CAP_2, 2), - TCPCI_REG(TCPC_REG_STD_INPUT_CAP, 1), - TCPCI_REG(TCPC_REG_STD_OUTPUT_CAP, 1), - TCPCI_REG(TCPC_REG_CONFIG_EXT_1, 1), - TCPCI_REG(TCPC_REG_MSG_HDR_INFO, 1), - TCPCI_REG(TCPC_REG_RX_DETECT, 1), - TCPCI_REG(TCPC_REG_RX_BUFFER, BUFFER_SIZE), - TCPCI_REG(TCPC_REG_TRANSMIT, 1), - TCPCI_REG(TCPC_REG_TX_BUFFER, BUFFER_SIZE), - TCPCI_REG(TCPC_REG_VBUS_VOLTAGE, 2), - TCPCI_REG(TCPC_REG_VBUS_SINK_DISCONNECT_THRESH, 2), - TCPCI_REG(TCPC_REG_VBUS_STOP_DISCHARGE_THRESH, 2), - TCPCI_REG(TCPC_REG_VBUS_VOLTAGE_ALARM_HI_CFG, 2), - TCPCI_REG(TCPC_REG_VBUS_VOLTAGE_ALARM_LO_CFG, 2), - TCPCI_REG(TCPC_REG_COMMAND, 1), -}; - -static uint8_t tx_buffer[BUFFER_SIZE]; -static int tx_pos = -1; -static int tx_msg_cnt; -static int tx_retry_cnt = -1; -static uint8_t rx_buffer[BUFFER_SIZE]; -static int rx_pos = -1; - -static const char * const ctrl_msg_name[] = { - [0] = "C-RSVD_0", - [PD_CTRL_GOOD_CRC] = "C-GOODCRC", - [PD_CTRL_GOTO_MIN] = "C-GOTOMIN", - [PD_CTRL_ACCEPT] = "C-ACCEPT", - [PD_CTRL_REJECT] = "C-REJECT", - [PD_CTRL_PING] = "C-PING", - [PD_CTRL_PS_RDY] = "C-PSRDY", - [PD_CTRL_GET_SOURCE_CAP] = "C-GET_SRC_CAP", - [PD_CTRL_GET_SINK_CAP] = "C-GET_SNK_CAP", - [PD_CTRL_DR_SWAP] = "C-DR_SWAP", - [PD_CTRL_PR_SWAP] = "C-PR_SWAP", - [PD_CTRL_VCONN_SWAP] = "C-VCONN_SW", - [PD_CTRL_WAIT] = "C-WAIT", - [PD_CTRL_SOFT_RESET] = "C-SOFT-RESET", - [14] = "C-RSVD_14", - [15] = "C-RSVD_15", - [PD_CTRL_NOT_SUPPORTED] = "C-NOT_SUPPORTED", - [PD_CTRL_GET_SOURCE_CAP_EXT] = "C-GET_SRC_CAP-EXT", - [PD_CTRL_GET_STATUS] = "C-GET-STATUS", - [PD_CTRL_FR_SWAP] = "C-FR_SWAP", - [PD_CTRL_GET_PPS_STATUS] = "C-GET_PPS_STATUS", - [PD_CTRL_GET_COUNTRY_CODES] = "C-GET_COUNTRY_CODES", -}; - -static const char * const data_msg_name[] = { - [0] = "D-RSVD_0", - [PD_DATA_SOURCE_CAP] = "D-SRC_CAP", - [PD_DATA_REQUEST] = "D-REQUEST", - [PD_DATA_BIST] = "D-BIST", - [PD_DATA_SINK_CAP] = "D-SNK_CAP", - /* 5-14 Reserved for REV 2.0 */ - [PD_DATA_BATTERY_STATUS] = "D-BATTERY_STATUS", - [PD_DATA_ALERT] = "D-ALERT", - [PD_DATA_GET_COUNTRY_INFO] = "D-GET_COUNTRY_CODES", - /* 8-14 Reserved for REV 3.0 */ - [PD_DATA_ENTER_USB] = "D-ENTER_USB", - [PD_DATA_VENDOR_DEF] = "D-VDM", -}; - -static const char * const ext_msg_name[] = { - [0] = "X-RSVD_0", - [PD_EXT_SOURCE_CAP] = "X-SRC_CAP", - [PD_EXT_STATUS] = "X-STATUS", - [PD_EXT_GET_BATTERY_CAP] = "X-GET_BATTERY_CAP", - [PD_EXT_GET_BATTERY_STATUS] = "X-GET_BATTERY_STATUS", - [PD_EXT_BATTERY_CAP] = "X-BATTERY_CAP", - [PD_EXT_GET_MANUFACTURER_INFO] = "X-GET_MFR_INFO", - [PD_EXT_MANUFACTURER_INFO] = "X-MFR_INFO", - [PD_EXT_SECURITY_REQUEST] = "X-SECURITY_REQ", - [PD_EXT_SECURITY_RESPONSE] = "X-SECURITY_RESP", - [PD_EXT_FIRMWARE_UPDATE_REQUEST] = "X-FW_UP_REQ", - [PD_EXT_FIRMWARE_UPDATE_RESPONSE] = "X-FW_UP_RESP", - [PD_EXT_PPS_STATUS] = "X-PPS_STATUS", - [PD_EXT_COUNTRY_INFO] = "X-COUNTRY_INFO", - [PD_EXT_COUNTRY_CODES] = "X-COUNTRY_CODES", -}; - -static const char * const rev_name[] = { - [PD_REV10] = "1.0", - [PD_REV20] = "2.0", - [PD_REV30] = "3.0", - [3] = "RSVD", -}; - -static const char * const drole_name[] = { - [PD_ROLE_UFP] = "UFP", - [PD_ROLE_DFP] = "DFP", -}; - -static const char * const prole_name[] = { - [PD_ROLE_SINK] = "SNK", - [PD_ROLE_SOURCE] = "SRC", -}; - -static void print_header(const char *prefix, uint16_t header) -{ - int type = PD_HEADER_TYPE(header); - int drole = PD_HEADER_DROLE(header); - int rev = PD_HEADER_REV(header); - int prole = PD_HEADER_PROLE(header); - int id = PD_HEADER_ID(header); - int cnt = PD_HEADER_CNT(header); - int ext = PD_HEADER_EXT(header); - const char *name = ext ? ext_msg_name[type] - : cnt - ? data_msg_name[type] - : ctrl_msg_name[type]; - - ccprints("%s header=0x%x [%s %s %s %s id=%d cnt=%d ext=%d]", - prefix, header, - name, drole_name[drole], rev_name[rev], prole_name[prole], - id, cnt, ext); -} - -static bool dead_battery(void) -{ - return false; -} - -static bool debug_accessory_indicator_supported(void) -{ - return true; -} - -static int verify_transmit(enum tcpci_msg_type want_tx_type, - int want_tx_retry, - enum pd_ctrl_msg_type want_ctrl_msg, - enum pd_data_msg_type want_data_msg, - int timeout) -{ - uint64_t end_time = get_time().val + timeout; - - /* - * Check that nothing was already transmitted. This ensures that all - * transmits are checked, and the test stays in sync with the code - * being tested. - */ - TEST_EQ(tcpci_regs[TCPC_REG_TRANSMIT].value, 0, "%d"); - - /* Now wait for the expected message to be transmitted. */ - while (get_time().val < end_time) { - if (tcpci_regs[TCPC_REG_TRANSMIT].value != 0) { - int tx_type = TCPC_REG_TRANSMIT_TYPE( - tcpci_regs[TCPC_REG_TRANSMIT].value); - int tx_retry = TCPC_REG_TRANSMIT_RETRY( - tcpci_regs[TCPC_REG_TRANSMIT].value); - uint16_t header = UINT16_FROM_BYTE_ARRAY_LE( - tx_buffer, 1); - int pd_type = PD_HEADER_TYPE(header); - int pd_cnt = PD_HEADER_CNT(header); - - TEST_EQ(tx_type, want_tx_type, "%d"); - if (want_tx_retry >= 0) - TEST_EQ(tx_retry, want_tx_retry, "%d"); - - if (want_ctrl_msg != 0) { - TEST_EQ(pd_type, want_ctrl_msg, "0x%x"); - TEST_EQ(pd_cnt, 0, "%d"); - } - if (want_data_msg != 0) { - TEST_EQ(pd_type, want_data_msg, "0x%x"); - TEST_GE(pd_cnt, 1, "%d"); - } - - tcpci_regs[TCPC_REG_TRANSMIT].value = 0; - return EC_SUCCESS; - } - task_wait_event(5 * MSEC); - } - TEST_ASSERT(0); - return EC_ERROR_UNKNOWN; -} - -int verify_tcpci_transmit(enum tcpci_msg_type tx_type, - enum pd_ctrl_msg_type ctrl_msg, - enum pd_data_msg_type data_msg) -{ - return verify_transmit(tx_type, -1, - ctrl_msg, data_msg, - VERIFY_TIMEOUT); -} - -int verify_tcpci_tx_timeout(enum tcpci_msg_type tx_type, - enum pd_ctrl_msg_type ctrl_msg, - enum pd_data_msg_type data_msg, - int timeout) -{ - return verify_transmit(tx_type, -1, - ctrl_msg, data_msg, - timeout); -} - -int verify_tcpci_tx_retry_count(enum tcpci_msg_type tx_type, - enum pd_ctrl_msg_type ctrl_msg, - enum pd_data_msg_type data_msg, - int retry_count) -{ - return verify_transmit(tx_type, retry_count, - ctrl_msg, data_msg, - VERIFY_TIMEOUT); -} - -int verify_tcpci_tx_with_data(enum tcpci_msg_type tx_type, - enum pd_data_msg_type data_msg, - uint8_t *data, - int data_bytes, - int *msg_len, - int timeout) -{ - int rv; - - if (timeout <= 0) - timeout = VERIFY_TIMEOUT; - - rv = verify_transmit(tx_type, -1, - 0, data_msg, - timeout); - if (!rv) { - TEST_NE(data, NULL, "%p"); - TEST_GE(data_bytes, tx_msg_cnt, "%d"); - memcpy(data, tx_buffer, tx_msg_cnt); - if (msg_len) - *msg_len = tx_msg_cnt; - } - return rv; -} - -int verify_tcpci_possible_tx(struct possible_tx possible[], - int possible_cnt, - int *found_index, - uint8_t *data, - int data_bytes, - int *msg_len, - int timeout) -{ - bool assert_on_timeout = true; - uint64_t end_time; - - *found_index = -1; - - if (timeout <= 0) { - timeout = VERIFY_TIMEOUT; - assert_on_timeout = false; - } - end_time = get_time().val + timeout; - - /* - * Check that nothing was already transmitted. This ensures that all - * transmits are checked, and the test stays in sync with the code - * being tested. - */ - TEST_EQ(tcpci_regs[TCPC_REG_TRANSMIT].value, 0, "%d"); - - /* Now wait for the expected message to be transmitted. */ - while (get_time().val < end_time) { - if (tcpci_regs[TCPC_REG_TRANSMIT].value != 0) { - int i; - int tx_type = TCPC_REG_TRANSMIT_TYPE( - tcpci_regs[TCPC_REG_TRANSMIT].value); - uint16_t header = UINT16_FROM_BYTE_ARRAY_LE( - tx_buffer, 1); - int pd_type = PD_HEADER_TYPE(header); - int pd_cnt = PD_HEADER_CNT(header); - - for (i = 0; i < possible_cnt; ++i) { - int want_tx_type = possible[i].tx_type; - int want_ctrl_msg = possible[i].ctrl_msg; - int want_data_msg = possible[i].data_msg; - - if (tx_type != want_tx_type) - continue; - - if (want_ctrl_msg != 0) { - if (pd_type != want_ctrl_msg || - pd_cnt != 0) - continue; - } - if (want_data_msg != 0) { - if (pd_type != want_data_msg || - pd_cnt == 0) - continue; - - if (data != NULL) { - TEST_GE(data_bytes, - tx_msg_cnt, "%d"); - memcpy(data, tx_buffer, - tx_msg_cnt); - } - if (msg_len != NULL) - *msg_len = tx_msg_cnt; - } - *found_index = i; - tcpci_regs[TCPC_REG_TRANSMIT].value = 0; - return EC_SUCCESS; - } - return EC_ERROR_UNKNOWN; - } - task_wait_event(5 * MSEC); - } - if (assert_on_timeout) - TEST_ASSERT(0); - - return EC_ERROR_TIMEOUT; -} - -void mock_tcpci_receive(enum tcpci_msg_type sop, uint16_t header, - uint32_t *payload) -{ - int i; - - rx_buffer[0] = 3 + (PD_HEADER_CNT(header) * 4); - rx_buffer[1] = sop; - rx_buffer[2] = header & 0xFF; - rx_buffer[3] = (header >> 8) & 0xFF; - - if (rx_buffer[0] >= BUFFER_SIZE) { - ccprints("ERROR: rx too large"); - return; - } - - for (i = 4; i < rx_buffer[0]; i += 4) { - rx_buffer[i] = *payload & 0xFF; - rx_buffer[i+1] = (*payload >> 8) & 0xFF; - rx_buffer[i+2] = (*payload >> 16) & 0xFF; - rx_buffer[i+3] = (*payload >> 24) & 0xFF; - payload++; - } - - rx_pos = 0; -} - -/***************************************************************************** - * TCPCI register reset values - * - * These values are from USB Type-C Port Controller Interface Specification - * Revision 2.0, Version 1.2, - */ -static void tcpci_reset_register_masks(void) -{ - /* - * Using table 4-1 for default mask values - */ - tcpci_regs[TCPC_REG_ALERT_MASK].value = 0x7FFF; - tcpci_regs[TCPC_REG_POWER_STATUS_MASK].value = 0xFF; - tcpci_regs[TCPC_REG_FAULT_STATUS_MASK].value = 0xFF; - tcpci_regs[TCPC_REG_EXT_STATUS_MASK].value = 0x01; - tcpci_regs[TCPC_REG_ALERT_EXTENDED_MASK].value = 0x07; -} - -static void tcpci_reset_register_defaults(void) -{ - int i; - - /* Default all registers to 0 and then overwrite if they are not */ - for (i = 0; i < ARRAY_SIZE(tcpci_regs); i++) - tcpci_regs[i].value = 0; - - /* Type-C Release 1,3 */ - tcpci_regs[TCPC_REG_TC_REV].value = 0x0013; - /* PD Revision 3.0 Version 1.2 */ - tcpci_regs[TCPC_REG_PD_REV].value = 0x3012; - /* PD Interface Revision 2.0, Version 1.1 */ - tcpci_regs[TCPC_REG_PD_INT_REV].value = 0x2011; - - tcpci_reset_register_masks(); - - tcpci_regs[TCPC_REG_CONFIG_STD_OUTPUT].value = - TCPC_REG_CONFIG_STD_OUTPUT_AUDIO_CONN_N | - TCPC_REG_CONFIG_STD_OUTPUT_DBG_ACC_CONN_N; - - tcpci_regs[TCPC_REG_POWER_CTRL].value = - TCPC_REG_POWER_CTRL_VOLT_ALARM_DIS | - TCPC_REG_POWER_CTRL_VBUS_VOL_MONITOR_DIS; - - tcpci_regs[TCPC_REG_FAULT_STATUS].value = - TCPC_REG_FAULT_STATUS_ALL_REGS_RESET; - - tcpci_regs[TCPC_REG_DEV_CAP_1].value = - TCPC_REG_DEV_CAP_1_SOURCE_VBUS | - TCPC_REG_DEV_CAP_1_SINK_VBUS | - TCPC_REG_DEV_CAP_1_PWRROLE_SRC_SNK_DRP | - TCPC_REG_DEV_CAP_1_SRC_RESISTOR_RP_3P0_1P5_DEF; - - /* - * Using table 4-17 to get the default Role Control and - * Message Header Info register values. - */ - switch (mock_tcpci_get_reg(TCPC_REG_DEV_CAP_1) & - TCPC_REG_DEV_CAP_1_PWRROLE_MASK) { - case TCPC_REG_DEV_CAP_1_PWRROLE_SRC_OR_SNK: - case TCPC_REG_DEV_CAP_1_PWRROLE_SNK: - case TCPC_REG_DEV_CAP_1_PWRROLE_SNK_ACC: - tcpci_regs[TCPC_REG_ROLE_CTRL].value = 0x0A; - tcpci_regs[TCPC_REG_MSG_HDR_INFO].value = 0x04; - break; - - case TCPC_REG_DEV_CAP_1_PWRROLE_DRP: - if (dead_battery()) - tcpci_regs[TCPC_REG_ROLE_CTRL].value = 0x0A; - else if (debug_accessory_indicator_supported()) - tcpci_regs[TCPC_REG_ROLE_CTRL].value = 0x4A; - else - tcpci_regs[TCPC_REG_ROLE_CTRL].value = 0x0F; - tcpci_regs[TCPC_REG_MSG_HDR_INFO].value = 0x04; - break; - - case TCPC_REG_DEV_CAP_1_PWRROLE_SRC: - if (!dead_battery()) - tcpci_regs[TCPC_REG_ROLE_CTRL].value = 0x05; - tcpci_regs[TCPC_REG_MSG_HDR_INFO].value = 0x0D; - break; - - case TCPC_REG_DEV_CAP_1_PWRROLE_SRC_SNK_DRP_ADPT_CBL: - case TCPC_REG_DEV_CAP_1_PWRROLE_SRC_SNK_DRP: - if (dead_battery()) - tcpci_regs[TCPC_REG_ROLE_CTRL].value = 0x0A; - else if (debug_accessory_indicator_supported()) - tcpci_regs[TCPC_REG_ROLE_CTRL].value = 0x4A; - else - tcpci_regs[TCPC_REG_ROLE_CTRL].value = 0x0F; - tcpci_regs[TCPC_REG_MSG_HDR_INFO].value = 0x04; - break; - } -} -/*****************************************************************************/ - -void mock_tcpci_reset(void) -{ - tcpci_reset_register_defaults(); -} - -void mock_tcpci_set_reg(int reg_offset, uint16_t value) -{ - struct tcpci_reg *reg = tcpci_regs + reg_offset; - - reg->value = value; - ccprints("TCPCI mock set %s = 0x%x", reg->name, reg->value); -} - -void mock_tcpci_set_reg_bits(int reg_offset, uint16_t mask) -{ - struct tcpci_reg *reg = tcpci_regs + reg_offset; - uint16_t old_value = reg->value; - - reg->value |= mask; - ccprints("TCPCI mock set bits %s (mask=0x%x) = 0x%x -> 0x%x", - reg->name, mask, old_value, reg->value); -} - -void mock_tcpci_clr_reg_bits(int reg_offset, uint16_t mask) -{ - struct tcpci_reg *reg = tcpci_regs + reg_offset; - uint16_t old_value = reg->value; - - reg->value &= ~mask; - ccprints("TCPCI mock clr bits %s (mask=0x%x) = 0x%x -> 0x%x", - reg->name, mask, old_value, reg->value); -} - -uint16_t mock_tcpci_get_reg(int reg_offset) -{ - return tcpci_regs[reg_offset].value; -} - -int tcpci_i2c_xfer(int port, uint16_t addr_flags, - const uint8_t *out, int out_size, - uint8_t *in, int in_size, int flags) -{ - struct tcpci_reg *reg; - - if (port != I2C_PORT_HOST_TCPC) { - ccprints("ERROR: wrong I2C port %d", port); - return EC_ERROR_UNKNOWN; - } - if (addr_flags != MOCK_TCPCI_I2C_ADDR_FLAGS) { - ccprints("ERROR: wrong I2C address 0x%x", addr_flags); - return EC_ERROR_UNKNOWN; - } - - if (rx_pos > 0) { - if (rx_pos + in_size > rx_buffer[0] + 1) { - ccprints("ERROR: rx in_size"); - return EC_ERROR_UNKNOWN; - } - memcpy(in, rx_buffer + rx_pos, in_size); - rx_pos += in_size; - if (rx_pos == rx_buffer[0] + 1) { - print_header("RX", UINT16_FROM_BYTE_ARRAY_LE( - rx_buffer, 2)); - rx_pos = -1; - } - return EC_SUCCESS; - } - - if (out_size == 0) { - ccprints("ERROR: out_size == 0"); - return EC_ERROR_UNKNOWN; - } - if (tx_pos != -1) { - if (tx_pos + out_size > BUFFER_SIZE) { - ccprints("ERROR: tx out_size"); - return EC_ERROR_UNKNOWN; - } - memcpy(tx_buffer + tx_pos, out, out_size); - tx_pos += out_size; - tx_msg_cnt = tx_pos; - if (tx_pos > 0 && tx_pos == tx_buffer[0] + 1) { - print_header("TX", UINT16_FROM_BYTE_ARRAY_LE( - tx_buffer, 1)); - tx_pos = -1; - tx_retry_cnt = -1; - } - return EC_SUCCESS; - } - reg = tcpci_regs + *out; - if (*out >= ARRAY_SIZE(tcpci_regs) || reg->size == 0) { - ccprints("ERROR: unknown reg 0x%x", *out); - return EC_ERROR_UNKNOWN; - } - if (reg->offset == TCPC_REG_TX_BUFFER) { - if (tx_pos != -1) { - ccprints("ERROR: TCPC_REG_TX_BUFFER not ready"); - return EC_ERROR_UNKNOWN; - } - tx_pos = 0; - tx_msg_cnt = 0; - if (out_size != 1) { - ccprints("ERROR: TCPC_REG_TX_BUFFER out_size != 1"); - return EC_ERROR_UNKNOWN; - } - } else if (reg->offset == TCPC_REG_RX_BUFFER) { - if (rx_pos != 0) { - ccprints("ERROR: TCPC_REG_RX_BUFFER not ready"); - return EC_ERROR_UNKNOWN; - } - if (in_size > BUFFER_SIZE || in_size > rx_buffer[0]) { - ccprints("ERROR: TCPC_REG_RX_BUFFER in_size"); - return EC_ERROR_UNKNOWN; - } - memcpy(in, rx_buffer, in_size); - rx_pos += in_size; - } else if (out_size == 1) { - if (in_size != reg->size) { - ccprints("ERROR: %s in_size %d != %d", reg->name, - in_size, reg->size); - return EC_ERROR_UNKNOWN; - } - if (reg->size == 1) - in[0] = reg->value; - else if (reg->size == 2) { - in[0] = reg->value; - in[1] = reg->value >> 8; - } - } else { - uint16_t value = 0; - - if (in_size != 0) { - ccprints("ERROR: in_size != 0"); - return EC_ERROR_UNKNOWN; - } - if (out_size != reg->size + 1) { - ccprints("ERROR: out_size != %d", reg->size + 1); - return EC_ERROR_UNKNOWN; - } - if (reg->size == 1) - value = out[1]; - else if (reg->size == 2) - value = out[1] + (out[2] << 8); - ccprints("%s TCPCI write %s = 0x%x", - task_get_name(task_get_current()), - reg->name, value); - if (reg->offset == TCPC_REG_ALERT) - reg->value &= ~value; - else - reg->value = value; - } - return EC_SUCCESS; -} -DECLARE_TEST_I2C_XFER(tcpci_i2c_xfer); - -void tcpci_register_dump(void) -{ - int reg; - int cc1, cc2; - - ccprints("********* TCPCI Register Dump ***********"); - reg = mock_tcpci_get_reg(TCPC_REG_ALERT); - ccprints("TCPC_REG_ALERT = 0x%08X", reg); - if (reg) { - if (reg & BIT(0)) - ccprints("\t0001: CC Status"); - if (reg & BIT(1)) - ccprints("\t0002: Power Status"); - if (reg & BIT(2)) - ccprints("\t0004: Received SOP* Message Status"); - if (reg & BIT(3)) - ccprints("\t0008: Received Hard Reset"); - if (reg & BIT(4)) - ccprints("\t0010: Transmit SOP* Message Failed"); - if (reg & BIT(5)) - ccprints("\t0020: Transmit SOP* Message Discarded"); - if (reg & BIT(6)) - ccprints("\t0040: Transmit SOP* Message Successful"); - if (reg & BIT(7)) - ccprints("\t0080: Vbus Voltage Alarm Hi"); - if (reg & BIT(8)) - ccprints("\t0100: Vbus Voltage Alarm Lo"); - if (reg & BIT(9)) - ccprints("\t0200: Fault"); - if (reg & BIT(10)) - ccprints("\t0400: Rx Buffer Overflow"); - if (reg & BIT(11)) - ccprints("\t0800: Vbus Sink Disconnect Detected"); - if (reg & BIT(12)) - ccprints("\t1000: Beginning SOP* Message Status"); - if (reg & BIT(13)) - ccprints("\t2000: Extended Status"); - if (reg & BIT(14)) - ccprints("\t4000: Alert Extended"); - if (reg & BIT(15)) - ccprints("\t8000: Vendor Defined Alert"); - } - - reg = mock_tcpci_get_reg(TCPC_REG_TCPC_CTRL); - ccprints("TCPC_REG_TCPC_CTRL = 0x%04X", reg); - if (reg & BIT(0)) - ccprints("\t01: Plug Orientation FLIP"); - if (reg & BIT(1)) - ccprints("\t02: BIST Test Mode"); - if (reg & (BIT(2) | BIT(3))) { - switch ((reg >> 2) & 3) { - case 2: - ccprints("\t08: Enable Clock Stretching"); - break; - case 3: - ccprints("\t0C: Enable Clock Stretching if !Alert"); - break; - } - } - if (reg & BIT(4)) - ccprints("\t10: Debug Accessory controlled by TCPM"); - if (reg & BIT(5)) - ccprints("\t20: Watchdog Timer enabled"); - if (reg & BIT(6)) - ccprints("\t40: Looking4Connection Alert enabled"); - if (reg & BIT(7)) - ccprints("\t80: SMBus PEC enabled"); - - reg = mock_tcpci_get_reg(TCPC_REG_ROLE_CTRL); - ccprints("TCPC_REG_ROLE_CTRL = 0x%04X", reg); - cc1 = (reg >> 0) & 3; - switch (cc1) { - case 0: - ccprints("\t00: CC1 == Ra"); - break; - case 1: - ccprints("\t01: CC1 == Rp"); - break; - case 2: - ccprints("\t02: CC1 == Rd"); - break; - case 3: - ccprints("\t03: CC1 == OPEN"); - break; - } - cc2 = (reg >> 2) & 3; - switch (cc2) { - case 0: - ccprints("\t00: CC2 == Ra"); - break; - case 1: - ccprints("\t04: CC2 == Rp"); - break; - case 2: - ccprints("\t08: CC2 == Rd"); - break; - case 3: - ccprints("\t0C: CC2 == OPEN"); - break; - } - switch ((reg >> 4) & 3) { - case 0: - ccprints("\t00: Rp Value == default"); - break; - case 1: - ccprints("\t10: Rp Value == 1.5A"); - break; - case 2: - ccprints("\t20: Rp Value == 3A"); - break; - } - if (reg & BIT(6)) - ccprints("\t40: DRP"); - - reg = mock_tcpci_get_reg(TCPC_REG_FAULT_CTRL); - ccprints("TCPC_REG_FAULT_CTRL = 0x%04X", reg); - if (reg & BIT(0)) - ccprints("\t01: Vconn Over Current Fault"); - if (reg & BIT(1)) - ccprints("\t02: Vbus OVP Fault"); - if (reg & BIT(2)) - ccprints("\t04: Vbus OCP Fault"); - if (reg & BIT(3)) - ccprints("\t08: Vbus Discharge Fault"); - if (reg & BIT(4)) - ccprints("\t10: Force OFF Vbus"); - - reg = mock_tcpci_get_reg(TCPC_REG_POWER_CTRL); - ccprints("TCPC_REG_POWER_CTRL = 0x%04X", reg); - if (reg & BIT(0)) - ccprints("\t01: Enable Vconn"); - if (reg & BIT(1)) - ccprints("\t02: Vconn Power Supported"); - if (reg & BIT(2)) - ccprints("\t04: Force Discharge"); - if (reg & BIT(3)) - ccprints("\t08: Enable Bleed Discharge"); - if (reg & BIT(4)) - ccprints("\t10: Auto Discharge Disconnect"); - if (reg & BIT(5)) - ccprints("\t20: Disable Voltage Alarms"); - if (reg & BIT(6)) - ccprints("\t40: VBUS_VOLTAGE monitor disabled"); - if (reg & BIT(7)) - ccprints("\t80: Fast Role Swap enabled"); - - reg = mock_tcpci_get_reg(TCPC_REG_CC_STATUS); - ccprints("TCPC_REG_CC_STATUS = 0x%04X", reg); - switch ((reg >> 0) & 3) { - case 0: - switch (cc1) { - case 1: - ccprints("\t00: CC1-Rp SRC.Open"); - break; - case 2: - ccprints("\t00: CC1-Rd SNK.Open"); - break; - } - break; - case 1: - switch (cc1) { - case 1: - ccprints("\t01: CC1-Rp SRC.Ra"); - break; - case 2: - ccprints("\t01: CC1-Rd SNK.Default"); - break; - } - break; - case 2: - switch (cc1) { - case 1: - ccprints("\t02: CC1-Rp SRC.Rd"); - break; - case 2: - ccprints("\t02: CC1-Rd SNK.Power1.5"); - break; - } - break; - case 3: - switch (cc1) { - case 2: - ccprints("\t03: CC1-Rd SNK.Power3.0"); - break; - } - break; - } - switch ((reg >> 2) & 3) { - case 0: - switch (cc2) { - case 1: - ccprints("\t00: CC2-Rp SRC.Open"); - break; - case 2: - ccprints("\t00: CC2-Rd SNK.Open"); - break; - } - break; - case 1: - switch (cc2) { - case 1: - ccprints("\t04: CC2-Rp SRC.Ra"); - break; - case 2: - ccprints("\t04: CC2-Rd SNK.Default"); - break; - } - break; - case 2: - switch (cc2) { - case 1: - ccprints("\t08: CC2-Rp SRC.Rd"); - break; - case 2: - ccprints("\t08: CC2-Rd SNK.Power1.5"); - break; - } - break; - case 3: - switch (cc2) { - case 2: - ccprints("\t0C: CC2-Rd SNK.Power3.0"); - break; - } - break; - } - if (reg & BIT(4)) - ccprints("\t10: Presenting Rd"); - else - ccprints("\t00: Presenting Rp"); - if (reg & BIT(5)) - ccprints("\t20: Looking4Connection"); - - reg = mock_tcpci_get_reg(TCPC_REG_POWER_STATUS); - ccprints("TCPC_REG_POWER_STATUS = 0x%04X", reg); - if (reg & BIT(0)) - ccprints("\t01: Sinking Vbus"); - if (reg & BIT(1)) - ccprints("\t02: Vconn Present"); - if (reg & BIT(2)) - ccprints("\t04: Vbus Present"); - if (reg & BIT(3)) - ccprints("\t08: Vbus Detect enabled"); - if (reg & BIT(4)) - ccprints("\t10: Sourcing Vbus"); - if (reg & BIT(5)) - ccprints("\t20: Sourcing non-default voltage"); - if (reg & BIT(6)) - ccprints("\t40: TCPC Initialization"); - if (reg & BIT(7)) - ccprints("\t80: Debug Accessory Connected"); - - reg = mock_tcpci_get_reg(TCPC_REG_FAULT_STATUS); - ccprints("TCPC_REG_FAULT_STATUS = 0x%04X", reg); - if (reg & BIT(0)) - ccprints("\t01: I2C Interface Error"); - if (reg & BIT(1)) - ccprints("\t02: Vconn Over Current Fault"); - if (reg & BIT(2)) - ccprints("\t04: Vbus OVP Fault"); - if (reg & BIT(3)) - ccprints("\t08: Vbus OCP Fault"); - if (reg & BIT(4)) - ccprints("\t10: Forced Discharge Failed"); - if (reg & BIT(5)) - ccprints("\t20: Auto Discharge Failed"); - if (reg & BIT(6)) - ccprints("\t40: Force OFF Vbus"); - if (reg & BIT(7)) - ccprints("\t80: TCPCI Registers Reset2Default"); - - reg = mock_tcpci_get_reg(TCPC_REG_EXT_STATUS); - ccprints("TCPC_REG_EXT_STATUS = 0x%04X", reg); - if (reg & BIT(0)) - ccprints("\t01: Vbus is at vSafe0V"); - - reg = mock_tcpci_get_reg(TCPC_REG_ALERT_EXT); - ccprints("TCPC_REG_ALERT_EXT = 0x%04X", reg); - if (reg & BIT(0)) - ccprints("\t01: SNK Fast Role Swap"); - if (reg & BIT(1)) - ccprints("\t02: SRC Fast Role Swap"); - if (reg & BIT(2)) - ccprints("\t04: Timer Expired"); - - reg = mock_tcpci_get_reg(TCPC_REG_COMMAND); - ccprints("TCPC_REG_COMMAND = 0x%04X", reg); - switch (reg) { - case 0x11: - ccprints("\t11: WakeI2C"); - break; - case 0x22: - ccprints("\t22: DisableVbusDetect"); - break; - case 0x33: - ccprints("\t33: EnableVbusDetect"); - break; - case 0x44: - ccprints("\t44: DisableSinkVbus"); - break; - case 0x55: - ccprints("\t55: SinkVbus"); - break; - case 0x66: - ccprints("\t66: DisableSourceVbus"); - break; - case 0x77: - ccprints("\t77: SourceVbusDefaultVoltage"); - break; - case 0x88: - ccprints("\t88: SourceVbusNondefaultVoltage"); - break; - case 0x99: - ccprints("\t99: Looking4Connection"); - break; - case 0xAA: - ccprints("\tAA: RxOneMore"); - break; - case 0xCC: - ccprints("\tCC: SendFRSwapSignal"); - break; - case 0xDD: - ccprints("\tDD: ResetTransmitBuffer"); - break; - case 0xEE: - ccprints("\tEE: ResetReceiveBuffer"); - break; - case 0xFF: - ccprints("\tFF: I2C Idle"); - break; - } - - reg = mock_tcpci_get_reg(TCPC_REG_MSG_HDR_INFO); - ccprints("TCPC_REG_MSG_HDR_INFO = 0x%04X", reg); - if (reg & BIT(0)) - ccprints("\t01: Power Role SRC"); - else - ccprints("\t00: Power Role SNK"); - switch ((reg >> 1) & 3) { - case 0: - ccprints("\t00: PD Revision 1.0"); - break; - case 1: - ccprints("\t02: PD Revision 2.0"); - break; - case 2: - ccprints("\t04: PD Revision 3.0"); - break; - } - if (reg & BIT(3)) - ccprints("\t08: Data Role DFP"); - else - ccprints("\t00: Data Role UFP"); - if (reg & BIT(4)) - ccprints("\t10: Message originating from Cable Plug"); - else - ccprints("\t00: Message originating from SRC/SNK/DRP"); - - reg = mock_tcpci_get_reg(TCPC_REG_RX_BUFFER); - ccprints("TCPC_REG_RX_BUFFER = 0x%04X", reg); - - reg = mock_tcpci_get_reg(TCPC_REG_TRANSMIT); - ccprints("TCPC_REG_TRANSMIT = 0x%04X", reg); - ccprints("*****************************************"); -} diff --git a/common/mock/tcpm_mock.c b/common/mock/tcpm_mock.c deleted file mode 100644 index 2c212cf8c9..0000000000 --- a/common/mock/tcpm_mock.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ -/* Mock for the TCPM interface */ - -#include "common.h" -#include "console.h" -#include "memory.h" -#include "mock/tcpm_mock.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -struct mock_tcpm_t mock_tcpm[CONFIG_USB_PD_PORT_MAX_COUNT]; - -/** - * Gets the next waiting RX message. - * - * @param port Type-C port number - * @param payload Pointer to location to copy payload of PD message - * @param header The header of PD message - * - * @return EC_SUCCESS or error - */ -int tcpm_dequeue_message(int port, uint32_t *payload, int *header) -{ - if (!tcpm_has_pending_message(port)) - return EC_ERROR_BUSY; - - *header = mock_tcpm[port].mock_header; - memcpy(payload, mock_tcpm[port].mock_rx_chk_buf, - sizeof(mock_tcpm[port].mock_rx_chk_buf)); - - return EC_SUCCESS; -} - -/** - * Returns true if the tcpm has RX messages waiting to be consumed. - */ -int tcpm_has_pending_message(int port) -{ - return mock_tcpm[port].mock_has_pending_message; -} - -/** - * Resets all mock TCPM ports - */ -void mock_tcpm_reset(void) -{ - int port; - - for (port = 0 ; port < CONFIG_USB_PD_PORT_MAX_COUNT ; ++port) - mock_tcpm[port].mock_has_pending_message = 0; -} - -/** - * Sets up a message to be received, with optional data payload. If cnt==0, - * then data can be NULL. - */ -void mock_tcpm_rx_msg(int port, uint16_t header, int cnt, const uint32_t *data) -{ - mock_tcpm[port].mock_header = header; - if (cnt > 0) { - int idx; - - for (idx = 0 ; (idx < cnt) && (idx < MOCK_CHK_BUF_SIZE) ; ++idx) - mock_tcpm[port].mock_rx_chk_buf[idx] = data[idx]; - } - mock_tcpm[port].mock_has_pending_message = 1; -} diff --git a/common/mock/timer_mock.c b/common/mock/timer_mock.c deleted file mode 100644 index dc83aa24d5..0000000000 --- a/common/mock/timer_mock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "mock/timer_mock.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -static timestamp_t now; - -void set_time(timestamp_t now_) -{ - now = now_; -} - -timestamp_t get_time(void) -{ - return now; -}; diff --git a/common/mock/usb_mux_mock.c b/common/mock/usb_mux_mock.c deleted file mode 100644 index f2db5cf8bd..0000000000 --- a/common/mock/usb_mux_mock.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ -/* Mock USB Type-C mux */ - -#include "common.h" -#include "console.h" -#include "usb_mux.h" -#include "mock/usb_mux_mock.h" -#include "memory.h" - -#ifndef CONFIG_COMMON_RUNTIME -#define cprints(format, args...) -#endif - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -/* Public API for controlling/inspecting this mock */ -struct mock_usb_mux_ctrl mock_usb_mux; - -void mock_usb_mux_reset(void) -{ - memset(&mock_usb_mux, 0, sizeof(mock_usb_mux)); -} - -static int mock_init(const struct usb_mux *me) -{ - return EC_SUCCESS; -} - -static int mock_set(const struct usb_mux *me, mux_state_t mux_state, - bool *ack_required) -{ - /* Mock does not use host command ACKs */ - *ack_required = false; - - mock_usb_mux.state = mux_state; - ++mock_usb_mux.num_set_calls; - ccprints("[MUX] Set to 0x%02x", mux_state); - - return EC_SUCCESS; -} - -int mock_get(const struct usb_mux *me, mux_state_t *mux_state) -{ - *mux_state = mock_usb_mux.state; - return EC_SUCCESS; -} - -static int mock_enter_low_power_mode(const struct usb_mux *me) -{ - return EC_SUCCESS; -} - -const struct usb_mux_driver mock_usb_mux_driver = { - .init = &mock_init, - .set = &mock_set, - .get = &mock_get, - .enter_low_power_mode = &mock_enter_low_power_mode, -}; diff --git a/common/mock/usb_pd_dpm_mock.c b/common/mock/usb_pd_dpm_mock.c deleted file mode 100644 index 8b6fbaa30e..0000000000 --- a/common/mock/usb_pd_dpm_mock.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* - * Mock of Device Policy Manager implementation - * Refer to USB PD 3.0 spec, version 2.0, sections 8.2 and 8.3 - */ - -#include "usb_pd.h" -#include "mock/usb_pd_dpm_mock.h" -#include "memory.h" -#include "usb_pd_tcpm.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -struct mock_dpm_port_t dpm[CONFIG_USB_PD_PORT_MAX_COUNT]; - -void mock_dpm_reset(void) -{ - /* Reset all values to 0. */ - memset(dpm, 0, sizeof(dpm)); -} - -void dpm_init(int port) -{ - dpm[port].mode_entry_done = false; - dpm[port].mode_exit_request = false; -} - -void dpm_vdm_acked(int port, enum tcpci_msg_type type, int vdo_count, - uint32_t *vdm) -{ -} - -void dpm_vdm_naked(int port, enum tcpci_msg_type type, uint16_t svid, - uint8_t vdm_cmd) -{ -} - -void dpm_set_mode_exit_request(int port) -{ -} - -void dpm_run(int port) -{ -} - -void dpm_evaluate_sink_fixed_pdo(int port, uint32_t vsafe5v_pdo) -{ -} - -void dpm_add_non_pd_sink(int port) -{ -} - -void dpm_remove_sink(int port) -{ -} - -void dpm_remove_source(int port) -{ -} - -int dpm_get_source_pdo(const uint32_t **src_pdo, const int port) -{ - *src_pdo = pd_src_pdo; - return pd_src_pdo_cnt; -} diff --git a/common/mock/usb_pe_sm_mock.c b/common/mock/usb_pe_sm_mock.c deleted file mode 100644 index 8d1a25324b..0000000000 --- a/common/mock/usb_pe_sm_mock.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* Mock USB PE state machine */ - -#include "common.h" -#include "console.h" -#include "usb_pd.h" -#include "usb_pe_sm.h" -#include "mock/usb_pe_sm_mock.h" -#include "memory.h" -#include "usb_pd_tcpm.h" - -#ifndef CONFIG_COMMON_RUNTIME -#define cprints(format, args...) -#endif - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -struct mock_pe_port_t mock_pe_port[CONFIG_USB_PD_PORT_MAX_COUNT]; - - -/** - * Resets all mock PE ports to initial values - */ -void mock_pe_port_reset(void) -{ - int port; - - for (port = 0 ; port < CONFIG_USB_PD_PORT_MAX_COUNT ; ++port) { - mock_pe_port[port].mock_pe_error = -1; - /* These mock variable only get set to 1 by various functions, - * so initialize them to 0. Tests can verify they are still 0 - * if that's part of the pass criteria. - */ - mock_pe_port[port].mock_pe_message_received = 0; - mock_pe_port[port].mock_pe_message_sent = 0; - mock_pe_port[port].mock_pe_message_discarded = 0; - mock_pe_port[port].mock_got_soft_reset = 0; - mock_pe_port[port].mock_pe_got_hard_reset = 0; - mock_pe_port[port].mock_pe_hard_reset_sent = 0; - } -} - -void pe_report_error(int port, enum pe_error e, enum tcpci_msg_type type) -{ - mock_pe_port[port].mock_pe_error = e; - mock_pe_port[port].sop = type; -} - -void pe_report_discard(int port) -{ - mock_pe_port[port].mock_pe_message_discarded = 1; -} - -void pe_got_hard_reset(int port) -{ - mock_pe_port[port].mock_pe_got_hard_reset = 1; -} - -void pe_message_received(int port) -{ - mock_pe_port[port].mock_pe_message_received = 1; -} - -void pe_message_sent(int port) -{ - mock_pe_port[port].mock_pe_message_sent = 1; -} - -void pe_hard_reset_sent(int port) -{ - mock_pe_port[port].mock_pe_hard_reset_sent = 1; -} - -void pe_got_soft_reset(int port) -{ - mock_pe_port[port].mock_got_soft_reset = 1; -} - -bool pe_in_frs_mode(int port) -{ - return false; -} - -bool pe_in_local_ams(int port) -{ - /* We will probably want to change this in the future */ - return false; -} - -const uint32_t * const pd_get_src_caps(int port) -{ - return NULL; -} - -uint8_t pd_get_src_cap_cnt(int port) -{ - return 0; -} - -void pd_set_src_caps(int port, int cnt, uint32_t *src_caps) -{ -} - -void pd_request_power_swap(int port) -{} - -int pd_get_rev(int port, enum tcpci_msg_type type) -{ - return IS_ENABLED(CONFIG_USB_PD_REV30) ? PD_REV30 : PD_REV20; -} - -void pe_invalidate_explicit_contract(int port) -{ -} diff --git a/common/mock/usb_prl_mock.c b/common/mock/usb_prl_mock.c deleted file mode 100644 index d5f4781829..0000000000 --- a/common/mock/usb_prl_mock.c +++ /dev/null @@ -1,200 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - * - * Mock Protocol Layer module. - */ -#include <string.h> -#include "common.h" -#include "usb_emsg.h" -#include "usb_pe_sm.h" -#include "usb_prl_sm.h" -#include "mock/usb_prl_mock.h" -#include "task.h" -#include "test_util.h" -#include "timer.h" -#include "usb_pd_tcpm.h" - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -/* Defaults should all be 0 values. */ -struct extended_msg rx_emsg[CONFIG_USB_PD_PORT_MAX_COUNT]; -struct extended_msg tx_emsg[CONFIG_USB_PD_PORT_MAX_COUNT]; - -struct mock_prl_port_t { - enum pd_ctrl_msg_type last_ctrl_msg; - enum pd_data_msg_type last_data_msg; - enum tcpci_msg_type last_tx_type; - bool message_sent; - bool message_received; - enum pe_error error; - enum tcpci_msg_type error_tx_type; -}; - -struct mock_prl_port_t mock_prl_port[CONFIG_USB_PD_PORT_MAX_COUNT]; - -void mock_prl_reset(void) -{ - int port; - - /* Reset all values to 0. */ - memset(rx_emsg, 0, sizeof(rx_emsg)); - memset(tx_emsg, 0, sizeof(tx_emsg)); - - memset(mock_prl_port, 0, sizeof(mock_prl_port)); - - for (port = 0 ; port < CONFIG_USB_PD_PORT_MAX_COUNT ; ++port) { - mock_prl_port[port].last_tx_type = TCPCI_MSG_INVALID; - mock_prl_port[port].error_tx_type = TCPCI_MSG_INVALID; - } -} - -void prl_end_ams(int port) -{} - -void prl_execute_hard_reset(int port) -{ - mock_prl_port[port].last_ctrl_msg = 0; - mock_prl_port[port].last_data_msg = 0; - mock_prl_port[port].last_tx_type = TCPCI_MSG_TX_HARD_RESET; -} - -enum pd_rev_type prl_get_rev(int port, enum tcpci_msg_type partner) -{ - return PD_REV30; -} - -void prl_hard_reset_complete(int port) -{} - -int prl_is_running(int port) -{ - return 1; -} - -__overridable bool prl_is_busy(int port) -{ - return false; -} - -void prl_reset_soft(int port) -{} - -void prl_send_ctrl_msg(int port, enum tcpci_msg_type type, - enum pd_ctrl_msg_type msg) -{ - mock_prl_port[port].last_ctrl_msg = msg; - mock_prl_port[port].last_data_msg = 0; - mock_prl_port[port].last_tx_type = type; -} - -void prl_send_data_msg(int port, enum tcpci_msg_type type, - enum pd_data_msg_type msg) -{ - mock_prl_port[port].last_data_msg = msg; - mock_prl_port[port].last_ctrl_msg = 0; - mock_prl_port[port].last_tx_type = type; -} - -void prl_send_ext_data_msg(int port, enum tcpci_msg_type type, - enum pd_ext_msg_type msg) -{} - -void prl_set_rev(int port, enum tcpci_msg_type partner, - enum pd_rev_type rev) -{} - - -int mock_prl_wait_for_tx_msg(int port, - enum tcpci_msg_type tx_type, - enum pd_ctrl_msg_type ctrl_msg, - enum pd_data_msg_type data_msg, - int timeout) -{ - uint64_t end_time = get_time().val + timeout; - - while (get_time().val < end_time) { - if (mock_prl_port[port].last_tx_type != TCPCI_MSG_INVALID) { - TEST_EQ(mock_prl_port[port].last_tx_type, - tx_type, "%d"); - TEST_EQ(mock_prl_port[port].last_ctrl_msg, - ctrl_msg, "%d"); - TEST_EQ(mock_prl_port[port].last_data_msg, - data_msg, "%d"); - mock_prl_clear_last_sent_msg(port); - return EC_SUCCESS; - } - task_wait_event(5 * MSEC); - } - /* A message of the expected type should have been sent by end_time. */ - TEST_ASSERT(0); - return EC_ERROR_UNKNOWN; -} - -enum pd_ctrl_msg_type mock_prl_get_last_sent_ctrl_msg(int port) -{ - enum pd_ctrl_msg_type last = mock_prl_port[port].last_ctrl_msg; - - mock_prl_clear_last_sent_msg(port); - return last; -} - -enum pd_data_msg_type mock_prl_get_last_sent_data_msg(int port) -{ - enum pd_data_msg_type last = mock_prl_port[port].last_data_msg; - - mock_prl_clear_last_sent_msg(port); - return last; -} - -void mock_prl_clear_last_sent_msg(int port) -{ - mock_prl_port[port].last_data_msg = 0; - mock_prl_port[port].last_ctrl_msg = 0; - mock_prl_port[port].last_tx_type = TCPCI_MSG_INVALID; -} - -timestamp_t prl_get_tcpc_tx_success_ts(int port) -{ - return get_time(); -} -void mock_prl_message_sent(int port) -{ - mock_prl_port[port].message_sent = 1; -} - -void mock_prl_message_received(int port) -{ - mock_prl_port[port].message_received = 1; -} - -void mock_prl_report_error(int port, enum pe_error e, - enum tcpci_msg_type tx_type) -{ - mock_prl_port[port].error = e; - mock_prl_port[port].error_tx_type = tx_type; -} - -void prl_run(int port, int evt, int en) -{ - if (mock_prl_port[port].message_sent) { - ccprints("message_sent"); - pe_message_sent(port); - mock_prl_port[port].message_sent = 0; - } - if (mock_prl_port[port].message_received) { - ccprints("message_received"); - pe_message_received(port); - mock_prl_port[port].message_received = 0; - } - if (mock_prl_port[port].error_tx_type != TCPCI_MSG_INVALID) { - ccprints("pe_error %d", mock_prl_port[port].error); - pe_report_error(port, - mock_prl_port[port].error, - mock_prl_port[port].error_tx_type); - mock_prl_port[port].error = 0; - mock_prl_port[port].error_tx_type = TCPCI_MSG_INVALID; - } -} diff --git a/common/mock/usb_tc_sm_mock.c b/common/mock/usb_tc_sm_mock.c deleted file mode 100644 index d55def12e2..0000000000 --- a/common/mock/usb_tc_sm_mock.c +++ /dev/null @@ -1,214 +0,0 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* Mock USB TC state machine */ - -#include "common.h" -#include "console.h" -#include "ec_commands.h" -#include "usb_tc_sm.h" -#include "mock/usb_tc_sm_mock.h" -#include "memory.h" - -#ifndef CONFIG_COMMON_RUNTIME -#define cprints(format, args...) -#endif - -#ifndef TEST_BUILD -#error "Mocks should only be in the test build." -#endif - -struct mock_tc_port_t mock_tc_port[CONFIG_USB_PD_PORT_MAX_COUNT]; - -void mock_tc_port_reset(void) -{ - int port; - - for (port = 0 ; port < CONFIG_USB_PD_PORT_MAX_COUNT ; ++port) { - mock_tc_port[port].rev = PD_REV30; - mock_tc_port[port].pd_enable = 0; - mock_tc_port[port].msg_tx_id = 0; - mock_tc_port[port].msg_rx_id = 0; - mock_tc_port[port].sop = TCPCI_MSG_INVALID; - mock_tc_port[port].lcl_rp = TYPEC_RP_RESERVED; - mock_tc_port[port].attached_snk = 0; - mock_tc_port[port].attached_src = 0; - mock_tc_port[port].vconn_src = false; - mock_tc_port[port].data_role = PD_ROLE_UFP; - mock_tc_port[port].power_role = PD_ROLE_SINK; - } -} - -enum pd_cable_plug tc_get_cable_plug(int port) -{ - return PD_PLUG_FROM_DFP_UFP; -} - -uint8_t tc_get_pd_enabled(int port) -{ - return mock_tc_port[port].pd_enable; -} - -void typec_select_src_collision_rp(int port, enum tcpc_rp_value rp) -{ - mock_tc_port[port].lcl_rp = rp; -} - -void typec_select_src_current_limit_rp(int port, enum tcpc_rp_value rp) -{ -} - -int tc_is_attached_src(int port) -{ - return mock_tc_port[port].attached_src; -} - -int tc_is_attached_snk(int port) -{ - return mock_tc_port[port].attached_snk; -} - -void tc_prs_snk_src_assert_rp(int port) -{ - mock_tc_port[port].attached_snk = 0; - mock_tc_port[port].attached_src = 1; -} - -void tc_prs_src_snk_assert_rd(int port) -{ - mock_tc_port[port].attached_snk = 1; - mock_tc_port[port].attached_src = 0; -} - -int typec_update_cc(int port) -{ - return EC_SUCCESS; -} - -int tc_check_vconn_swap(int port) -{ - return 0; -} - -void tc_ctvpd_detected(int port) -{} - -int tc_is_vconn_src(int port) -{ - return mock_tc_port[port].vconn_src; -} - -void tc_hard_reset_request(int port) -{ - mock_tc_port_reset(); -} - -void tc_partner_dr_data(int port, int en) -{} - -void tc_partner_dr_power(int port, int en) -{} - -void tc_partner_unconstrainedpower(int port, int en) -{} - -void tc_partner_usb_comm(int port, int en) -{} - -void tc_pd_connection(int port, int en) -{} - -void tc_pr_swap_complete(int port, bool success) -{} - -void tc_src_power_off(int port) -{} - -void tc_start_error_recovery(int port) -{} - -void tc_snk_power_off(int port) -{} - -void tc_request_power_swap(int port) -{ -} - -enum pd_dual_role_states pd_get_dual_role(int port) -{ - return PD_DRP_TOGGLE_ON; -} - -enum pd_data_role pd_get_data_role(int port) -{ - return mock_tc_port[port].data_role; -} - -enum pd_power_role pd_get_power_role(int port) -{ - return mock_tc_port[port].power_role; -} - -enum pd_cc_states pd_get_task_cc_state(int port) -{ - return PD_CC_NONE; -} - -int pd_is_connected(int port) -{ - return 1; -} - -bool pd_is_disconnected(int port) -{ - return false; -} - -bool pd_get_partner_usb_comm_capable(int port) -{ - return true; -} - -bool pd_get_partner_dual_role_power(int port) -{ - return true; -} - -bool pd_capable(int port) -{ - return true; -} - -bool pd_waiting_on_partner_src_caps(int port) -{ - return false; -} - -void pd_set_suspend(int port, int suspend) -{ -} - -void pd_set_error_recovery(int port) -{ -} - -enum tcpc_cc_polarity pd_get_polarity(int port) -{ - return POLARITY_CC1; -} - -void pd_request_data_swap(int port) -{} - -void pd_request_vconn_swap_off(int port) -{} - -void pd_request_vconn_swap_on(int port) -{} - -bool pd_alt_mode_capable(int port) -{ - return false; -} |