mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-19 01:22:54 +00:00
The default template argument is only used in one place, and it looks like it was probably just an oversight. The rest of the Kernel code all uses u8 as the type. So lets make that the default and remove the unused template argument, as there doesn't seem to be a reason to allow the size to be customizable.
40 lines
1.4 KiB
C++
40 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2021, Sahan Fernando <sahan.h.fernando@gmail.com>.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/String.h>
|
|
#include <Kernel/PhysicalAddress.h>
|
|
#include <Kernel/UserOrKernelBuffer.h>
|
|
|
|
namespace Kernel::Memory {
|
|
|
|
class RingBuffer {
|
|
public:
|
|
RingBuffer(String region_name, size_t capacity);
|
|
|
|
bool has_space() const { return m_num_used_bytes < m_capacity_in_bytes; }
|
|
bool copy_data_in(const UserOrKernelBuffer& buffer, size_t offset, size_t length, PhysicalAddress& start_of_copied_data, size_t& bytes_copied);
|
|
KResultOr<size_t> copy_data_out(size_t size, UserOrKernelBuffer& buffer) const;
|
|
KResultOr<PhysicalAddress> reserve_space(size_t size);
|
|
void reclaim_space(PhysicalAddress chunk_start, size_t chunk_size);
|
|
PhysicalAddress start_of_used() const;
|
|
|
|
Spinlock& lock() { return m_lock; }
|
|
size_t used_bytes() const { return m_num_used_bytes; }
|
|
PhysicalAddress start_of_region() const { return m_region->physical_page(0)->paddr(); }
|
|
VirtualAddress vaddr() const { return m_region->vaddr(); }
|
|
size_t bytes_till_end() const { return (m_capacity_in_bytes - ((m_start_of_used + m_num_used_bytes) % m_capacity_in_bytes)) % m_capacity_in_bytes; };
|
|
|
|
private:
|
|
OwnPtr<Memory::Region> m_region;
|
|
Spinlock m_lock;
|
|
size_t m_start_of_used {};
|
|
size_t m_num_used_bytes {};
|
|
size_t m_capacity_in_bytes {};
|
|
};
|
|
|
|
}
|