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