mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 15:17:36 +00:00
Kernel: Move TTY-related code to a new subdirectory under Devices
The TTY subsystem is represented with unix devices, so it should be under the Devices directory like the Audio, Storage, GPU and HID subsystems.
This commit is contained in:
parent
c99c065a40
commit
b55199c227
31 changed files with 42 additions and 42 deletions
|
@ -1,65 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <AK/Singleton.h>
|
||||
#include <Kernel/API/POSIX/errno.h>
|
||||
#include <Kernel/Debug.h>
|
||||
#include <Kernel/FileSystem/OpenFileDescription.h>
|
||||
#include <Kernel/Sections.h>
|
||||
#include <Kernel/TTY/MasterPTY.h>
|
||||
#include <Kernel/TTY/PTYMultiplexer.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
static Singleton<PTYMultiplexer> s_the;
|
||||
|
||||
PTYMultiplexer& PTYMultiplexer::the()
|
||||
{
|
||||
return *s_the;
|
||||
}
|
||||
|
||||
UNMAP_AFTER_INIT PTYMultiplexer::PTYMultiplexer()
|
||||
: CharacterDevice(5, 2)
|
||||
{
|
||||
m_freelist.with([&](auto& freelist) {
|
||||
freelist.ensure_capacity(max_pty_pairs);
|
||||
for (int i = max_pty_pairs; i > 0; --i)
|
||||
freelist.unchecked_append(i - 1);
|
||||
});
|
||||
}
|
||||
|
||||
UNMAP_AFTER_INIT PTYMultiplexer::~PTYMultiplexer() = default;
|
||||
|
||||
UNMAP_AFTER_INIT void PTYMultiplexer::initialize()
|
||||
{
|
||||
MUST(the().after_inserting());
|
||||
}
|
||||
|
||||
ErrorOr<NonnullRefPtr<OpenFileDescription>> PTYMultiplexer::open(int options)
|
||||
{
|
||||
return m_freelist.with([&](auto& freelist) -> ErrorOr<NonnullRefPtr<OpenFileDescription>> {
|
||||
if (freelist.is_empty())
|
||||
return EBUSY;
|
||||
|
||||
auto master_index = freelist.take_last();
|
||||
auto master = TRY(MasterPTY::try_create(master_index));
|
||||
dbgln_if(PTMX_DEBUG, "PTYMultiplexer::open: Vending master {}", master->index());
|
||||
auto description = TRY(OpenFileDescription::try_create(*master));
|
||||
description->set_rw_mode(options);
|
||||
description->set_file_flags(options);
|
||||
return description;
|
||||
});
|
||||
}
|
||||
|
||||
void PTYMultiplexer::notify_master_destroyed(Badge<MasterPTY>, unsigned index)
|
||||
{
|
||||
m_freelist.with([&](auto& freelist) {
|
||||
freelist.append(index);
|
||||
dbgln_if(PTMX_DEBUG, "PTYMultiplexer: {} added to freelist", index);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue