Branch data Line data Source code
1 : : /**
2 : : * Copyright Notice:
3 : : * Copyright 2021-2024 DMTF. All rights reserved.
4 : : * License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
5 : : **/
6 : :
7 : : #include "internal/libspdm_common_lib.h"
8 : :
9 : : #if LIBSPDM_ENABLE_MSG_LOG
10 : 6 : void libspdm_init_msg_log (void *spdm_context, void *msg_buffer, size_t msg_buffer_size)
11 : : {
12 : : libspdm_context_t *context;
13 : :
14 [ + - - + ]: 6 : LIBSPDM_ASSERT((spdm_context != NULL) && (msg_buffer != NULL));
15 [ - + ]: 6 : LIBSPDM_ASSERT(msg_buffer_size != 0);
16 : :
17 : 6 : context = spdm_context;
18 : 6 : context->msg_log.buffer = msg_buffer;
19 : 6 : context->msg_log.max_buffer_size = msg_buffer_size;
20 : 6 : context->msg_log.buffer_size = 0;
21 : 6 : context->msg_log.mode = 0;
22 : 6 : context->msg_log.status = 0;
23 : 6 : }
24 : :
25 : 6 : void libspdm_set_msg_log_mode (void *spdm_context, uint32_t mode)
26 : : {
27 : : libspdm_context_t *context;
28 : :
29 [ - + ]: 6 : LIBSPDM_ASSERT(spdm_context != NULL);
30 : :
31 : 6 : context = spdm_context;
32 : 6 : context->msg_log.mode = mode;
33 : 6 : }
34 : :
35 : 5 : uint32_t libspdm_get_msg_log_status (void *spdm_context)
36 : : {
37 : : libspdm_context_t *context;
38 : :
39 [ - + ]: 5 : LIBSPDM_ASSERT(spdm_context != NULL);
40 : :
41 : 5 : context = spdm_context;
42 : :
43 : 5 : return context->msg_log.status;
44 : : }
45 : :
46 : 68608 : size_t libspdm_get_msg_log_size (void *spdm_context)
47 : : {
48 : : libspdm_context_t *context;
49 : :
50 [ - + ]: 68608 : LIBSPDM_ASSERT(spdm_context != NULL);
51 : :
52 : 68608 : context = spdm_context;
53 : :
54 : 68608 : return context->msg_log.buffer_size;
55 : : }
56 : :
57 : 1 : void libspdm_reset_msg_log (void *spdm_context)
58 : : {
59 : : libspdm_context_t *context;
60 : :
61 [ - + ]: 1 : LIBSPDM_ASSERT(spdm_context != NULL);
62 : :
63 : 1 : context = spdm_context;
64 : :
65 : 1 : context->msg_log.buffer_size = 0;
66 : 1 : context->msg_log.mode = 0;
67 : 1 : context->msg_log.status = 0;
68 : 1 : }
69 : :
70 : 70593 : void libspdm_append_msg_log(libspdm_context_t *spdm_context, void *message, size_t message_size)
71 : : {
72 [ + - - + ]: 70593 : LIBSPDM_ASSERT((spdm_context != NULL) && (message != NULL));
73 : :
74 [ + + ]: 70593 : if (((spdm_context->msg_log.mode & LIBSPDM_MSG_LOG_MODE_ENABLE) != 0) &&
75 [ + - ]: 79 : ((spdm_context->msg_log.status & LIBSPDM_MSG_LOG_STATUS_BUFFER_FULL) == 0)) {
76 : 79 : if (spdm_context->msg_log.buffer_size + message_size >
77 [ - + ]: 79 : spdm_context->msg_log.max_buffer_size) {
78 : 0 : libspdm_copy_mem((uint8_t *)spdm_context->msg_log.buffer +
79 : 0 : spdm_context->msg_log.buffer_size,
80 : : spdm_context->msg_log.max_buffer_size, message,
81 : 0 : spdm_context->msg_log.max_buffer_size -
82 : 0 : spdm_context->msg_log.buffer_size);
83 : 0 : spdm_context->msg_log.status |= LIBSPDM_MSG_LOG_STATUS_BUFFER_FULL;
84 : 0 : spdm_context->msg_log.buffer_size = spdm_context->msg_log.max_buffer_size;
85 : : } else {
86 : 79 : libspdm_copy_mem((uint8_t *)spdm_context->msg_log.buffer +
87 : 79 : spdm_context->msg_log.buffer_size,
88 : : spdm_context->msg_log.max_buffer_size, message, message_size);
89 : 79 : spdm_context->msg_log.buffer_size += message_size;
90 : : }
91 : :
92 : 79 : LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO, "Message Logging Status = [%x] Buffer Size = [%zx] "
93 : : "Max Buffer Size = [%zx]\n", spdm_context->msg_log.status,
94 : : spdm_context->msg_log.buffer_size, spdm_context->msg_log.max_buffer_size));
95 : 79 : LIBSPDM_INTERNAL_DUMP_HEX(spdm_context->msg_log.buffer, spdm_context->msg_log.buffer_size);
96 : : }
97 : 70593 : }
98 : : #endif /* LIBSPDM_ENABLE_MSG_LOG */
|