mirror of
https://github.com/SerenityOS/serenity
synced 2024-09-30 13:14:36 +00:00
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:
parent
60e9f24084
commit
e89726562b
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
};
|
||||
}
|
|
@ -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())
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue