Kernel: Remove the AllMiceDevice class

This device was a short-lived solution to allow userspace (WindowServer)
to easily support hotplugging mouse devices with presumably very small
modifications on userspace side.

Now that we have a proper mechanism to propagate hotplug events from the
DeviceMapper program to any program that needs to get such events, we no
longer need this device, so let's remove it.
This commit is contained in:
Liav A. 2024-05-04 21:11:58 +03:00 committed by Nico Weber
parent 60e9f24084
commit e89726562b
7 changed files with 0 additions and 116 deletions

View file

@ -24,7 +24,6 @@ enum class CharacterDeviceFamily : unsigned {
Console = 5,
Mouse = 10,
FUSE = 11,
AllMice = 12,
GPURender = 28,
VirtualConsole = 35,
Keyboard = 85,
@ -42,7 +41,6 @@ static constexpr CharacterDeviceFamily s_character_device_numbers[] = {
CharacterDeviceFamily::Console,
CharacterDeviceFamily::Mouse,
CharacterDeviceFamily::FUSE,
CharacterDeviceFamily::AllMice,
CharacterDeviceFamily::GPURender,
CharacterDeviceFamily::VirtualConsole,
CharacterDeviceFamily::Keyboard,
@ -85,8 +83,6 @@ ALWAYS_INLINE StringView character_device_family_to_string_view(CharacterDeviceF
return "mouse"sv;
case CharacterDeviceFamily::FUSE:
return "fuse"sv;
case CharacterDeviceFamily::AllMice:
return "all-mice"sv;
case CharacterDeviceFamily::GPURender:
return "gpu-render"sv;
case CharacterDeviceFamily::VirtualConsole:

View file

@ -66,7 +66,6 @@ set(KERNEL_SOURCES
Devices/FUSEDevice.cpp
Devices/PCISerialDevice.cpp
Devices/SerialDevice.cpp
Devices/HID/AllMiceDevice.cpp
Devices/HID/KeyboardDevice.cpp
Devices/HID/Management.cpp
Devices/HID/MouseDevice.cpp

View file

@ -1,58 +0,0 @@
/*
* Copyright (c) 2023, Liav A. <liavalb@hotmail.co.il>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <Kernel/API/MajorNumberAllocation.h>
#include <Kernel/Devices/DeviceManagement.h>
#include <Kernel/Devices/HID/AllMiceDevice.h>
#include <Kernel/Devices/HID/Management.h>
namespace Kernel {
NonnullRefPtr<AllMiceDevice> AllMiceDevice::must_create()
{
return *MUST(DeviceManagement::try_create_device<AllMiceDevice>());
}
AllMiceDevice::AllMiceDevice()
: CharacterDevice(MajorAllocation::CharacterDeviceFamily::AllMice, 0)
{
}
void AllMiceDevice::enqueue_mouse_packet(MousePacket packet)
{
{
SpinlockLocker lock(m_queue_lock);
m_queue.enqueue(packet);
}
evaluate_block_conditions();
}
AllMiceDevice::~AllMiceDevice() = default;
bool AllMiceDevice::can_read(OpenFileDescription const&, u64) const
{
SpinlockLocker lock(m_queue_lock);
return !m_queue.is_empty();
}
ErrorOr<size_t> AllMiceDevice::read(OpenFileDescription&, u64, UserOrKernelBuffer& buffer, size_t size)
{
VERIFY(size > 0);
size_t nread = 0;
size_t remaining_space_in_buffer = static_cast<size_t>(size) - nread;
SpinlockLocker lock(m_queue_lock);
while (!m_queue.is_empty() && remaining_space_in_buffer) {
auto packet = m_queue.dequeue();
size_t bytes_read_from_packet = min(remaining_space_in_buffer, sizeof(MousePacket));
TRY(buffer.write(&packet, nread, bytes_read_from_packet));
nread += bytes_read_from_packet;
remaining_space_in_buffer -= bytes_read_from_packet;
}
return nread;
}
}

View file

@ -1,40 +0,0 @@
/*
* Copyright (c) 2023, Liav A. <liavalb@hotmail.co.il>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/CircularQueue.h>
#include <AK/Types.h>
#include <Kernel/API/MousePacket.h>
#include <Kernel/Devices/CharacterDevice.h>
#include <Kernel/Security/Random.h>
namespace Kernel {
class AllMiceDevice final : public CharacterDevice {
friend class DeviceManagement;
public:
static NonnullRefPtr<AllMiceDevice> must_create();
virtual ~AllMiceDevice() override;
void enqueue_mouse_packet(MousePacket packet);
private:
AllMiceDevice();
// ^CharacterDevice
virtual StringView class_name() const override { return "AllMiceDevice"sv; }
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual bool can_read(OpenFileDescription const&, u64) const override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) override { return EINVAL; }
virtual bool can_write(OpenFileDescription const&, u64) const override { return true; }
mutable Spinlock<LockRank::None> m_queue_lock {};
CircularQueue<MousePacket, 1000> m_queue;
};
}

View file

@ -79,11 +79,6 @@ static constexpr Keyboard::CharacterMapData DEFAULT_CHARACTER_MAP =
};
// clang-format on
void HIDManagement::enqueue_mouse_packet(Badge<MouseDevice>, MousePacket packet)
{
m_all_mice_device->enqueue_mouse_packet(packet);
}
void HIDManagement::set_client(KeyboardClient* client)
{
SpinlockLocker locker(m_client_lock);
@ -108,7 +103,6 @@ UNMAP_AFTER_INIT HIDManagement::KeymapData::KeymapData()
}
UNMAP_AFTER_INIT HIDManagement::HIDManagement()
: m_all_mice_device(AllMiceDevice::must_create())
{
}

View file

@ -16,7 +16,6 @@
#include <AK/Types.h>
#include <Kernel/API/KeyCode.h>
#include <Kernel/Bus/SerialIO/Controller.h>
#include <Kernel/Devices/HID/AllMiceDevice.h>
#include <Kernel/Devices/HID/Device.h>
#include <Kernel/Locking/Spinlock.h>
#include <Kernel/Locking/SpinlockProtected.h>
@ -33,7 +32,6 @@ class KeyboardClient;
class HIDManagement {
friend class KeyboardDevice;
friend class MouseDevice;
friend class AllMiceDevice;
public:
HIDManagement();
@ -58,8 +56,6 @@ public:
void attach_standalone_hid_device(HIDDevice&);
void detach_standalone_hid_device(HIDDevice&);
void enqueue_mouse_packet(Badge<MouseDevice>, MousePacket);
private:
size_t generate_minor_device_number_for_mouse();
size_t generate_minor_device_number_for_keyboard();
@ -69,8 +65,6 @@ private:
size_t m_keyboard_minor_number { 0 };
KeyboardClient* m_client { nullptr };
NonnullRefPtr<AllMiceDevice> m_all_mice_device;
SpinlockProtected<IntrusiveList<&SerialIOController::m_list_node>, LockRank::None> m_hid_serial_io_controllers;
// NOTE: This list is used for standalone devices, like USB HID devices
// (which are not attached via a SerialIO controller in the sense that

View file

@ -24,7 +24,6 @@ MouseDevice::MouseDevice()
void MouseDevice::handle_mouse_packet_input_event(MousePacket packet)
{
m_entropy_source.add_random_event(packet);
HIDManagement::the().enqueue_mouse_packet({}, packet);
{
SpinlockLocker lock(m_queue_lock);
m_queue.enqueue(packet);