From a08ff30622c84a87dcb423808a774c4f43f715bd Mon Sep 17 00:00:00 2001 From: Md Golam Tanvir Zim Date: Mon, 14 Apr 2025 20:01:53 +0100 Subject: [PATCH 1/2] mod/scmi_clock: Use physical index in scmi index lookup function Updated `find_agent_scmi_clock_idx()` to take a physical device index (`phy_dev_idx`) instead of a `fwk_id_t` clock id, for ease of use in SCMI notification implementation. No functional changes intended. Signed-off-by: Md Golam Tanvir Zim Change-Id: I2890507b40b0056f0c2689ee6bc6114e7e8f6cf1 --- module/scmi_clock/src/mod_scmi_clock.c | 15 +++++++++------ module/scmi_clock/test/mod_scmi_clock_unit_test.c | 12 +++++------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/module/scmi_clock/src/mod_scmi_clock.c b/module/scmi_clock/src/mod_scmi_clock.c index 244ff761..55481b70 100644 --- a/module/scmi_clock/src/mod_scmi_clock.c +++ b/module/scmi_clock/src/mod_scmi_clock.c @@ -347,11 +347,9 @@ static enum mod_scmi_clock_policy_status scmi_clock_ref_count_table_check( */ static int find_agent_scmi_clock_idx( unsigned int agent_id, - fwk_id_t clock_id, + unsigned int phy_dev_idx, unsigned int *clock_scmi_idx) { - unsigned int clock_dev_idx = fwk_id_get_element_idx(clock_id); - struct mod_scmi_clock_agent *agent = (struct mod_scmi_clock_agent *)scmi_clock_ctx.agent_table[agent_id]; @@ -362,7 +360,7 @@ static int find_agent_scmi_clock_idx( idx++) { if (fwk_id_get_element_idx( agent->agent_config->device_table[idx].element_id) == - clock_dev_idx) { + phy_dev_idx) { *clock_scmi_idx = idx; return FWK_SUCCESS; } @@ -478,7 +476,9 @@ static void clock_attributes_respond( FWK_LOG_DEBUG("[SCMI-CLK] %s @%d", __func__, __LINE__); } else { status = find_agent_scmi_clock_idx( - agent_id, clock_dev_id, &scmi_clock_idx); + agent_id, + fwk_id_get_element_idx(clock_dev_id), + &scmi_clock_idx); if (status != FWK_SUCCESS) { FWK_LOG_DEBUG("[SCMI-CLK] %s @%d", __func__, __LINE__); } else { @@ -2069,7 +2069,10 @@ static int scmi_clock_process_notification( } status = find_agent_scmi_clock_idx( - agent_id, notification_params->clock_id, &scmi_clock_idx); + agent_id, + fwk_id_get_element_idx(notification_params->clock_id), + &scmi_clock_idx); + if (status != FWK_SUCCESS) { return status; } diff --git a/module/scmi_clock/test/mod_scmi_clock_unit_test.c b/module/scmi_clock/test/mod_scmi_clock_unit_test.c index b6c2a771..94eb30b7 100644 --- a/module/scmi_clock/test/mod_scmi_clock_unit_test.c +++ b/module/scmi_clock/test/mod_scmi_clock_unit_test.c @@ -1728,37 +1728,35 @@ void test_scmi_clock_element_init(void) void test_find_agent_scmi_clock_idx(void) { int status; - fwk_id_t clock_id = FWK_ID_ELEMENT_INIT(FAKE_MODULE_IDX, CLOCK_DEV_IDX_FAKE3); unsigned int scmi_clock_idx; fwk_id_get_element_idx_Stub(get_element_idx_callback); /* agent id is 0, i.e. platform*/ - status = find_agent_scmi_clock_idx(0, clock_id, &scmi_clock_idx); + status = find_agent_scmi_clock_idx(0, CLOCK_DEV_IDX_FAKE3, &scmi_clock_idx); TEST_ASSERT_EQUAL(status, FWK_E_DATA); /* agent id is FAKE_SCMI_AGENT_IDX_PSCI */ - status = find_agent_scmi_clock_idx(FAKE_SCMI_AGENT_IDX_PSCI, clock_id, &scmi_clock_idx); + status = find_agent_scmi_clock_idx(FAKE_SCMI_AGENT_IDX_PSCI, CLOCK_DEV_IDX_FAKE3, &scmi_clock_idx); TEST_ASSERT_EQUAL(status, FWK_E_DATA); /* agent id is FAKE_SCMI_AGENT_IDX_OSPM0 */ - status = find_agent_scmi_clock_idx(FAKE_SCMI_AGENT_IDX_OSPM0, clock_id, &scmi_clock_idx); + status = find_agent_scmi_clock_idx(FAKE_SCMI_AGENT_IDX_OSPM0, CLOCK_DEV_IDX_FAKE3, &scmi_clock_idx); TEST_ASSERT_EQUAL(status, FWK_SUCCESS); TEST_ASSERT_EQUAL(scmi_clock_idx, SCMI_CLOCK_OSPM0_IDX3); /* agent id is FAKE_SCMI_AGENT_IDX_OSPM1 */ - status = find_agent_scmi_clock_idx(FAKE_SCMI_AGENT_IDX_OSPM1, clock_id, &scmi_clock_idx); + status = find_agent_scmi_clock_idx(FAKE_SCMI_AGENT_IDX_OSPM1, CLOCK_DEV_IDX_FAKE3, &scmi_clock_idx); TEST_ASSERT_EQUAL(status, FWK_SUCCESS); TEST_ASSERT_EQUAL(scmi_clock_idx, SCMI_CLOCK_OSPM1_IDX0); /* agent id is FAKE_SCMI_AGENT_IDX_OSPM1 but the clock is not accessible by the agent */ - clock_id = FWK_ID_ELEMENT(FAKE_MODULE_IDX, CLOCK_DEV_IDX_FAKE0); - status = find_agent_scmi_clock_idx(FAKE_SCMI_AGENT_IDX_OSPM1, clock_id, &scmi_clock_idx); + status = find_agent_scmi_clock_idx(FAKE_SCMI_AGENT_IDX_OSPM1, CLOCK_DEV_IDX_FAKE0, &scmi_clock_idx); TEST_ASSERT_EQUAL(status, FWK_E_DATA); } -- GitLab From 7090f3809dad53c5afbb1e386981ededbe1cec73 Mon Sep 17 00:00:00 2001 From: Md Golam Tanvir Zim Date: Sat, 12 Apr 2025 20:43:35 +0100 Subject: [PATCH 2/2] mod/scmi_clock: SCMI Notification enhancement in SCMI-clock Current SCMI Notification which is implemented in SCMI layer has an inherent limitation that it doesn't support custom notification payload which is required when the agents have their own distinct identification of the resources, i.e. SCMI clocks. The new implementation has moved the SCMI notification processing from SCMI to SCMI protocol layers so that each protocol can maintain and customize its own notification table and payload, respectively. Signed-off-by: Md Golam Tanvir Zim Change-Id: I0b11d6bc4dde0c8c148a4d274422ac11e753a781 --- module/scmi_clock/include/mod_scmi_clock.h | 1 + module/scmi_clock/src/mod_scmi_clock.c | 252 ++--- module/scmi_clock/test/config_scmi_clock.h | 61 +- .../test/mocks/Mockmod_scmi_clock_extra.c | 859 ------------------ .../test/mocks/Mockmod_scmi_clock_extra.h | 90 -- module/scmi_clock/test/mod_scmi_clock_extra.h | 26 - .../test/mod_scmi_clock_unit_test.c | 224 ++--- 7 files changed, 286 insertions(+), 1227 deletions(-) diff --git a/module/scmi_clock/include/mod_scmi_clock.h b/module/scmi_clock/include/mod_scmi_clock.h index 793111f3..65976cc1 100644 --- a/module/scmi_clock/include/mod_scmi_clock.h +++ b/module/scmi_clock/include/mod_scmi_clock.h @@ -199,6 +199,7 @@ enum mod_scmi_clock_policy_commit { enum scmi_clock_notification_id { SCMI_CLOCK_RATE_CHANGED = 0x000, SCMI_CLOCK_RATE_CHANGE_REQUESTED = 0x001, + SCMI_CLOCK_NOTIFICATION_COUNT, }; /*! diff --git a/module/scmi_clock/src/mod_scmi_clock.c b/module/scmi_clock/src/mod_scmi_clock.c index 55481b70..528f3953 100644 --- a/module/scmi_clock/src/mod_scmi_clock.c +++ b/module/scmi_clock/src/mod_scmi_clock.c @@ -34,8 +34,6 @@ # include #endif -#define MOD_SCMI_CLOCK_NOTIFICATION_COUNT 2 - struct clock_operations { /* * Service identifier currently requesting operation from this clock. @@ -93,8 +91,8 @@ struct mod_scmi_clock_ctx { #ifdef BUILD_HAS_SCMI_NOTIFICATIONS - /* SCMI notification API */ - const struct mod_scmi_notification_api *scmi_notification_api; + /* SCMI notification subscriber table */ + fwk_id_t ***notification_table; #endif }; @@ -392,6 +390,125 @@ static void clock_ref_count_allocate(void) sizeof(*scmi_clock_ctx.dev_clock_ref_count_table)); } +#ifdef BUILD_HAS_SCMI_NOTIFICATIONS +static enum scmi_clock_notification_id get_scmi_notification_id( + enum scmi_clock_command_id scmi_command_id) +{ + enum scmi_clock_notification_id notification_id = + SCMI_CLOCK_NOTIFICATION_COUNT; + + switch (scmi_command_id) { + case MOD_SCMI_CLOCK_RATE_NOTIFY: { + notification_id = SCMI_CLOCK_RATE_CHANGED; + break; + } + + case MOD_SCMI_CLOCK_RATE_CHANGE_REQUESTED_NOTIFY: { + notification_id = SCMI_CLOCK_RATE_CHANGE_REQUESTED; + break; + } + + default: + break; + } + + return notification_id; +} + +static void scmi_notification_init(void) +{ + unsigned int operation_count = SCMI_CLOCK_NOTIFICATION_COUNT; + unsigned int resource_count = scmi_clock_ctx.phy_device_count; + unsigned int subscriber_count = scmi_clock_ctx.agent_count; + + /* Allocate the top-level operation array */ + scmi_clock_ctx.notification_table = + fwk_mm_calloc(operation_count, sizeof(fwk_id_t **)); + + for (unsigned int op = 0; op < operation_count; op++) { + /* Allocate the resource array for each operation */ + scmi_clock_ctx.notification_table[op] = + fwk_mm_calloc(resource_count, sizeof(fwk_id_t *)); + + for (unsigned int res = 0; res < resource_count; res++) { + /* Allocate the subscriber array for each resource */ + scmi_clock_ctx.notification_table[op][res] = + fwk_mm_calloc(subscriber_count, sizeof(fwk_id_t)); + + for (unsigned int sub = 0; sub < subscriber_count; sub++) { + scmi_clock_ctx.notification_table[op][res][sub] = FWK_ID_NONE; + } + } + } +} + +static int scmi_notification_update_subscriber( + unsigned int operation_idx, + unsigned int resource_idx, + unsigned int subscriber_idx, + fwk_id_t service_id) +{ + if (!fwk_expect(operation_idx < SCMI_CLOCK_NOTIFICATION_COUNT) || + !fwk_expect(resource_idx < scmi_clock_ctx.phy_device_count) || + !fwk_expect(subscriber_idx < scmi_clock_ctx.agent_count)) { + return FWK_E_DATA; + } + + scmi_clock_ctx + .notification_table[operation_idx][resource_idx][subscriber_idx] = + service_id; + + return FWK_SUCCESS; +} + +static int scmi_notification_notify( + enum scmi_clock_notification_id operation_idx, + unsigned int requester_idx, + unsigned int resource_idx, + uint64_t data) +{ + int status; + unsigned int scmi_clock_idx; + + /* Skip subscriber_idx = 0 as it is the platform. */ + for (unsigned int subscriber_idx = 1; + subscriber_idx < scmi_clock_ctx.agent_count; + subscriber_idx++) { + fwk_id_t service_id = + scmi_clock_ctx.notification_table[operation_idx][resource_idx] + [subscriber_idx]; + + if (fwk_id_is_equal(service_id, FWK_ID_NONE)) { + continue; + } + + status = find_agent_scmi_clock_idx( + subscriber_idx, resource_idx, &scmi_clock_idx); + if (!fwk_expect(status == FWK_SUCCESS)) { + return status; + } + + struct scmi_clock_rate_notification_message_p2a message = { + .agent_id = requester_idx, + .clock_id = scmi_clock_idx, + .rate = { + [0] = (uint32_t)data, + [1] = (uint32_t)(data >> 32), + }, + }; + + scmi_clock_ctx.scmi_api->notify( + service_id, + (int)MOD_SCMI_PROTOCOL_ID_CLOCK, + (int)operation_idx, + (const void *)&message, + sizeof(message)); + } + + return FWK_SUCCESS; +} +#endif + /* * Helper for clock operations */ @@ -1549,21 +1666,21 @@ static int scmi_clock_rate_notify_handler( } # endif + unsigned int phy_dev_idx = fwk_id_get_element_idx(clock_device->element_id); + unsigned int notification_id = get_scmi_notification_id(command_id); + if (notification_id == SCMI_CLOCK_NOTIFICATION_COUNT) { + status = FWK_E_PARAM; + goto exit; + } + if (parameters->notify_enable) { - status = scmi_clock_ctx.scmi_notification_api - ->scmi_notification_add_subscriber( - MOD_SCMI_PROTOCOL_ID_CLOCK, - parameters->clock_id, - command_id, - service_id); + status = scmi_notification_update_subscriber( + notification_id, phy_dev_idx, agent_id, service_id); } else { - status = scmi_clock_ctx.scmi_notification_api - ->scmi_notification_remove_subscriber( - MOD_SCMI_PROTOCOL_ID_CLOCK, - agent_id, - parameters->clock_id, - command_id); + status = scmi_notification_update_subscriber( + notification_id, phy_dev_idx, agent_id, FWK_ID_NONE); } + if (status != FWK_SUCCESS) { goto exit; } @@ -1685,6 +1802,9 @@ static int scmi_clock_init(fwk_id_t module_id, unsigned int element_count, /* Allocate memory to device reference count */ clock_ref_count_allocate(); +#ifdef BUILD_HAS_SCMI_NOTIFICATIONS + scmi_notification_init(); +#endif return FWK_SUCCESS; } @@ -1730,36 +1850,9 @@ static int scmi_clock_element_init( scmi_clock_ref_count_table_update( fwk_id_get_element_idx(clock_id), MOD_CLOCK_STATE_RUNNING); } - return FWK_SUCCESS; } -#ifdef BUILD_HAS_SCMI_NOTIFICATIONS -static int scmi_init_notifications(unsigned int clock_devices) -{ - int status; - - status = scmi_clock_ctx.scmi_api->get_agent_count( - (unsigned int *)&scmi_clock_ctx.agent_count); - if (status != FWK_SUCCESS) { - return status; - } - fwk_assert(scmi_clock_ctx.agent_count != 0u); - - status = scmi_clock_ctx.scmi_notification_api->scmi_notification_init( - MOD_SCMI_PROTOCOL_ID_CLOCK, - scmi_clock_ctx.agent_count, - clock_devices, - MOD_SCMI_CLOCK_NOTIFICATION_COUNT); - - if (status != FWK_SUCCESS) { - return status; - } - - return FWK_SUCCESS; -} -#endif - static int scmi_clock_start(fwk_id_t id) { int status = FWK_SUCCESS; @@ -1779,9 +1872,6 @@ static int scmi_clock_start(fwk_id_t id) if (status != FWK_SUCCESS) { return status; } - - status = - scmi_init_notifications((unsigned int)scmi_clock_ctx.phy_device_count); #endif return status; } @@ -1816,16 +1906,6 @@ static int scmi_clock_bind(fwk_id_t id, unsigned int round) } #endif -#ifdef BUILD_HAS_SCMI_NOTIFICATIONS - status = fwk_module_bind( - FWK_ID_MODULE(FWK_MODULE_IDX_SCMI), - FWK_ID_API(FWK_MODULE_IDX_SCMI, MOD_SCMI_API_IDX_NOTIFICATION), - &scmi_clock_ctx.scmi_notification_api); - if (status != FWK_SUCCESS) { - return status; - } -#endif - return fwk_module_bind(FWK_ID_MODULE(FWK_MODULE_IDX_CLOCK), FWK_ID_API(FWK_MODULE_IDX_CLOCK, 0), &scmi_clock_ctx.clock_api); } @@ -2010,81 +2090,35 @@ static int scmi_clock_process_event(const struct fwk_event *event, } #ifdef BUILD_HAS_SCMI_NOTIFICATIONS - -static void scmi_clock_rate_change_notify( - enum scmi_clock_command_id command_id, - enum scmi_clock_notification_id notification_message_id, - unsigned int agent_id, - unsigned int scmi_clock_idx, - uint64_t clock_rate) -{ - int status; - - struct scmi_clock_rate_notification_message_p2a message; - - message.agent_id = agent_id; - message.clock_id = scmi_clock_idx; - message.rate[0] = (uint32_t)clock_rate; - message.rate[1] = (uint32_t)(clock_rate >> 32); - - status = scmi_clock_ctx.scmi_notification_api->scmi_notification_notify( - MOD_SCMI_PROTOCOL_ID_CLOCK, - command_id, - scmi_clock_idx, - notification_message_id, - &message, - sizeof(message)); - if (status != FWK_SUCCESS) { - FWK_LOG_DEBUG("[SCMI-clk] %s @%d", __func__, __LINE__); - } -} - static int scmi_clock_process_notification( const struct fwk_event *notification_event, struct fwk_event *resp_event) { - int status; - unsigned int notification_idx, agent_id, scmi_clock_idx; - enum scmi_clock_command_id command_id; - enum scmi_clock_notification_id message_id; + unsigned int notification_idx; + enum scmi_clock_notification_id notification_id; struct mod_clock_notification_params *notification_params = ((struct mod_clock_notification_params *)notification_event->params); - agent_id = notification_params->requester_id; notification_idx = fwk_id_get_notification_idx(notification_event->id); switch (notification_idx) { case (unsigned int)MOD_CLOCK_NOTIFICATION_IDX_RATE_CHANGED: - command_id = MOD_SCMI_CLOCK_RATE_NOTIFY; - message_id = SCMI_CLOCK_RATE_CHANGED; + notification_id = SCMI_CLOCK_RATE_CHANGED; break; case (unsigned int)MOD_CLOCK_NOTIFICATION_IDX_RATE_CHANGE_REQUESTED: - command_id = MOD_SCMI_CLOCK_RATE_CHANGE_REQUESTED_NOTIFY; - message_id = SCMI_CLOCK_RATE_CHANGE_REQUESTED; + notification_id = SCMI_CLOCK_RATE_CHANGE_REQUESTED; break; default: return FWK_E_PARAM; } - status = find_agent_scmi_clock_idx( - agent_id, + return scmi_notification_notify( + notification_id, + notification_params->requester_id, fwk_id_get_element_idx(notification_params->clock_id), - &scmi_clock_idx); - - if (status != FWK_SUCCESS) { - return status; - } - - scmi_clock_rate_change_notify( - command_id, - message_id, - agent_id, - scmi_clock_idx, notification_params->rate); - - return FWK_SUCCESS; } #endif diff --git a/module/scmi_clock/test/config_scmi_clock.h b/module/scmi_clock/test/config_scmi_clock.h index 281ceb88..5a3079fb 100644 --- a/module/scmi_clock/test/config_scmi_clock.h +++ b/module/scmi_clock/test/config_scmi_clock.h @@ -88,6 +88,63 @@ static const uint8_t dev_clock_ref_count_table_default[CLOCK_DEV_IDX_COUNT] = { static struct clock_operations clock_ops_table[CLOCK_DEV_IDX_COUNT]; +#ifdef BUILD_HAS_SCMI_NOTIFICATIONS +#define INIT_SUBSCRIBERS(SUBSCRIBER_COUNT, VALUE) \ + { [0 ... (FAKE_SCMI_AGENT_IDX_COUNT - 1)] = VALUE } + +#define INIT_RESOURCES(RESOURCE_COUNT, SUBSCRIBER_COUNT, VALUE) \ + { [0 ... (RESOURCE_COUNT - 1)] = INIT_SUBSCRIBERS(SUBSCRIBER_COUNT, VALUE) } + +#define INIT_TABLE(OPERATION_COUNT, RESOURCE_COUNT, SUBSCRIBER_COUNT, VALUE) \ + { [0 ... (OPERATION_COUNT -1)] = INIT_RESOURCES(RESOURCE_COUNT, SUBSCRIBER_COUNT, VALUE) } + +// static fwk_id_t subscriber_table_default[SCMI_CLOCK_NOTIFICATION_COUNT][CLOCK_DEV_IDX_COUNT][FAKE_SCMI_AGENT_IDX_COUNT] = +// INIT_TABLE(SCMI_CLOCK_NOTIFICATION_COUNT, CLOCK_DEV_IDX_COUNT, FAKE_SCMI_AGENT_IDX_COUNT, FWK_ID_NONE); + +// static fwk_id_t subscriber_table[SCMI_CLOCK_NOTIFICATION_COUNT][CLOCK_DEV_IDX_COUNT][FAKE_SCMI_AGENT_IDX_COUNT] = +// INIT_TABLE(SCMI_CLOCK_NOTIFICATION_COUNT, CLOCK_DEV_IDX_COUNT, FAKE_SCMI_AGENT_IDX_COUNT, FWK_ID_NONE); + +static fwk_id_t subscriber_table_default[FAKE_SCMI_AGENT_IDX_COUNT] = { + FWK_ID_NONE, + FWK_ID_NONE, + FWK_ID_NONE, + FWK_ID_NONE +}; + +static fwk_id_t *resource_table_default[CLOCK_DEV_IDX_COUNT] = { + [0] = subscriber_table_default, + [1] = subscriber_table_default, + [2] = subscriber_table_default, + [3] = subscriber_table_default, +}; + +static fwk_id_t **operation_table_default[SCMI_CLOCK_NOTIFICATION_COUNT] = +{ + [0] = resource_table_default, + [1] = resource_table_default, +}; + +static fwk_id_t subscriber_table[FAKE_SCMI_AGENT_IDX_COUNT] = { + FWK_ID_NONE, + FWK_ID_NONE, + FWK_ID_NONE, + FWK_ID_NONE +}; + +static fwk_id_t *resource_table[CLOCK_DEV_IDX_COUNT] = { + [0] = subscriber_table, + [1] = subscriber_table, + [2] = subscriber_table, + [3] = subscriber_table, +}; + +static fwk_id_t **operation_table[SCMI_CLOCK_NOTIFICATION_COUNT] = +{ + [0] = resource_table, + [1] = resource_table, +}; +#endif + static const struct mod_scmi_clock_device clock_dev_fake0 = { .element_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_FAKE0), @@ -162,8 +219,8 @@ struct fwk_module_config config_scmi_clock = { }; static struct mod_scmi_clock_agent ospm0_table = { - .agent_config = &ospm0_config, - .state_table = ospm0_state_table_default, + .agent_config = &ospm0_config, + .state_table = ospm0_state_table_default, }; static struct mod_scmi_clock_agent ospm1_table = { diff --git a/module/scmi_clock/test/mocks/Mockmod_scmi_clock_extra.c b/module/scmi_clock/test/mocks/Mockmod_scmi_clock_extra.c index ae7c042a..3789023f 100644 --- a/module/scmi_clock/test/mocks/Mockmod_scmi_clock_extra.c +++ b/module/scmi_clock/test/mocks/Mockmod_scmi_clock_extra.c @@ -7,13 +7,10 @@ static const char* CMockString_agent_count = "agent_count"; static const char* CMockString_agent_id = "agent_id"; -static const char* CMockString_agent_idx = "agent_idx"; static const char* CMockString_agent_type = "agent_type"; static const char* CMockString_clock_id = "clock_id"; static const char* CMockString_command_count = "command_count"; static const char* CMockString_device_id = "device_id"; -static const char* CMockString_element_count = "element_count"; -static const char* CMockString_element_idx = "element_idx"; static const char* CMockString_flags = "flags"; static const char* CMockString_handler_table = "handler_table"; static const char* CMockString_message_id = "message_id"; @@ -35,22 +32,14 @@ static const char* CMockString_mod_scmi_from_protocol_api_scmi_frame_validation static const char* CMockString_mod_scmi_from_protocol_api_scmi_send_message = "mod_scmi_from_protocol_api_scmi_send_message"; static const char* CMockString_mod_scmi_from_protocol_api_write_payload = "mod_scmi_from_protocol_api_write_payload"; static const char* CMockString_offset = "offset"; -static const char* CMockString_operation_count = "operation_count"; -static const char* CMockString_operation_id = "operation_id"; static const char* CMockString_payload = "payload"; -static const char* CMockString_payload_p2a = "payload_p2a"; static const char* CMockString_payload_size = "payload_size"; static const char* CMockString_payload_size_table = "payload_size_table"; static const char* CMockString_protocol_id = "protocol_id"; static const char* CMockString_request_ack_by_interrupt = "request_ack_by_interrupt"; static const char* CMockString_resource_id = "resource_id"; static const char* CMockString_scmi_message_id = "scmi_message_id"; -static const char* CMockString_scmi_notification_add_subscriber = "scmi_notification_add_subscriber"; -static const char* CMockString_scmi_notification_init = "scmi_notification_init"; -static const char* CMockString_scmi_notification_notify = "scmi_notification_notify"; -static const char* CMockString_scmi_notification_remove_subscriber = "scmi_notification_remove_subscriber"; static const char* CMockString_scmi_protocol_id = "scmi_protocol_id"; -static const char* CMockString_scmi_response_message_id = "scmi_response_message_id"; static const char* CMockString_service_id = "service_id"; static const char* CMockString_size = "size"; static const char* CMockString_state = "state"; @@ -328,78 +317,6 @@ typedef struct _CMOCK_mod_clock_api_get_state_CALL_INSTANCE } CMOCK_mod_clock_api_get_state_CALL_INSTANCE; -typedef struct _CMOCK_scmi_notification_init_CALL_INSTANCE -{ - UNITY_LINE_TYPE LineNumber; - char ExpectAnyArgsBool; - int ReturnVal; - unsigned int Expected_protocol_id; - unsigned int Expected_agent_count; - unsigned int Expected_element_count; - unsigned int Expected_operation_count; - char IgnoreArg_protocol_id; - char IgnoreArg_agent_count; - char IgnoreArg_element_count; - char IgnoreArg_operation_count; - -} CMOCK_scmi_notification_init_CALL_INSTANCE; - -typedef struct _CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE -{ - UNITY_LINE_TYPE LineNumber; - char ExpectAnyArgsBool; - int ReturnVal; - unsigned int Expected_protocol_id; - unsigned int Expected_element_idx; - unsigned int Expected_operation_id; - fwk_id_t Expected_service_id; - char IgnoreArg_protocol_id; - char IgnoreArg_element_idx; - char IgnoreArg_operation_id; - char IgnoreArg_service_id; - -} CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE; - -typedef struct _CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE -{ - UNITY_LINE_TYPE LineNumber; - char ExpectAnyArgsBool; - int ReturnVal; - unsigned int Expected_protocol_id; - unsigned int Expected_agent_idx; - unsigned int Expected_element_idx; - unsigned int Expected_operation_id; - char IgnoreArg_protocol_id; - char IgnoreArg_agent_idx; - char IgnoreArg_element_idx; - char IgnoreArg_operation_id; - -} CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE; - -typedef struct _CMOCK_scmi_notification_notify_CALL_INSTANCE -{ - UNITY_LINE_TYPE LineNumber; - char ExpectAnyArgsBool; - int ReturnVal; - unsigned int Expected_protocol_id; - unsigned int Expected_operation_id; - unsigned int Expected_resource_id; - unsigned int Expected_scmi_response_message_id; - void* Expected_payload_p2a; - size_t Expected_payload_size; - int Expected_payload_p2a_Depth; - char ReturnThruPtr_payload_p2a_Used; - void* ReturnThruPtr_payload_p2a_Val; - size_t ReturnThruPtr_payload_p2a_Size; - char IgnoreArg_protocol_id; - char IgnoreArg_operation_id; - char IgnoreArg_resource_id; - char IgnoreArg_scmi_response_message_id; - char IgnoreArg_payload_p2a; - char IgnoreArg_payload_size; - -} CMOCK_scmi_notification_notify_CALL_INSTANCE; - static struct Mockmod_scmi_clock_extraInstance { char mod_scmi_from_protocol_api_get_agent_count_IgnoreBool; @@ -503,30 +420,6 @@ static struct Mockmod_scmi_clock_extraInstance CMOCK_mod_clock_api_get_state_CALLBACK mod_clock_api_get_state_CallbackFunctionPointer; int mod_clock_api_get_state_CallbackCalls; CMOCK_MEM_INDEX_TYPE mod_clock_api_get_state_CallInstance; - char scmi_notification_init_IgnoreBool; - int scmi_notification_init_FinalReturn; - char scmi_notification_init_CallbackBool; - CMOCK_scmi_notification_init_CALLBACK scmi_notification_init_CallbackFunctionPointer; - int scmi_notification_init_CallbackCalls; - CMOCK_MEM_INDEX_TYPE scmi_notification_init_CallInstance; - char scmi_notification_add_subscriber_IgnoreBool; - int scmi_notification_add_subscriber_FinalReturn; - char scmi_notification_add_subscriber_CallbackBool; - CMOCK_scmi_notification_add_subscriber_CALLBACK scmi_notification_add_subscriber_CallbackFunctionPointer; - int scmi_notification_add_subscriber_CallbackCalls; - CMOCK_MEM_INDEX_TYPE scmi_notification_add_subscriber_CallInstance; - char scmi_notification_remove_subscriber_IgnoreBool; - int scmi_notification_remove_subscriber_FinalReturn; - char scmi_notification_remove_subscriber_CallbackBool; - CMOCK_scmi_notification_remove_subscriber_CALLBACK scmi_notification_remove_subscriber_CallbackFunctionPointer; - int scmi_notification_remove_subscriber_CallbackCalls; - CMOCK_MEM_INDEX_TYPE scmi_notification_remove_subscriber_CallInstance; - char scmi_notification_notify_IgnoreBool; - int scmi_notification_notify_FinalReturn; - char scmi_notification_notify_CallbackBool; - CMOCK_scmi_notification_notify_CALLBACK scmi_notification_notify_CallbackFunctionPointer; - int scmi_notification_notify_CallbackCalls; - CMOCK_MEM_INDEX_TYPE scmi_notification_notify_CallInstance; } Mock; extern jmp_buf AbortFrame; @@ -756,58 +649,6 @@ void Mockmod_scmi_clock_extra_Verify(void) call_instance = CMOCK_GUTS_NONE; (void)call_instance; } - call_instance = Mock.scmi_notification_init_CallInstance; - if (Mock.scmi_notification_init_IgnoreBool) - call_instance = CMOCK_GUTS_NONE; - if (CMOCK_GUTS_NONE != call_instance) - { - UNITY_SET_DETAIL(CMockString_scmi_notification_init); - UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess); - } - if (Mock.scmi_notification_init_CallbackFunctionPointer != NULL) - { - call_instance = CMOCK_GUTS_NONE; - (void)call_instance; - } - call_instance = Mock.scmi_notification_add_subscriber_CallInstance; - if (Mock.scmi_notification_add_subscriber_IgnoreBool) - call_instance = CMOCK_GUTS_NONE; - if (CMOCK_GUTS_NONE != call_instance) - { - UNITY_SET_DETAIL(CMockString_scmi_notification_add_subscriber); - UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess); - } - if (Mock.scmi_notification_add_subscriber_CallbackFunctionPointer != NULL) - { - call_instance = CMOCK_GUTS_NONE; - (void)call_instance; - } - call_instance = Mock.scmi_notification_remove_subscriber_CallInstance; - if (Mock.scmi_notification_remove_subscriber_IgnoreBool) - call_instance = CMOCK_GUTS_NONE; - if (CMOCK_GUTS_NONE != call_instance) - { - UNITY_SET_DETAIL(CMockString_scmi_notification_remove_subscriber); - UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess); - } - if (Mock.scmi_notification_remove_subscriber_CallbackFunctionPointer != NULL) - { - call_instance = CMOCK_GUTS_NONE; - (void)call_instance; - } - call_instance = Mock.scmi_notification_notify_CallInstance; - if (Mock.scmi_notification_notify_IgnoreBool) - call_instance = CMOCK_GUTS_NONE; - if (CMOCK_GUTS_NONE != call_instance) - { - UNITY_SET_DETAIL(CMockString_scmi_notification_notify); - UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess); - } - if (Mock.scmi_notification_notify_CallbackFunctionPointer != NULL) - { - call_instance = CMOCK_GUTS_NONE; - (void)call_instance; - } } void Mockmod_scmi_clock_extra_Init(void) @@ -3615,703 +3456,3 @@ void mod_clock_api_get_state_CMockIgnoreArg_state(UNITY_LINE_TYPE cmock_line) cmock_call_instance->IgnoreArg_state = 1; } -int scmi_notification_init(unsigned int protocol_id, unsigned int agent_count, unsigned int element_count, unsigned int operation_count) -{ - UNITY_LINE_TYPE cmock_line = TEST_LINE_NUM; - CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance; - UNITY_SET_DETAIL(CMockString_scmi_notification_init); - cmock_call_instance = (CMOCK_scmi_notification_init_CALL_INSTANCE*)CMock_Guts_GetAddressFor(Mock.scmi_notification_init_CallInstance); - Mock.scmi_notification_init_CallInstance = CMock_Guts_MemNext(Mock.scmi_notification_init_CallInstance); - if (Mock.scmi_notification_init_IgnoreBool) - { - UNITY_CLR_DETAILS(); - if (cmock_call_instance == NULL) - return Mock.scmi_notification_init_FinalReturn; - Mock.scmi_notification_init_FinalReturn = cmock_call_instance->ReturnVal; - return cmock_call_instance->ReturnVal; - } - if (!Mock.scmi_notification_init_CallbackBool && - Mock.scmi_notification_init_CallbackFunctionPointer != NULL) - { - int cmock_cb_ret = Mock.scmi_notification_init_CallbackFunctionPointer(protocol_id, agent_count, element_count, operation_count, Mock.scmi_notification_init_CallbackCalls++); - UNITY_CLR_DETAILS(); - return cmock_cb_ret; - } - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringCalledMore); - cmock_line = cmock_call_instance->LineNumber; - if (!cmock_call_instance->ExpectAnyArgsBool) - { - if (!cmock_call_instance->IgnoreArg_protocol_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_init,CMockString_protocol_id); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_protocol_id, protocol_id, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_agent_count) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_init,CMockString_agent_count); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_agent_count, agent_count, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_element_count) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_init,CMockString_element_count); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_element_count, element_count, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_operation_count) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_init,CMockString_operation_count); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_operation_count, operation_count, cmock_line, CMockStringMismatch); - } - } - if (Mock.scmi_notification_init_CallbackFunctionPointer != NULL) - { - cmock_call_instance->ReturnVal = Mock.scmi_notification_init_CallbackFunctionPointer(protocol_id, agent_count, element_count, operation_count, Mock.scmi_notification_init_CallbackCalls++); - } - UNITY_CLR_DETAILS(); - return cmock_call_instance->ReturnVal; -} - -void CMockExpectParameters_scmi_notification_init(CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance, unsigned int protocol_id, unsigned int agent_count, unsigned int element_count, unsigned int operation_count); -void CMockExpectParameters_scmi_notification_init(CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance, unsigned int protocol_id, unsigned int agent_count, unsigned int element_count, unsigned int operation_count) -{ - cmock_call_instance->Expected_protocol_id = protocol_id; - cmock_call_instance->IgnoreArg_protocol_id = 0; - cmock_call_instance->Expected_agent_count = agent_count; - cmock_call_instance->IgnoreArg_agent_count = 0; - cmock_call_instance->Expected_element_count = element_count; - cmock_call_instance->IgnoreArg_element_count = 0; - cmock_call_instance->Expected_operation_count = operation_count; - cmock_call_instance->IgnoreArg_operation_count = 0; -} - -void scmi_notification_init_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_init_CALL_INSTANCE)); - CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_init_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_init_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_init_CallInstance, cmock_guts_index); - Mock.scmi_notification_init_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - cmock_call_instance->ReturnVal = cmock_to_return; - Mock.scmi_notification_init_IgnoreBool = (char)1; -} - -void scmi_notification_init_CMockStopIgnore(void) -{ - if(Mock.scmi_notification_init_IgnoreBool) - Mock.scmi_notification_init_CallInstance = CMock_Guts_MemNext(Mock.scmi_notification_init_CallInstance); - Mock.scmi_notification_init_IgnoreBool = (char)0; -} - -void scmi_notification_init_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_init_CALL_INSTANCE)); - CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_init_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_init_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_init_CallInstance, cmock_guts_index); - Mock.scmi_notification_init_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - cmock_call_instance->ReturnVal = cmock_to_return; - cmock_call_instance->ExpectAnyArgsBool = (char)1; -} - -void scmi_notification_init_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int agent_count, unsigned int element_count, unsigned int operation_count, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_init_CALL_INSTANCE)); - CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_init_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_init_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_init_CallInstance, cmock_guts_index); - Mock.scmi_notification_init_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - CMockExpectParameters_scmi_notification_init(cmock_call_instance, protocol_id, agent_count, element_count, operation_count); - cmock_call_instance->ReturnVal = cmock_to_return; -} - -void scmi_notification_init_AddCallback(CMOCK_scmi_notification_init_CALLBACK Callback) -{ - Mock.scmi_notification_init_IgnoreBool = (char)0; - Mock.scmi_notification_init_CallbackBool = (char)1; - Mock.scmi_notification_init_CallbackFunctionPointer = Callback; -} - -void scmi_notification_init_Stub(CMOCK_scmi_notification_init_CALLBACK Callback) -{ - Mock.scmi_notification_init_IgnoreBool = (char)0; - Mock.scmi_notification_init_CallbackBool = (char)0; - Mock.scmi_notification_init_CallbackFunctionPointer = Callback; -} - -void scmi_notification_init_CMockIgnoreArg_protocol_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_init_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_init_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_protocol_id = 1; -} - -void scmi_notification_init_CMockIgnoreArg_agent_count(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_init_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_init_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_agent_count = 1; -} - -void scmi_notification_init_CMockIgnoreArg_element_count(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_init_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_init_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_element_count = 1; -} - -void scmi_notification_init_CMockIgnoreArg_operation_count(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_init_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_init_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_init_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_operation_count = 1; -} - -int scmi_notification_add_subscriber(unsigned int protocol_id, unsigned int element_idx, unsigned int operation_id, fwk_id_t service_id) -{ - UNITY_LINE_TYPE cmock_line = TEST_LINE_NUM; - CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance; - UNITY_SET_DETAIL(CMockString_scmi_notification_add_subscriber); - cmock_call_instance = (CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(Mock.scmi_notification_add_subscriber_CallInstance); - Mock.scmi_notification_add_subscriber_CallInstance = CMock_Guts_MemNext(Mock.scmi_notification_add_subscriber_CallInstance); - if (Mock.scmi_notification_add_subscriber_IgnoreBool) - { - UNITY_CLR_DETAILS(); - if (cmock_call_instance == NULL) - return Mock.scmi_notification_add_subscriber_FinalReturn; - Mock.scmi_notification_add_subscriber_FinalReturn = cmock_call_instance->ReturnVal; - return cmock_call_instance->ReturnVal; - } - if (!Mock.scmi_notification_add_subscriber_CallbackBool && - Mock.scmi_notification_add_subscriber_CallbackFunctionPointer != NULL) - { - int cmock_cb_ret = Mock.scmi_notification_add_subscriber_CallbackFunctionPointer(protocol_id, element_idx, operation_id, service_id, Mock.scmi_notification_add_subscriber_CallbackCalls++); - UNITY_CLR_DETAILS(); - return cmock_cb_ret; - } - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringCalledMore); - cmock_line = cmock_call_instance->LineNumber; - if (!cmock_call_instance->ExpectAnyArgsBool) - { - if (!cmock_call_instance->IgnoreArg_protocol_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_add_subscriber,CMockString_protocol_id); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_protocol_id, protocol_id, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_element_idx) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_add_subscriber,CMockString_element_idx); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_element_idx, element_idx, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_operation_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_add_subscriber,CMockString_operation_id); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_operation_id, operation_id, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_service_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_add_subscriber,CMockString_service_id); - UNITY_TEST_ASSERT_EQUAL_MEMORY((void*)(&cmock_call_instance->Expected_service_id), (void*)(&service_id), sizeof(fwk_id_t), cmock_line, CMockStringMismatch); - } - } - if (Mock.scmi_notification_add_subscriber_CallbackFunctionPointer != NULL) - { - cmock_call_instance->ReturnVal = Mock.scmi_notification_add_subscriber_CallbackFunctionPointer(protocol_id, element_idx, operation_id, service_id, Mock.scmi_notification_add_subscriber_CallbackCalls++); - } - UNITY_CLR_DETAILS(); - return cmock_call_instance->ReturnVal; -} - -void CMockExpectParameters_scmi_notification_add_subscriber(CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance, unsigned int protocol_id, unsigned int element_idx, unsigned int operation_id, fwk_id_t service_id); -void CMockExpectParameters_scmi_notification_add_subscriber(CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance, unsigned int protocol_id, unsigned int element_idx, unsigned int operation_id, fwk_id_t service_id) -{ - cmock_call_instance->Expected_protocol_id = protocol_id; - cmock_call_instance->IgnoreArg_protocol_id = 0; - cmock_call_instance->Expected_element_idx = element_idx; - cmock_call_instance->IgnoreArg_element_idx = 0; - cmock_call_instance->Expected_operation_id = operation_id; - cmock_call_instance->IgnoreArg_operation_id = 0; - memcpy((void*)(&cmock_call_instance->Expected_service_id), (void*)(&service_id), - sizeof(fwk_id_t[sizeof(service_id) == sizeof(fwk_id_t) ? 1 : -1])); /* add fwk_id_t to :treat_as_array if this causes an error */ - cmock_call_instance->IgnoreArg_service_id = 0; -} - -void scmi_notification_add_subscriber_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE)); - CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_add_subscriber_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_add_subscriber_CallInstance, cmock_guts_index); - Mock.scmi_notification_add_subscriber_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - cmock_call_instance->ReturnVal = cmock_to_return; - Mock.scmi_notification_add_subscriber_IgnoreBool = (char)1; -} - -void scmi_notification_add_subscriber_CMockStopIgnore(void) -{ - if(Mock.scmi_notification_add_subscriber_IgnoreBool) - Mock.scmi_notification_add_subscriber_CallInstance = CMock_Guts_MemNext(Mock.scmi_notification_add_subscriber_CallInstance); - Mock.scmi_notification_add_subscriber_IgnoreBool = (char)0; -} - -void scmi_notification_add_subscriber_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE)); - CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_add_subscriber_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_add_subscriber_CallInstance, cmock_guts_index); - Mock.scmi_notification_add_subscriber_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - cmock_call_instance->ReturnVal = cmock_to_return; - cmock_call_instance->ExpectAnyArgsBool = (char)1; -} - -void scmi_notification_add_subscriber_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int element_idx, unsigned int operation_id, fwk_id_t service_id, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE)); - CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_add_subscriber_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_add_subscriber_CallInstance, cmock_guts_index); - Mock.scmi_notification_add_subscriber_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - CMockExpectParameters_scmi_notification_add_subscriber(cmock_call_instance, protocol_id, element_idx, operation_id, service_id); - cmock_call_instance->ReturnVal = cmock_to_return; -} - -void scmi_notification_add_subscriber_AddCallback(CMOCK_scmi_notification_add_subscriber_CALLBACK Callback) -{ - Mock.scmi_notification_add_subscriber_IgnoreBool = (char)0; - Mock.scmi_notification_add_subscriber_CallbackBool = (char)1; - Mock.scmi_notification_add_subscriber_CallbackFunctionPointer = Callback; -} - -void scmi_notification_add_subscriber_Stub(CMOCK_scmi_notification_add_subscriber_CALLBACK Callback) -{ - Mock.scmi_notification_add_subscriber_IgnoreBool = (char)0; - Mock.scmi_notification_add_subscriber_CallbackBool = (char)0; - Mock.scmi_notification_add_subscriber_CallbackFunctionPointer = Callback; -} - -void scmi_notification_add_subscriber_CMockIgnoreArg_protocol_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_add_subscriber_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_protocol_id = 1; -} - -void scmi_notification_add_subscriber_CMockIgnoreArg_element_idx(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_add_subscriber_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_element_idx = 1; -} - -void scmi_notification_add_subscriber_CMockIgnoreArg_operation_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_add_subscriber_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_operation_id = 1; -} - -void scmi_notification_add_subscriber_CMockIgnoreArg_service_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_add_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_add_subscriber_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_service_id = 1; -} - -int scmi_notification_remove_subscriber(unsigned int protocol_id, unsigned int agent_idx, unsigned int element_idx, unsigned int operation_id) -{ - UNITY_LINE_TYPE cmock_line = TEST_LINE_NUM; - CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance; - UNITY_SET_DETAIL(CMockString_scmi_notification_remove_subscriber); - cmock_call_instance = (CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(Mock.scmi_notification_remove_subscriber_CallInstance); - Mock.scmi_notification_remove_subscriber_CallInstance = CMock_Guts_MemNext(Mock.scmi_notification_remove_subscriber_CallInstance); - if (Mock.scmi_notification_remove_subscriber_IgnoreBool) - { - UNITY_CLR_DETAILS(); - if (cmock_call_instance == NULL) - return Mock.scmi_notification_remove_subscriber_FinalReturn; - Mock.scmi_notification_remove_subscriber_FinalReturn = cmock_call_instance->ReturnVal; - return cmock_call_instance->ReturnVal; - } - if (!Mock.scmi_notification_remove_subscriber_CallbackBool && - Mock.scmi_notification_remove_subscriber_CallbackFunctionPointer != NULL) - { - int cmock_cb_ret = Mock.scmi_notification_remove_subscriber_CallbackFunctionPointer(protocol_id, agent_idx, element_idx, operation_id, Mock.scmi_notification_remove_subscriber_CallbackCalls++); - UNITY_CLR_DETAILS(); - return cmock_cb_ret; - } - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringCalledMore); - cmock_line = cmock_call_instance->LineNumber; - if (!cmock_call_instance->ExpectAnyArgsBool) - { - if (!cmock_call_instance->IgnoreArg_protocol_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_remove_subscriber,CMockString_protocol_id); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_protocol_id, protocol_id, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_agent_idx) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_remove_subscriber,CMockString_agent_idx); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_agent_idx, agent_idx, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_element_idx) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_remove_subscriber,CMockString_element_idx); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_element_idx, element_idx, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_operation_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_remove_subscriber,CMockString_operation_id); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_operation_id, operation_id, cmock_line, CMockStringMismatch); - } - } - if (Mock.scmi_notification_remove_subscriber_CallbackFunctionPointer != NULL) - { - cmock_call_instance->ReturnVal = Mock.scmi_notification_remove_subscriber_CallbackFunctionPointer(protocol_id, agent_idx, element_idx, operation_id, Mock.scmi_notification_remove_subscriber_CallbackCalls++); - } - UNITY_CLR_DETAILS(); - return cmock_call_instance->ReturnVal; -} - -void CMockExpectParameters_scmi_notification_remove_subscriber(CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance, unsigned int protocol_id, unsigned int agent_idx, unsigned int element_idx, unsigned int operation_id); -void CMockExpectParameters_scmi_notification_remove_subscriber(CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance, unsigned int protocol_id, unsigned int agent_idx, unsigned int element_idx, unsigned int operation_id) -{ - cmock_call_instance->Expected_protocol_id = protocol_id; - cmock_call_instance->IgnoreArg_protocol_id = 0; - cmock_call_instance->Expected_agent_idx = agent_idx; - cmock_call_instance->IgnoreArg_agent_idx = 0; - cmock_call_instance->Expected_element_idx = element_idx; - cmock_call_instance->IgnoreArg_element_idx = 0; - cmock_call_instance->Expected_operation_id = operation_id; - cmock_call_instance->IgnoreArg_operation_id = 0; -} - -void scmi_notification_remove_subscriber_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE)); - CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_remove_subscriber_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_remove_subscriber_CallInstance, cmock_guts_index); - Mock.scmi_notification_remove_subscriber_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - cmock_call_instance->ReturnVal = cmock_to_return; - Mock.scmi_notification_remove_subscriber_IgnoreBool = (char)1; -} - -void scmi_notification_remove_subscriber_CMockStopIgnore(void) -{ - if(Mock.scmi_notification_remove_subscriber_IgnoreBool) - Mock.scmi_notification_remove_subscriber_CallInstance = CMock_Guts_MemNext(Mock.scmi_notification_remove_subscriber_CallInstance); - Mock.scmi_notification_remove_subscriber_IgnoreBool = (char)0; -} - -void scmi_notification_remove_subscriber_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE)); - CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_remove_subscriber_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_remove_subscriber_CallInstance, cmock_guts_index); - Mock.scmi_notification_remove_subscriber_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - cmock_call_instance->ReturnVal = cmock_to_return; - cmock_call_instance->ExpectAnyArgsBool = (char)1; -} - -void scmi_notification_remove_subscriber_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int agent_idx, unsigned int element_idx, unsigned int operation_id, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE)); - CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_remove_subscriber_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_remove_subscriber_CallInstance, cmock_guts_index); - Mock.scmi_notification_remove_subscriber_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - CMockExpectParameters_scmi_notification_remove_subscriber(cmock_call_instance, protocol_id, agent_idx, element_idx, operation_id); - cmock_call_instance->ReturnVal = cmock_to_return; -} - -void scmi_notification_remove_subscriber_AddCallback(CMOCK_scmi_notification_remove_subscriber_CALLBACK Callback) -{ - Mock.scmi_notification_remove_subscriber_IgnoreBool = (char)0; - Mock.scmi_notification_remove_subscriber_CallbackBool = (char)1; - Mock.scmi_notification_remove_subscriber_CallbackFunctionPointer = Callback; -} - -void scmi_notification_remove_subscriber_Stub(CMOCK_scmi_notification_remove_subscriber_CALLBACK Callback) -{ - Mock.scmi_notification_remove_subscriber_IgnoreBool = (char)0; - Mock.scmi_notification_remove_subscriber_CallbackBool = (char)0; - Mock.scmi_notification_remove_subscriber_CallbackFunctionPointer = Callback; -} - -void scmi_notification_remove_subscriber_CMockIgnoreArg_protocol_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_remove_subscriber_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_protocol_id = 1; -} - -void scmi_notification_remove_subscriber_CMockIgnoreArg_agent_idx(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_remove_subscriber_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_agent_idx = 1; -} - -void scmi_notification_remove_subscriber_CMockIgnoreArg_element_idx(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_remove_subscriber_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_element_idx = 1; -} - -void scmi_notification_remove_subscriber_CMockIgnoreArg_operation_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_remove_subscriber_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_remove_subscriber_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_operation_id = 1; -} - -int scmi_notification_notify(unsigned int protocol_id, unsigned int operation_id, unsigned int resource_id, unsigned int scmi_response_message_id, void* payload_p2a, size_t payload_size) -{ - UNITY_LINE_TYPE cmock_line = TEST_LINE_NUM; - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance; - UNITY_SET_DETAIL(CMockString_scmi_notification_notify); - cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(Mock.scmi_notification_notify_CallInstance); - Mock.scmi_notification_notify_CallInstance = CMock_Guts_MemNext(Mock.scmi_notification_notify_CallInstance); - if (Mock.scmi_notification_notify_IgnoreBool) - { - UNITY_CLR_DETAILS(); - if (cmock_call_instance == NULL) - return Mock.scmi_notification_notify_FinalReturn; - Mock.scmi_notification_notify_FinalReturn = cmock_call_instance->ReturnVal; - return cmock_call_instance->ReturnVal; - } - if (!Mock.scmi_notification_notify_CallbackBool && - Mock.scmi_notification_notify_CallbackFunctionPointer != NULL) - { - int cmock_cb_ret = Mock.scmi_notification_notify_CallbackFunctionPointer(protocol_id, operation_id, resource_id, scmi_response_message_id, payload_p2a, payload_size, Mock.scmi_notification_notify_CallbackCalls++); - UNITY_CLR_DETAILS(); - return cmock_cb_ret; - } - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringCalledMore); - cmock_line = cmock_call_instance->LineNumber; - if (!cmock_call_instance->ExpectAnyArgsBool) - { - if (!cmock_call_instance->IgnoreArg_protocol_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_notify,CMockString_protocol_id); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_protocol_id, protocol_id, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_operation_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_notify,CMockString_operation_id); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_operation_id, operation_id, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_resource_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_notify,CMockString_resource_id); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_resource_id, resource_id, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_scmi_response_message_id) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_notify,CMockString_scmi_response_message_id); - UNITY_TEST_ASSERT_EQUAL_HEX32(cmock_call_instance->Expected_scmi_response_message_id, scmi_response_message_id, cmock_line, CMockStringMismatch); - } - if (!cmock_call_instance->IgnoreArg_payload_p2a) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_notify,CMockString_payload_p2a); - if (cmock_call_instance->Expected_payload_p2a == NULL) - { UNITY_TEST_ASSERT_NULL(payload_p2a, cmock_line, CMockStringExpNULL); } - else - { UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY(cmock_call_instance->Expected_payload_p2a, payload_p2a, cmock_call_instance->Expected_payload_p2a_Depth, cmock_line, CMockStringMismatch); } - } - if (!cmock_call_instance->IgnoreArg_payload_size) - { - UNITY_SET_DETAILS(CMockString_scmi_notification_notify,CMockString_payload_size); - UNITY_TEST_ASSERT_EQUAL_MEMORY((void*)(&cmock_call_instance->Expected_payload_size), (void*)(&payload_size), sizeof(size_t), cmock_line, CMockStringMismatch); - } - } - if (Mock.scmi_notification_notify_CallbackFunctionPointer != NULL) - { - cmock_call_instance->ReturnVal = Mock.scmi_notification_notify_CallbackFunctionPointer(protocol_id, operation_id, resource_id, scmi_response_message_id, payload_p2a, payload_size, Mock.scmi_notification_notify_CallbackCalls++); - } - if (cmock_call_instance->ReturnThruPtr_payload_p2a_Used) - { - UNITY_TEST_ASSERT_NOT_NULL(payload_p2a, cmock_line, CMockStringPtrIsNULL); - memcpy((void*)payload_p2a, (void*)cmock_call_instance->ReturnThruPtr_payload_p2a_Val, - cmock_call_instance->ReturnThruPtr_payload_p2a_Size); - } - UNITY_CLR_DETAILS(); - return cmock_call_instance->ReturnVal; -} - -void CMockExpectParameters_scmi_notification_notify(CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance, unsigned int protocol_id, unsigned int operation_id, unsigned int resource_id, unsigned int scmi_response_message_id, void* payload_p2a, int payload_p2a_Depth, size_t payload_size); -void CMockExpectParameters_scmi_notification_notify(CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance, unsigned int protocol_id, unsigned int operation_id, unsigned int resource_id, unsigned int scmi_response_message_id, void* payload_p2a, int payload_p2a_Depth, size_t payload_size) -{ - cmock_call_instance->Expected_protocol_id = protocol_id; - cmock_call_instance->IgnoreArg_protocol_id = 0; - cmock_call_instance->Expected_operation_id = operation_id; - cmock_call_instance->IgnoreArg_operation_id = 0; - cmock_call_instance->Expected_resource_id = resource_id; - cmock_call_instance->IgnoreArg_resource_id = 0; - cmock_call_instance->Expected_scmi_response_message_id = scmi_response_message_id; - cmock_call_instance->IgnoreArg_scmi_response_message_id = 0; - cmock_call_instance->Expected_payload_p2a = payload_p2a; - cmock_call_instance->Expected_payload_p2a_Depth = payload_p2a_Depth; - cmock_call_instance->IgnoreArg_payload_p2a = 0; - cmock_call_instance->ReturnThruPtr_payload_p2a_Used = 0; - memcpy((void*)(&cmock_call_instance->Expected_payload_size), (void*)(&payload_size), - sizeof(size_t[sizeof(payload_size) == sizeof(size_t) ? 1 : -1])); /* add size_t to :treat_as_array if this causes an error */ - cmock_call_instance->IgnoreArg_payload_size = 0; -} - -void scmi_notification_notify_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_notify_CALL_INSTANCE)); - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_notify_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_notify_CallInstance, cmock_guts_index); - Mock.scmi_notification_notify_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - cmock_call_instance->ReturnVal = cmock_to_return; - Mock.scmi_notification_notify_IgnoreBool = (char)1; -} - -void scmi_notification_notify_CMockStopIgnore(void) -{ - if(Mock.scmi_notification_notify_IgnoreBool) - Mock.scmi_notification_notify_CallInstance = CMock_Guts_MemNext(Mock.scmi_notification_notify_CallInstance); - Mock.scmi_notification_notify_IgnoreBool = (char)0; -} - -void scmi_notification_notify_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_notify_CALL_INSTANCE)); - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_notify_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_notify_CallInstance, cmock_guts_index); - Mock.scmi_notification_notify_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - cmock_call_instance->ReturnVal = cmock_to_return; - cmock_call_instance->ExpectAnyArgsBool = (char)1; -} - -void scmi_notification_notify_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int operation_id, unsigned int resource_id, unsigned int scmi_response_message_id, void* payload_p2a, size_t payload_size, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_notify_CALL_INSTANCE)); - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_notify_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_notify_CallInstance, cmock_guts_index); - Mock.scmi_notification_notify_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - CMockExpectParameters_scmi_notification_notify(cmock_call_instance, protocol_id, operation_id, resource_id, scmi_response_message_id, payload_p2a, payload_size, payload_size); - cmock_call_instance->ReturnVal = cmock_to_return; -} - -void scmi_notification_notify_AddCallback(CMOCK_scmi_notification_notify_CALLBACK Callback) -{ - Mock.scmi_notification_notify_IgnoreBool = (char)0; - Mock.scmi_notification_notify_CallbackBool = (char)1; - Mock.scmi_notification_notify_CallbackFunctionPointer = Callback; -} - -void scmi_notification_notify_Stub(CMOCK_scmi_notification_notify_CALLBACK Callback) -{ - Mock.scmi_notification_notify_IgnoreBool = (char)0; - Mock.scmi_notification_notify_CallbackBool = (char)0; - Mock.scmi_notification_notify_CallbackFunctionPointer = Callback; -} - -void scmi_notification_notify_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int operation_id, unsigned int resource_id, unsigned int scmi_response_message_id, void* payload_p2a, int payload_p2a_Depth, size_t payload_size, int cmock_to_return) -{ - CMOCK_MEM_INDEX_TYPE cmock_guts_index = CMock_Guts_MemNew(sizeof(CMOCK_scmi_notification_notify_CALL_INSTANCE)); - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(cmock_guts_index); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringOutOfMemory); - memset(cmock_call_instance, 0, sizeof(*cmock_call_instance)); - Mock.scmi_notification_notify_CallInstance = CMock_Guts_MemChain(Mock.scmi_notification_notify_CallInstance, cmock_guts_index); - Mock.scmi_notification_notify_IgnoreBool = (char)0; - cmock_call_instance->LineNumber = cmock_line; - cmock_call_instance->ExpectAnyArgsBool = (char)0; - CMockExpectParameters_scmi_notification_notify(cmock_call_instance, protocol_id, operation_id, resource_id, scmi_response_message_id, payload_p2a, payload_p2a_Depth, payload_size); - cmock_call_instance->ReturnVal = cmock_to_return; -} - -void scmi_notification_notify_CMockReturnMemThruPtr_payload_p2a(UNITY_LINE_TYPE cmock_line, void* payload_p2a, size_t cmock_size) -{ - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_notify_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringPtrPreExp); - cmock_call_instance->ReturnThruPtr_payload_p2a_Used = 1; - cmock_call_instance->ReturnThruPtr_payload_p2a_Val = payload_p2a; - cmock_call_instance->ReturnThruPtr_payload_p2a_Size = cmock_size; -} - -void scmi_notification_notify_CMockIgnoreArg_protocol_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_notify_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_protocol_id = 1; -} - -void scmi_notification_notify_CMockIgnoreArg_operation_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_notify_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_operation_id = 1; -} - -void scmi_notification_notify_CMockIgnoreArg_resource_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_notify_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_resource_id = 1; -} - -void scmi_notification_notify_CMockIgnoreArg_scmi_response_message_id(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_notify_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_scmi_response_message_id = 1; -} - -void scmi_notification_notify_CMockIgnoreArg_payload_p2a(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_notify_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_payload_p2a = 1; -} - -void scmi_notification_notify_CMockIgnoreArg_payload_size(UNITY_LINE_TYPE cmock_line) -{ - CMOCK_scmi_notification_notify_CALL_INSTANCE* cmock_call_instance = (CMOCK_scmi_notification_notify_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.scmi_notification_notify_CallInstance)); - UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); - cmock_call_instance->IgnoreArg_payload_size = 1; -} - diff --git a/module/scmi_clock/test/mocks/Mockmod_scmi_clock_extra.h b/module/scmi_clock/test/mocks/Mockmod_scmi_clock_extra.h index 59209ce9..22521aa3 100644 --- a/module/scmi_clock/test/mocks/Mockmod_scmi_clock_extra.h +++ b/module/scmi_clock/test/mocks/Mockmod_scmi_clock_extra.h @@ -378,96 +378,6 @@ void mod_clock_api_get_state_CMockReturnMemThruPtr_state(UNITY_LINE_TYPE cmock_l void mod_clock_api_get_state_CMockIgnoreArg_clock_id(UNITY_LINE_TYPE cmock_line); #define mod_clock_api_get_state_IgnoreArg_state() mod_clock_api_get_state_CMockIgnoreArg_state(__LINE__) void mod_clock_api_get_state_CMockIgnoreArg_state(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_init_IgnoreAndReturn(cmock_retval) scmi_notification_init_CMockIgnoreAndReturn(__LINE__, cmock_retval) -void scmi_notification_init_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return); -#define scmi_notification_init_StopIgnore() scmi_notification_init_CMockStopIgnore() -void scmi_notification_init_CMockStopIgnore(void); -#define scmi_notification_init_ExpectAnyArgsAndReturn(cmock_retval) scmi_notification_init_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval) -void scmi_notification_init_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return); -#define scmi_notification_init_ExpectAndReturn(protocol_id, agent_count, element_count, operation_count, cmock_retval) scmi_notification_init_CMockExpectAndReturn(__LINE__, protocol_id, agent_count, element_count, operation_count, cmock_retval) -void scmi_notification_init_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int agent_count, unsigned int element_count, unsigned int operation_count, int cmock_to_return); -typedef int (* CMOCK_scmi_notification_init_CALLBACK)(unsigned int protocol_id, unsigned int agent_count, unsigned int element_count, unsigned int operation_count, int cmock_num_calls); -void scmi_notification_init_AddCallback(CMOCK_scmi_notification_init_CALLBACK Callback); -void scmi_notification_init_Stub(CMOCK_scmi_notification_init_CALLBACK Callback); -#define scmi_notification_init_StubWithCallback scmi_notification_init_Stub -#define scmi_notification_init_IgnoreArg_protocol_id() scmi_notification_init_CMockIgnoreArg_protocol_id(__LINE__) -void scmi_notification_init_CMockIgnoreArg_protocol_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_init_IgnoreArg_agent_count() scmi_notification_init_CMockIgnoreArg_agent_count(__LINE__) -void scmi_notification_init_CMockIgnoreArg_agent_count(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_init_IgnoreArg_element_count() scmi_notification_init_CMockIgnoreArg_element_count(__LINE__) -void scmi_notification_init_CMockIgnoreArg_element_count(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_init_IgnoreArg_operation_count() scmi_notification_init_CMockIgnoreArg_operation_count(__LINE__) -void scmi_notification_init_CMockIgnoreArg_operation_count(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_add_subscriber_IgnoreAndReturn(cmock_retval) scmi_notification_add_subscriber_CMockIgnoreAndReturn(__LINE__, cmock_retval) -void scmi_notification_add_subscriber_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return); -#define scmi_notification_add_subscriber_StopIgnore() scmi_notification_add_subscriber_CMockStopIgnore() -void scmi_notification_add_subscriber_CMockStopIgnore(void); -#define scmi_notification_add_subscriber_ExpectAnyArgsAndReturn(cmock_retval) scmi_notification_add_subscriber_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval) -void scmi_notification_add_subscriber_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return); -#define scmi_notification_add_subscriber_ExpectAndReturn(protocol_id, element_idx, operation_id, service_id, cmock_retval) scmi_notification_add_subscriber_CMockExpectAndReturn(__LINE__, protocol_id, element_idx, operation_id, service_id, cmock_retval) -void scmi_notification_add_subscriber_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int element_idx, unsigned int operation_id, fwk_id_t service_id, int cmock_to_return); -typedef int (* CMOCK_scmi_notification_add_subscriber_CALLBACK)(unsigned int protocol_id, unsigned int element_idx, unsigned int operation_id, fwk_id_t service_id, int cmock_num_calls); -void scmi_notification_add_subscriber_AddCallback(CMOCK_scmi_notification_add_subscriber_CALLBACK Callback); -void scmi_notification_add_subscriber_Stub(CMOCK_scmi_notification_add_subscriber_CALLBACK Callback); -#define scmi_notification_add_subscriber_StubWithCallback scmi_notification_add_subscriber_Stub -#define scmi_notification_add_subscriber_IgnoreArg_protocol_id() scmi_notification_add_subscriber_CMockIgnoreArg_protocol_id(__LINE__) -void scmi_notification_add_subscriber_CMockIgnoreArg_protocol_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_add_subscriber_IgnoreArg_element_idx() scmi_notification_add_subscriber_CMockIgnoreArg_element_idx(__LINE__) -void scmi_notification_add_subscriber_CMockIgnoreArg_element_idx(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_add_subscriber_IgnoreArg_operation_id() scmi_notification_add_subscriber_CMockIgnoreArg_operation_id(__LINE__) -void scmi_notification_add_subscriber_CMockIgnoreArg_operation_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_add_subscriber_IgnoreArg_service_id() scmi_notification_add_subscriber_CMockIgnoreArg_service_id(__LINE__) -void scmi_notification_add_subscriber_CMockIgnoreArg_service_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_remove_subscriber_IgnoreAndReturn(cmock_retval) scmi_notification_remove_subscriber_CMockIgnoreAndReturn(__LINE__, cmock_retval) -void scmi_notification_remove_subscriber_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return); -#define scmi_notification_remove_subscriber_StopIgnore() scmi_notification_remove_subscriber_CMockStopIgnore() -void scmi_notification_remove_subscriber_CMockStopIgnore(void); -#define scmi_notification_remove_subscriber_ExpectAnyArgsAndReturn(cmock_retval) scmi_notification_remove_subscriber_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval) -void scmi_notification_remove_subscriber_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return); -#define scmi_notification_remove_subscriber_ExpectAndReturn(protocol_id, agent_idx, element_idx, operation_id, cmock_retval) scmi_notification_remove_subscriber_CMockExpectAndReturn(__LINE__, protocol_id, agent_idx, element_idx, operation_id, cmock_retval) -void scmi_notification_remove_subscriber_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int agent_idx, unsigned int element_idx, unsigned int operation_id, int cmock_to_return); -typedef int (* CMOCK_scmi_notification_remove_subscriber_CALLBACK)(unsigned int protocol_id, unsigned int agent_idx, unsigned int element_idx, unsigned int operation_id, int cmock_num_calls); -void scmi_notification_remove_subscriber_AddCallback(CMOCK_scmi_notification_remove_subscriber_CALLBACK Callback); -void scmi_notification_remove_subscriber_Stub(CMOCK_scmi_notification_remove_subscriber_CALLBACK Callback); -#define scmi_notification_remove_subscriber_StubWithCallback scmi_notification_remove_subscriber_Stub -#define scmi_notification_remove_subscriber_IgnoreArg_protocol_id() scmi_notification_remove_subscriber_CMockIgnoreArg_protocol_id(__LINE__) -void scmi_notification_remove_subscriber_CMockIgnoreArg_protocol_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_remove_subscriber_IgnoreArg_agent_idx() scmi_notification_remove_subscriber_CMockIgnoreArg_agent_idx(__LINE__) -void scmi_notification_remove_subscriber_CMockIgnoreArg_agent_idx(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_remove_subscriber_IgnoreArg_element_idx() scmi_notification_remove_subscriber_CMockIgnoreArg_element_idx(__LINE__) -void scmi_notification_remove_subscriber_CMockIgnoreArg_element_idx(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_remove_subscriber_IgnoreArg_operation_id() scmi_notification_remove_subscriber_CMockIgnoreArg_operation_id(__LINE__) -void scmi_notification_remove_subscriber_CMockIgnoreArg_operation_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_notify_IgnoreAndReturn(cmock_retval) scmi_notification_notify_CMockIgnoreAndReturn(__LINE__, cmock_retval) -void scmi_notification_notify_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return); -#define scmi_notification_notify_StopIgnore() scmi_notification_notify_CMockStopIgnore() -void scmi_notification_notify_CMockStopIgnore(void); -#define scmi_notification_notify_ExpectAnyArgsAndReturn(cmock_retval) scmi_notification_notify_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval) -void scmi_notification_notify_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return); -#define scmi_notification_notify_ExpectAndReturn(protocol_id, operation_id, resource_id, scmi_response_message_id, payload_p2a, payload_size, cmock_retval) scmi_notification_notify_CMockExpectAndReturn(__LINE__, protocol_id, operation_id, resource_id, scmi_response_message_id, payload_p2a, payload_size, cmock_retval) -void scmi_notification_notify_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int operation_id, unsigned int resource_id, unsigned int scmi_response_message_id, void* payload_p2a, size_t payload_size, int cmock_to_return); -typedef int (* CMOCK_scmi_notification_notify_CALLBACK)(unsigned int protocol_id, unsigned int operation_id, unsigned int resource_id, unsigned int scmi_response_message_id, void* payload_p2a, size_t payload_size, int cmock_num_calls); -void scmi_notification_notify_AddCallback(CMOCK_scmi_notification_notify_CALLBACK Callback); -void scmi_notification_notify_Stub(CMOCK_scmi_notification_notify_CALLBACK Callback); -#define scmi_notification_notify_StubWithCallback scmi_notification_notify_Stub -#define scmi_notification_notify_ExpectWithArrayAndReturn(protocol_id, operation_id, resource_id, scmi_response_message_id, payload_p2a, payload_p2a_Depth, payload_size, cmock_retval) scmi_notification_notify_CMockExpectWithArrayAndReturn(__LINE__, protocol_id, operation_id, resource_id, scmi_response_message_id, payload_p2a, payload_p2a_Depth, payload_size, cmock_retval) -void scmi_notification_notify_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, unsigned int protocol_id, unsigned int operation_id, unsigned int resource_id, unsigned int scmi_response_message_id, void* payload_p2a, int payload_p2a_Depth, size_t payload_size, int cmock_to_return); -#define scmi_notification_notify_ReturnThruPtr_payload_p2a(payload_p2a) scmi_notification_notify_CMockReturnMemThruPtr_payload_p2a(__LINE__, payload_p2a, sizeof(void)) -#define scmi_notification_notify_ReturnArrayThruPtr_payload_p2a(payload_p2a, cmock_len) scmi_notification_notify_CMockReturnMemThruPtr_payload_p2a(__LINE__, payload_p2a, cmock_len * sizeof(*payload_p2a)) -#define scmi_notification_notify_ReturnMemThruPtr_payload_p2a(payload_p2a, cmock_size) scmi_notification_notify_CMockReturnMemThruPtr_payload_p2a(__LINE__, payload_p2a, cmock_size) -void scmi_notification_notify_CMockReturnMemThruPtr_payload_p2a(UNITY_LINE_TYPE cmock_line, void* payload_p2a, size_t cmock_size); -#define scmi_notification_notify_IgnoreArg_protocol_id() scmi_notification_notify_CMockIgnoreArg_protocol_id(__LINE__) -void scmi_notification_notify_CMockIgnoreArg_protocol_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_notify_IgnoreArg_operation_id() scmi_notification_notify_CMockIgnoreArg_operation_id(__LINE__) -void scmi_notification_notify_CMockIgnoreArg_operation_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_notify_IgnoreArg_resource_id() scmi_notification_notify_CMockIgnoreArg_resource_id(__LINE__) -void scmi_notification_notify_CMockIgnoreArg_resource_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_notify_IgnoreArg_scmi_response_message_id() scmi_notification_notify_CMockIgnoreArg_scmi_response_message_id(__LINE__) -void scmi_notification_notify_CMockIgnoreArg_scmi_response_message_id(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_notify_IgnoreArg_payload_p2a() scmi_notification_notify_CMockIgnoreArg_payload_p2a(__LINE__) -void scmi_notification_notify_CMockIgnoreArg_payload_p2a(UNITY_LINE_TYPE cmock_line); -#define scmi_notification_notify_IgnoreArg_payload_size() scmi_notification_notify_CMockIgnoreArg_payload_size(__LINE__) -void scmi_notification_notify_CMockIgnoreArg_payload_size(UNITY_LINE_TYPE cmock_line); #if defined(__GNUC__) && !defined(__ICC) && !defined(__TMS470__) #if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 6 || (__GNUC_MINOR__ == 6 && __GNUC_PATCHLEVEL__ > 0))) diff --git a/module/scmi_clock/test/mod_scmi_clock_extra.h b/module/scmi_clock/test/mod_scmi_clock_extra.h index 69a29177..94846b24 100644 --- a/module/scmi_clock/test/mod_scmi_clock_extra.h +++ b/module/scmi_clock/test/mod_scmi_clock_extra.h @@ -290,29 +290,3 @@ int mod_res_permissions_api_agent_reset_config(uint32_t agent_id, uint32_t flags * \return One of the standard framework error codes. */ int mod_clock_api_get_state(fwk_id_t clock_id, enum mod_clock_state *state); - -int scmi_notification_init( - unsigned int protocol_id, - unsigned int agent_count, - unsigned int element_count, - unsigned int operation_count); - -int scmi_notification_add_subscriber( - unsigned int protocol_id, - unsigned int element_idx, - unsigned int operation_id, - fwk_id_t service_id); - -int scmi_notification_remove_subscriber( - unsigned int protocol_id, - unsigned int agent_idx, - unsigned int element_idx, - unsigned int operation_id); - -int scmi_notification_notify( - unsigned int protocol_id, - unsigned int operation_id, - unsigned int resource_id, - unsigned int scmi_response_message_id, - void *payload_p2a, - size_t payload_size); diff --git a/module/scmi_clock/test/mod_scmi_clock_unit_test.c b/module/scmi_clock/test/mod_scmi_clock_unit_test.c index 94eb30b7..248595f1 100644 --- a/module/scmi_clock/test/mod_scmi_clock_unit_test.c +++ b/module/scmi_clock/test/mod_scmi_clock_unit_test.c @@ -64,15 +64,6 @@ struct mod_res_permissions_api perm_api = { }; #endif -#ifdef BUILD_HAS_SCMI_NOTIFICATIONS -static const struct mod_scmi_notification_api scmi_notification_api = { - .scmi_notification_init = scmi_notification_init, - .scmi_notification_add_subscriber = scmi_notification_add_subscriber, - .scmi_notification_remove_subscriber = scmi_notification_remove_subscriber, - .scmi_notification_notify = scmi_notification_notify, -}; -#endif - void assert_ospm0_clock_state_meets_expectations(void) { TEST_ASSERT_EQUAL_UINT8_ARRAY( @@ -159,12 +150,12 @@ void setUp(void) scmi_clock_ctx.res_perms_api = &perm_api; #endif -#ifdef BUILD_HAS_SCMI_NOTIFICATIONS - scmi_clock_ctx.scmi_notification_api = &scmi_notification_api; -#endif - scmi_clock_ctx.dev_clock_ref_count_table = dev_clock_ref_count_table; + #if defined(BUILD_HAS_SCMI_NOTIFICATIONS) + scmi_clock_ctx.notification_table = operation_table_default; + #endif + memcpy( dev_clock_ref_count_table, dev_clock_ref_count_table_default, @@ -1243,10 +1234,10 @@ void test_clock_rate_changed_notify_handler_invalid_clock_id(void) TEST_ASSERT_EQUAL(FWK_E_RANGE, status); } -int scmi_notification_add_subscriber_rate_changed_callback( - unsigned int protocol_id, - unsigned int clock_id, - unsigned int command_id, +int scmi_notification_add_subscriber_callback( + unsigned int operation_id, + unsigned int resource_id, + unsigned int subscriber_id, fwk_id_t service_id, int NumCalls ) @@ -1254,9 +1245,9 @@ int scmi_notification_add_subscriber_rate_changed_callback( fwk_id_t expected_service_id = FWK_ID_ELEMENT_INIT(FAKE_MODULE_IDX, FAKE_SCMI_AGENT_IDX_OSPM0); - TEST_ASSERT_EQUAL(MOD_SCMI_PROTOCOL_ID_CLOCK, protocol_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM0_IDX1, clock_id); - TEST_ASSERT_EQUAL(MOD_SCMI_CLOCK_RATE_NOTIFY, command_id); + TEST_ASSERT_EQUAL(FAKE_SCMI_AGENT_IDX_OSPM0, subscriber_id); + TEST_ASSERT_EQUAL(CLOCK_DEV_IDX_FAKE1, resource_id); + TEST_ASSERT_EQUAL(SCMI_CLOCK_RATE_CHANGED, operation_id); TEST_ASSERT_EQUAL(expected_service_id.value, service_id.value); return FWK_SUCCESS; @@ -1283,8 +1274,7 @@ void test_clock_rate_changed_notify_handler_add_subscriber(void) mod_scmi_from_protocol_api_scmi_frame_validation_ExpectAnyArgsAndReturn( FWK_SUCCESS); - scmi_notification_add_subscriber_Stub( - scmi_notification_add_subscriber_rate_changed_callback); + fwk_id_get_element_idx_ExpectAnyArgsAndReturn(CLOCK_DEV_IDX_FAKE1); mod_scmi_from_protocol_api_respond_ExpectAnyArgsAndReturn(FWK_SUCCESS); @@ -1298,18 +1288,19 @@ void test_clock_rate_changed_notify_handler_add_subscriber(void) TEST_ASSERT_EQUAL(FWK_SUCCESS, status); } -int scmi_notification_remove_subscriber_rate_changed_callback( - unsigned int protocol_id, - unsigned int agent_id, - unsigned int clock_id, - unsigned int command_id, +int scmi_notification_remove_subscriber_callback( + unsigned int operation_id, + unsigned int resource_id, + unsigned int subscriber_id, + fwk_id_t service_id, int NumCalls ) { - TEST_ASSERT_EQUAL(MOD_SCMI_PROTOCOL_ID_CLOCK, protocol_id); - TEST_ASSERT_EQUAL(FAKE_SCMI_AGENT_IDX_OSPM0, agent_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM0_IDX1, clock_id); - TEST_ASSERT_EQUAL(MOD_SCMI_CLOCK_RATE_NOTIFY, command_id); + fwk_id_t expected_service_id = FWK_ID_NONE; + TEST_ASSERT_EQUAL(FAKE_SCMI_AGENT_IDX_OSPM0, subscriber_id); + TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM0_IDX1, resource_id); + TEST_ASSERT_EQUAL(MOD_SCMI_CLOCK_RATE_NOTIFY, operation_id); + TEST_ASSERT_EQUAL(expected_service_id.value, service_id.value); return FWK_SUCCESS; } @@ -1334,8 +1325,7 @@ void test_clock_rate_changed_notify_handler_remove_subscriber(void) mod_scmi_from_protocol_api_scmi_frame_validation_ExpectAnyArgsAndReturn( FWK_SUCCESS); - scmi_notification_remove_subscriber_Stub( - scmi_notification_remove_subscriber_rate_changed_callback); + fwk_id_get_element_idx_ExpectAnyArgsAndReturn(CLOCK_DEV_IDX_FAKE1); mod_scmi_from_protocol_api_respond_ExpectAnyArgsAndReturn(FWK_SUCCESS); @@ -1349,25 +1339,6 @@ void test_clock_rate_changed_notify_handler_remove_subscriber(void) TEST_ASSERT_EQUAL(FWK_SUCCESS, status); } -int scmi_notification_add_subscriber_change_requested_callback( - unsigned int protocol_id, - unsigned int clock_id, - unsigned int command_id, - fwk_id_t service_id, - int NumCalls -) -{ - fwk_id_t expected_service_id = - FWK_ID_ELEMENT_INIT(FAKE_MODULE_IDX, FAKE_SCMI_AGENT_IDX_OSPM0); - - TEST_ASSERT_EQUAL(MOD_SCMI_PROTOCOL_ID_CLOCK, protocol_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM0_IDX1, clock_id); - TEST_ASSERT_EQUAL(MOD_SCMI_CLOCK_RATE_CHANGE_REQUESTED_NOTIFY, command_id); - TEST_ASSERT_EQUAL(expected_service_id.value, service_id.value); - - return FWK_SUCCESS; -} - void test_clock_rate_change_requested_notify_handler_add_subscriber(void) { int status; @@ -1388,8 +1359,7 @@ void test_clock_rate_change_requested_notify_handler_add_subscriber(void) mod_scmi_from_protocol_api_scmi_frame_validation_ExpectAnyArgsAndReturn( FWK_SUCCESS); - scmi_notification_add_subscriber_Stub( - scmi_notification_add_subscriber_change_requested_callback); + fwk_id_get_element_idx_ExpectAnyArgsAndReturn(CLOCK_DEV_IDX_FAKE1); mod_scmi_from_protocol_api_respond_ExpectAnyArgsAndReturn(FWK_SUCCESS); @@ -1403,22 +1373,6 @@ void test_clock_rate_change_requested_notify_handler_add_subscriber(void) TEST_ASSERT_EQUAL(FWK_SUCCESS, status); } -int scmi_notification_remove_subscriber_change_requested_callback( - unsigned int protocol_id, - unsigned int agent_id, - unsigned int clock_id, - unsigned int command_id, - int NumCalls -) -{ - TEST_ASSERT_EQUAL(MOD_SCMI_PROTOCOL_ID_CLOCK, protocol_id); - TEST_ASSERT_EQUAL(FAKE_SCMI_AGENT_IDX_OSPM0, agent_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM0_IDX1, clock_id); - TEST_ASSERT_EQUAL(MOD_SCMI_CLOCK_RATE_CHANGE_REQUESTED_NOTIFY, command_id); - - return FWK_SUCCESS; -} - void test_clock_rate_change_requested_notify_handler_remove_subscriber(void) { int status; @@ -1439,8 +1393,7 @@ void test_clock_rate_change_requested_notify_handler_remove_subscriber(void) mod_scmi_from_protocol_api_scmi_frame_validation_ExpectAnyArgsAndReturn( FWK_SUCCESS); - scmi_notification_remove_subscriber_Stub( - scmi_notification_remove_subscriber_change_requested_callback); + fwk_id_get_element_idx_ExpectAnyArgsAndReturn(CLOCK_DEV_IDX_FAKE1); mod_scmi_from_protocol_api_respond_ExpectAnyArgsAndReturn(FWK_SUCCESS); @@ -1455,29 +1408,19 @@ void test_clock_rate_change_requested_notify_handler_remove_subscriber(void) } #ifdef BUILD_HAS_SCMI_NOTIFICATIONS -int scmi_notification_notify_rate_changed_callback( - unsigned int protocol_id, - unsigned int operation_id, - unsigned int resource_id, - unsigned int scmi_response_id, - void *payload_p2a, - size_t payload_size, - int NumCalls -) +void scmi_notify_rate_changed_callback(fwk_id_t id, int protocol_id, int message_id, + const void *payload, size_t size, int NumCalls) { - struct scmi_clock_rate_notification_message_p2a *message = payload_p2a; + struct scmi_clock_rate_notification_message_p2a *message = (struct scmi_clock_rate_notification_message_p2a *)payload; + fwk_id_t expected_service_id = FWK_ID_ELEMENT(FAKE_MODULE_IDX, FAKE_SCMI_AGENT_IDX_OSPM0); + TEST_ASSERT_EQUAL(expected_service_id.value, id.value); TEST_ASSERT_EQUAL(MOD_SCMI_PROTOCOL_ID_CLOCK, protocol_id); - TEST_ASSERT_EQUAL(MOD_SCMI_CLOCK_RATE_NOTIFY, operation_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM1_IDX0, resource_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_RATE_CHANGED, scmi_response_id); - + TEST_ASSERT_EQUAL(SCMI_CLOCK_RATE_CHANGED, message_id); TEST_ASSERT_EQUAL(FAKE_SCMI_AGENT_IDX_OSPM1, message->agent_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM1_IDX0, message->clock_id); + TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM0_IDX3, message->clock_id); TEST_ASSERT_EQUAL(0x0000000A, message->rate[0]); TEST_ASSERT_EQUAL(0x0000000B, message->rate[1]); - - return FWK_SUCCESS; } void test_mod_scmi_clock_process_notification_rate_changed(void) @@ -1487,6 +1430,16 @@ void test_mod_scmi_clock_process_notification_rate_changed(void) agent_id = FAKE_SCMI_AGENT_IDX_OSPM1; clock_idx = CLOCK_DEV_IDX_FAKE3; fwk_id_t clock_id = FWK_ID_ELEMENT(FWK_MODULE_IDX_CLOCK, clock_idx); + + /* In this test case, + * subscriber = OSPM0 agent + * resource = SCMI_CLOCK_OSPM0_IDX3/CLOCK_DEV_IDX_FAKE3 + * operation = Clock rate changed notification + */ + scmi_clock_ctx.notification_table[SCMI_CLOCK_RATE_CHANGED][CLOCK_DEV_IDX_FAKE3][FAKE_SCMI_AGENT_IDX_OSPM0] = + FWK_ID_ELEMENT(FAKE_MODULE_IDX, FAKE_SCMI_AGENT_IDX_OSPM0); + + struct fwk_event notification_event, resp_event; struct mod_clock_notification_params *notification_params = ((struct mod_clock_notification_params *)notification_event.params); @@ -1499,42 +1452,19 @@ void test_mod_scmi_clock_process_notification_rate_changed(void) fwk_id_get_notification_idx_ExpectAnyArgsAndReturn( MOD_CLOCK_NOTIFICATION_IDX_RATE_CHANGED); + fwk_id_get_element_idx_Stub(get_element_idx_callback); + fwk_id_is_equal_ExpectAnyArgsAndReturn(true); + fwk_id_is_equal_ExpectAnyArgsAndReturn(false); + fwk_id_is_equal_ExpectAnyArgsAndReturn(true); - scmi_notification_notify_Stub( - scmi_notification_notify_rate_changed_callback); + mod_scmi_from_protocol_api_notify_Stub(scmi_notify_rate_changed_callback); status = scmi_clock_process_notification(¬ification_event, &resp_event); TEST_ASSERT_EQUAL(status, FWK_SUCCESS); } -int scmi_notification_notify_rate_change_requested_callback( - unsigned int protocol_id, - unsigned int operation_id, - unsigned int resource_id, - unsigned int scmi_response_id, - void *payload_p2a, - size_t payload_size, - int NumCalls -) -{ - struct scmi_clock_rate_notification_message_p2a *message = payload_p2a; - - TEST_ASSERT_EQUAL(MOD_SCMI_PROTOCOL_ID_CLOCK, protocol_id); - TEST_ASSERT_EQUAL(MOD_SCMI_CLOCK_RATE_CHANGE_REQUESTED_NOTIFY, - operation_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM1_IDX0, resource_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_RATE_CHANGE_REQUESTED, scmi_response_id); - - TEST_ASSERT_EQUAL(FAKE_SCMI_AGENT_IDX_OSPM1, message->agent_id); - TEST_ASSERT_EQUAL(SCMI_CLOCK_OSPM1_IDX0, message->clock_id); - TEST_ASSERT_EQUAL(0x0000000C, message->rate[0]); - TEST_ASSERT_EQUAL(0x0000000D, message->rate[1]); - - return FWK_SUCCESS; -} - void test_mod_scmi_clock_process_notification_rate_change_requested(void) { int status; @@ -1555,11 +1485,11 @@ void test_mod_scmi_clock_process_notification_rate_change_requested(void) fwk_id_get_notification_idx_ExpectAnyArgsAndReturn( MOD_CLOCK_NOTIFICATION_IDX_RATE_CHANGE_REQUESTED); - fwk_id_get_element_idx_ExpectAnyArgsAndReturn(CLOCK_DEV_IDX_FAKE3); - fwk_id_get_element_idx_ExpectAnyArgsAndReturn(CLOCK_DEV_IDX_FAKE3); - scmi_notification_notify_Stub( - scmi_notification_notify_rate_change_requested_callback); + fwk_id_get_element_idx_Stub(get_element_idx_callback); + fwk_id_is_equal_ExpectAnyArgsAndReturn(true); + fwk_id_is_equal_ExpectAnyArgsAndReturn(true); + fwk_id_is_equal_ExpectAnyArgsAndReturn(true); status = scmi_clock_process_notification(¬ification_event, &resp_event); @@ -1583,17 +1513,6 @@ void test_mod_scmi_clock_start() module_id, FWK_SUCCESS); - mod_scmi_from_protocol_api_get_agent_count_ExpectAndReturn( - (unsigned int *) &scmi_clock_ctx.agent_count, - FWK_SUCCESS); - - scmi_notification_init_ExpectAndReturn( - MOD_SCMI_PROTOCOL_ID_CLOCK, - scmi_clock_ctx.agent_count, - scmi_clock_ctx.phy_device_count, - MOD_SCMI_CLOCK_NOTIFICATION_COUNT, - FWK_SUCCESS); - status = scmi_clock_start(module_id); TEST_ASSERT_EQUAL(status, FWK_SUCCESS); @@ -1611,10 +1530,6 @@ void test_mod_scmi_clock_bind(void) FWK_ID_API(FWK_MODULE_IDX_SCMI, MOD_SCMI_API_IDX_PROTOCOL); - fwk_id_t mod_scmi_api_notification = - FWK_ID_API(FWK_MODULE_IDX_SCMI, - MOD_SCMI_API_IDX_NOTIFICATION); - fwk_id_t mod_clock_api = FWK_ID_API(FWK_MODULE_IDX_CLOCK, 0); @@ -1624,11 +1539,6 @@ void test_mod_scmi_clock_bind(void) &scmi_clock_ctx.scmi_api, FWK_SUCCESS); - fwk_module_bind_ExpectAndReturn(mod_scmi_id, - mod_scmi_api_notification, - &scmi_clock_ctx.scmi_notification_api, - FWK_SUCCESS); - fwk_module_bind_ExpectAndReturn(mod_clock_id, mod_clock_api, &scmi_clock_ctx.clock_api, @@ -1662,11 +1572,43 @@ void test_scmi_clock_init(void) sizeof(uint8_t), dev_clock_ref_count_table_return); +#ifdef BUILD_HAS_SCMI_NOTIFICATIONS + fwk_mm_calloc_ExpectAndReturn(SCMI_CLOCK_NOTIFICATION_COUNT, + sizeof(fwk_id_t **), + operation_table); + + for (unsigned int op_idx = 0; op_idx < SCMI_CLOCK_NOTIFICATION_COUNT; op_idx++) { + fwk_mm_calloc_ExpectAndReturn(scmi_clock_ctx.phy_device_count, + sizeof(fwk_id_t *), + resource_table); + + for (unsigned int res_idx = 0; res_idx < scmi_clock_ctx.phy_device_count; res_idx++) { + fwk_mm_calloc_ExpectAndReturn(scmi_clock_ctx.agent_count, + sizeof(fwk_id_t), + subscriber_table); + } + } + +#endif + status = scmi_clock_init(scmi_clock_module_id, FAKE_SCMI_AGENT_IDX_COUNT, config_scmi_clock.data); TEST_ASSERT_EQUAL(MAX_PENDING_TRANSACTION, scmi_clock_ctx.max_pending_transactions); TEST_ASSERT_EQUAL(FAKE_SCMI_AGENT_IDX_COUNT, scmi_clock_ctx.agent_count); TEST_ASSERT_EQUAL(CLOCK_DEV_IDX_COUNT, scmi_clock_ctx.phy_device_count); + +#ifdef BUILD_HAS_SCMI_NOTIFICATIONS + for (unsigned int op_idx = 0; op_idx < SCMI_CLOCK_NOTIFICATION_COUNT; op_idx++) { + for (unsigned int res_idx = 0; res_idx < scmi_clock_ctx.phy_device_count; res_idx++) { + for (unsigned int sub_idx = 0; sub_idx < scmi_clock_ctx.agent_count; sub_idx++) { + fwk_id_t expected_subscriber_id = FWK_ID_NONE; + TEST_ASSERT_EQUAL( + expected_subscriber_id.value, + scmi_clock_ctx.notification_table[op_idx][res_idx][sub_idx].value); + } + } + } +#endif TEST_ASSERT_EQUAL(FWK_SUCCESS, status); } -- GitLab