| // Copyright 2020 The Fuchsia Authors | |
| // | |
| // Use of this source code is governed by a MIT-style | |
| // license that can be found in the LICENSE file or at | |
| // https://opensource.org/licenses/MIT | |
| #ifndef ZIRCON_KERNEL_LIB_DEBUGLOG_DEBUGLOG_INTERNAL_H_ | |
| #define ZIRCON_KERNEL_LIB_DEBUGLOG_DEBUGLOG_INTERNAL_H_ | |
| #include <lib/zircon-internal/thread_annotations.h> | |
| #include <kernel/event.h> | |
| #include <kernel/mutex.h> | |
| #include <kernel/spinlock.h> | |
| #include <ktl/string_view.h> | |
| #define DLOG_SIZE (128u * 1024u) | |
| #define DLOG_MASK (DLOG_SIZE - 1u) | |
| #define ALIGN4_TRUNC(n) ((n) & (~3)) | |
| #define ALIGN4(n) ALIGN4_TRUNC(((n) + 3)) | |
| struct DLog { | |
| explicit constexpr DLog() {} | |
| zx_status_t write(uint32_t severity, uint32_t flags, ktl::string_view str); | |
| // Mark this DLog as being shutdown. Once called, subsequent |write| operations will fail. | |
| void shutdown(); | |
| SpinLock lock; | |
| size_t head TA_GUARDED(lock) = 0; | |
| size_t tail TA_GUARDED(lock) = 0; | |
| // Indicates that the system has begun to panic. When true, |write| will immediately return an | |
| // error. | |
| bool panic = false; | |
| AutounsignalEvent event; | |
| DECLARE_LOCK(DLog, Mutex) readers_lock; | |
| fbl::DoublyLinkedList<DlogReader*> readers TA_GUARDED(readers_lock); | |
| private: | |
| // Indicates that this |DLog| object is being shutdown. When true, |write| will immediately | |
| // return an error. | |
| bool shutdown_requested_ TA_GUARDED(lock) = false; | |
| public: | |
| uint8_t data[DLOG_SIZE]{0}; | |
| }; | |
| #endif // ZIRCON_KERNEL_LIB_DEBUGLOG_DEBUGLOG_INTERNAL_H_ |