Serenity Operating System
1/*
2 * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <Kernel/Devices/DeviceManagement.h>
8#include <Kernel/Devices/SelfTTYDevice.h>
9#include <Kernel/Sections.h>
10#include <Kernel/TTY/TTY.h>
11
12namespace Kernel {
13
14UNMAP_AFTER_INIT NonnullLockRefPtr<SelfTTYDevice> SelfTTYDevice::must_create()
15{
16 auto self_tty_device_or_error = DeviceManagement::try_create_device<SelfTTYDevice>();
17 // FIXME: Find a way to propagate errors
18 VERIFY(!self_tty_device_or_error.is_error());
19 return self_tty_device_or_error.release_value();
20}
21
22ErrorOr<NonnullRefPtr<OpenFileDescription>> SelfTTYDevice::open(int options)
23{
24 // Note: If for some odd reason we try to open this device (early on boot?)
25 // while there's no current Process assigned, don't fail and return an error.
26 if (!Process::has_current())
27 return Error::from_errno(ESRCH);
28 auto& current_process = Process::current();
29 LockRefPtr<TTY> tty = current_process.tty();
30 if (!tty)
31 return Error::from_errno(ENXIO);
32 auto description = TRY(OpenFileDescription::try_create(*tty));
33 description->set_rw_mode(options);
34 description->set_file_flags(options);
35 return description;
36}
37
38bool SelfTTYDevice::can_read(OpenFileDescription const&, u64) const
39{
40 VERIFY_NOT_REACHED();
41}
42
43bool SelfTTYDevice::can_write(OpenFileDescription const&, u64) const
44{
45 VERIFY_NOT_REACHED();
46}
47
48ErrorOr<size_t> SelfTTYDevice::read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t)
49{
50 VERIFY_NOT_REACHED();
51}
52
53ErrorOr<size_t> SelfTTYDevice::write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t)
54{
55 VERIFY_NOT_REACHED();
56}
57
58UNMAP_AFTER_INIT SelfTTYDevice::SelfTTYDevice()
59 : CharacterDevice(5, 0)
60{
61}
62
63UNMAP_AFTER_INIT SelfTTYDevice::~SelfTTYDevice()
64{
65}
66
67}