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 : 12 : void libspdm_init_msg_log (void *spdm_context, void *msg_buffer, size_t msg_buffer_size)
11 : : {
12 : : libspdm_context_t *context;
13 : :
14 : 12 : LIBSPDM_ASSERT((spdm_context != NULL) && (msg_buffer != NULL));
15 : 12 : LIBSPDM_ASSERT(msg_buffer_size != 0);
16 : :
17 : 12 : context = spdm_context;
18 : 12 : context->msg_log.buffer = msg_buffer;
19 : 12 : context->msg_log.max_buffer_size = msg_buffer_size;
20 : 12 : context->msg_log.buffer_size = 0;
21 : 12 : context->msg_log.mode = 0;
22 : 12 : context->msg_log.status = 0;
23 : 12 : }
24 : :
25 : 12 : void libspdm_set_msg_log_mode (void *spdm_context, uint32_t mode)
26 : : {
27 : : libspdm_context_t *context;
28 : :
29 : 12 : LIBSPDM_ASSERT(spdm_context != NULL);
30 : :
31 : 12 : context = spdm_context;
32 : 12 : context->msg_log.mode = mode;
33 : 12 : }
34 : :
35 : 10 : uint32_t libspdm_get_msg_log_status (void *spdm_context)
36 : : {
37 : : libspdm_context_t *context;
38 : :
39 : 10 : LIBSPDM_ASSERT(spdm_context != NULL);
40 : :
41 : 10 : context = spdm_context;
42 : :
43 : 10 : return context->msg_log.status;
44 : : }
45 : :
46 : 6246 : size_t libspdm_get_msg_log_size (void *spdm_context)
47 : : {
48 : : libspdm_context_t *context;
49 : :
50 : 6246 : LIBSPDM_ASSERT(spdm_context != NULL);
51 : :
52 : 6246 : context = spdm_context;
53 : :
54 : 6246 : return context->msg_log.buffer_size;
55 : : }
56 : :
57 : 2 : void libspdm_reset_msg_log (void *spdm_context)
58 : : {
59 : : libspdm_context_t *context;
60 : :
61 : 2 : LIBSPDM_ASSERT(spdm_context != NULL);
62 : :
63 : 2 : context = spdm_context;
64 : :
65 : 2 : context->msg_log.buffer_size = 0;
66 : 2 : context->msg_log.mode = 0;
67 : 2 : context->msg_log.status = 0;
68 : 2 : }
69 : :
70 : 10262 : void libspdm_append_msg_log(libspdm_context_t *spdm_context, void *message, size_t message_size)
71 : : {
72 : 10262 : LIBSPDM_ASSERT((spdm_context != NULL) && (message != NULL));
73 : :
74 [ + + ]: 10262 : if (((spdm_context->msg_log.mode & LIBSPDM_MSG_LOG_MODE_ENABLE) != 0) &&
75 [ + - ]: 174 : ((spdm_context->msg_log.status & LIBSPDM_MSG_LOG_STATUS_BUFFER_FULL) == 0)) {
76 : 174 : if (spdm_context->msg_log.buffer_size + message_size >
77 [ - + ]: 174 : 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 : 174 : libspdm_copy_mem((uint8_t *)spdm_context->msg_log.buffer +
87 : 174 : spdm_context->msg_log.buffer_size,
88 : : spdm_context->msg_log.max_buffer_size, message, message_size);
89 : 174 : spdm_context->msg_log.buffer_size += message_size;
90 : : }
91 : :
92 : 174 : 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 : 174 : LIBSPDM_INTERNAL_DUMP_HEX(spdm_context->msg_log.buffer, spdm_context->msg_log.buffer_size);
96 : : }
97 : 10262 : }
98 : : #endif /* LIBSPDM_ENABLE_MSG_LOG */
|