mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 05:37:35 +00:00
Kernel/Net: Convert initializers to return NonnullRefPtr<NetworkAdapter>
There's no need for using NonnullLockRefPtr here.
This commit is contained in:
parent
b02ee664e7
commit
9f011592be
8 changed files with 13 additions and 13 deletions
|
@ -188,7 +188,7 @@ UNMAP_AFTER_INIT ErrorOr<bool> E1000ENetworkAdapter::probe(PCI::DeviceIdentifier
|
||||||
return is_valid_device_id(pci_device_identifier.hardware_id().device_id);
|
return is_valid_device_id(pci_device_identifier.hardware_id().device_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
UNMAP_AFTER_INIT ErrorOr<NonnullLockRefPtr<NetworkAdapter>> E1000ENetworkAdapter::create(PCI::DeviceIdentifier const& pci_device_identifier)
|
UNMAP_AFTER_INIT ErrorOr<NonnullRefPtr<NetworkAdapter>> E1000ENetworkAdapter::create(PCI::DeviceIdentifier const& pci_device_identifier)
|
||||||
{
|
{
|
||||||
u8 irq = pci_device_identifier.interrupt_line().value();
|
u8 irq = pci_device_identifier.interrupt_line().value();
|
||||||
auto interface_name = TRY(NetworkingManagement::generate_interface_name_from_pci_address(pci_device_identifier));
|
auto interface_name = TRY(NetworkingManagement::generate_interface_name_from_pci_address(pci_device_identifier));
|
||||||
|
@ -199,7 +199,7 @@ UNMAP_AFTER_INIT ErrorOr<NonnullLockRefPtr<NetworkAdapter>> E1000ENetworkAdapter
|
||||||
auto rx_descriptors_region = TRY(MM.allocate_contiguous_kernel_region(TRY(Memory::page_round_up(sizeof(e1000_rx_desc) * number_of_rx_descriptors)), "E1000 RX Descriptors"sv, Memory::Region::Access::ReadWrite));
|
auto rx_descriptors_region = TRY(MM.allocate_contiguous_kernel_region(TRY(Memory::page_round_up(sizeof(e1000_rx_desc) * number_of_rx_descriptors)), "E1000 RX Descriptors"sv, Memory::Region::Access::ReadWrite));
|
||||||
auto tx_descriptors_region = TRY(MM.allocate_contiguous_kernel_region(TRY(Memory::page_round_up(sizeof(e1000_tx_desc) * number_of_tx_descriptors)), "E1000 TX Descriptors"sv, Memory::Region::Access::ReadWrite));
|
auto tx_descriptors_region = TRY(MM.allocate_contiguous_kernel_region(TRY(Memory::page_round_up(sizeof(e1000_tx_desc) * number_of_tx_descriptors)), "E1000 TX Descriptors"sv, Memory::Region::Access::ReadWrite));
|
||||||
|
|
||||||
return TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) E1000ENetworkAdapter(pci_device_identifier,
|
return TRY(adopt_nonnull_ref_or_enomem(new (nothrow) E1000ENetworkAdapter(pci_device_identifier,
|
||||||
irq, move(registers_io_window),
|
irq, move(registers_io_window),
|
||||||
move(rx_buffer_region),
|
move(rx_buffer_region),
|
||||||
move(tx_buffer_region),
|
move(tx_buffer_region),
|
||||||
|
|
|
@ -21,7 +21,7 @@ class E1000ENetworkAdapter final
|
||||||
: public E1000NetworkAdapter {
|
: public E1000NetworkAdapter {
|
||||||
public:
|
public:
|
||||||
static ErrorOr<bool> probe(PCI::DeviceIdentifier const&);
|
static ErrorOr<bool> probe(PCI::DeviceIdentifier const&);
|
||||||
static ErrorOr<NonnullLockRefPtr<NetworkAdapter>> create(PCI::DeviceIdentifier const&);
|
static ErrorOr<NonnullRefPtr<NetworkAdapter>> create(PCI::DeviceIdentifier const&);
|
||||||
virtual ErrorOr<void> initialize(Badge<NetworkingManagement>) override;
|
virtual ErrorOr<void> initialize(Badge<NetworkingManagement>) override;
|
||||||
|
|
||||||
virtual ~E1000ENetworkAdapter() override;
|
virtual ~E1000ENetworkAdapter() override;
|
||||||
|
|
|
@ -166,7 +166,7 @@ UNMAP_AFTER_INIT ErrorOr<bool> E1000NetworkAdapter::probe(PCI::DeviceIdentifier
|
||||||
return is_valid_device_id(pci_device_identifier.hardware_id().device_id);
|
return is_valid_device_id(pci_device_identifier.hardware_id().device_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
UNMAP_AFTER_INIT ErrorOr<NonnullLockRefPtr<NetworkAdapter>> E1000NetworkAdapter::create(PCI::DeviceIdentifier const& pci_device_identifier)
|
UNMAP_AFTER_INIT ErrorOr<NonnullRefPtr<NetworkAdapter>> E1000NetworkAdapter::create(PCI::DeviceIdentifier const& pci_device_identifier)
|
||||||
{
|
{
|
||||||
u8 irq = pci_device_identifier.interrupt_line().value();
|
u8 irq = pci_device_identifier.interrupt_line().value();
|
||||||
auto interface_name = TRY(NetworkingManagement::generate_interface_name_from_pci_address(pci_device_identifier));
|
auto interface_name = TRY(NetworkingManagement::generate_interface_name_from_pci_address(pci_device_identifier));
|
||||||
|
@ -177,7 +177,7 @@ UNMAP_AFTER_INIT ErrorOr<NonnullLockRefPtr<NetworkAdapter>> E1000NetworkAdapter:
|
||||||
auto rx_descriptors_region = TRY(MM.allocate_contiguous_kernel_region(TRY(Memory::page_round_up(sizeof(e1000_rx_desc) * number_of_rx_descriptors)), "E1000 RX Descriptors"sv, Memory::Region::Access::ReadWrite));
|
auto rx_descriptors_region = TRY(MM.allocate_contiguous_kernel_region(TRY(Memory::page_round_up(sizeof(e1000_rx_desc) * number_of_rx_descriptors)), "E1000 RX Descriptors"sv, Memory::Region::Access::ReadWrite));
|
||||||
auto tx_descriptors_region = TRY(MM.allocate_contiguous_kernel_region(TRY(Memory::page_round_up(sizeof(e1000_tx_desc) * number_of_tx_descriptors)), "E1000 TX Descriptors"sv, Memory::Region::Access::ReadWrite));
|
auto tx_descriptors_region = TRY(MM.allocate_contiguous_kernel_region(TRY(Memory::page_round_up(sizeof(e1000_tx_desc) * number_of_tx_descriptors)), "E1000 TX Descriptors"sv, Memory::Region::Access::ReadWrite));
|
||||||
|
|
||||||
return TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) E1000NetworkAdapter(pci_device_identifier,
|
return TRY(adopt_nonnull_ref_or_enomem(new (nothrow) E1000NetworkAdapter(pci_device_identifier,
|
||||||
irq, move(registers_io_window),
|
irq, move(registers_io_window),
|
||||||
move(rx_buffer_region),
|
move(rx_buffer_region),
|
||||||
move(tx_buffer_region),
|
move(tx_buffer_region),
|
||||||
|
|
|
@ -21,7 +21,7 @@ class E1000NetworkAdapter : public NetworkAdapter
|
||||||
, public IRQHandler {
|
, public IRQHandler {
|
||||||
public:
|
public:
|
||||||
static ErrorOr<bool> probe(PCI::DeviceIdentifier const&);
|
static ErrorOr<bool> probe(PCI::DeviceIdentifier const&);
|
||||||
static ErrorOr<NonnullLockRefPtr<NetworkAdapter>> create(PCI::DeviceIdentifier const&);
|
static ErrorOr<NonnullRefPtr<NetworkAdapter>> create(PCI::DeviceIdentifier const&);
|
||||||
virtual ErrorOr<void> initialize(Badge<NetworkingManagement>) override;
|
virtual ErrorOr<void> initialize(Badge<NetworkingManagement>) override;
|
||||||
|
|
||||||
virtual ~E1000NetworkAdapter() override;
|
virtual ~E1000NetworkAdapter() override;
|
||||||
|
|
|
@ -93,7 +93,7 @@ ErrorOr<NonnullOwnPtr<KString>> NetworkingManagement::generate_interface_name_fr
|
||||||
|
|
||||||
struct PCINetworkDriverInitializer {
|
struct PCINetworkDriverInitializer {
|
||||||
ErrorOr<bool> (*probe)(PCI::DeviceIdentifier const&) = nullptr;
|
ErrorOr<bool> (*probe)(PCI::DeviceIdentifier const&) = nullptr;
|
||||||
ErrorOr<NonnullLockRefPtr<NetworkAdapter>> (*create)(PCI::DeviceIdentifier const&) = nullptr;
|
ErrorOr<NonnullRefPtr<NetworkAdapter>> (*create)(PCI::DeviceIdentifier const&) = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr PCINetworkDriverInitializer s_initializers[] = {
|
static constexpr PCINetworkDriverInitializer s_initializers[] = {
|
||||||
|
@ -102,7 +102,7 @@ static constexpr PCINetworkDriverInitializer s_initializers[] = {
|
||||||
{ E1000ENetworkAdapter::probe, E1000ENetworkAdapter::create },
|
{ E1000ENetworkAdapter::probe, E1000ENetworkAdapter::create },
|
||||||
};
|
};
|
||||||
|
|
||||||
UNMAP_AFTER_INIT ErrorOr<NonnullLockRefPtr<NetworkAdapter>> NetworkingManagement::determine_network_device(PCI::DeviceIdentifier const& device_identifier) const
|
UNMAP_AFTER_INIT ErrorOr<NonnullRefPtr<NetworkAdapter>> NetworkingManagement::determine_network_device(PCI::DeviceIdentifier const& device_identifier) const
|
||||||
{
|
{
|
||||||
for (auto& initializer : s_initializers) {
|
for (auto& initializer : s_initializers) {
|
||||||
auto initializer_probe_found_driver_match_or_error = initializer.probe(device_identifier);
|
auto initializer_probe_found_driver_match_or_error = initializer.probe(device_identifier);
|
||||||
|
@ -133,7 +133,7 @@ bool NetworkingManagement::initialize()
|
||||||
dmesgln("Failed to initialize network adapter ({} {}): {}", device_identifier.address(), device_identifier.hardware_id(), result.error());
|
dmesgln("Failed to initialize network adapter ({} {}): {}", device_identifier.address(), device_identifier.hardware_id(), result.error());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_adapters.with([&](auto& adapters) { adapters.append(result.release_value()); });
|
m_adapters.with([&](auto& adapters) { adapters.append(*result.release_value()); });
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
auto loopback = LoopbackAdapter::try_create();
|
auto loopback = LoopbackAdapter::try_create();
|
||||||
|
|
|
@ -39,7 +39,7 @@ public:
|
||||||
NonnullLockRefPtr<NetworkAdapter> loopback_adapter() const;
|
NonnullLockRefPtr<NetworkAdapter> loopback_adapter() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ErrorOr<NonnullLockRefPtr<NetworkAdapter>> determine_network_device(PCI::DeviceIdentifier const&) const;
|
ErrorOr<NonnullRefPtr<NetworkAdapter>> determine_network_device(PCI::DeviceIdentifier const&) const;
|
||||||
|
|
||||||
SpinlockProtected<Vector<NonnullLockRefPtr<NetworkAdapter>>, LockRank::None> m_adapters {};
|
SpinlockProtected<Vector<NonnullLockRefPtr<NetworkAdapter>>, LockRank::None> m_adapters {};
|
||||||
LockRefPtr<NetworkAdapter> m_loopback_adapter;
|
LockRefPtr<NetworkAdapter> m_loopback_adapter;
|
||||||
|
|
|
@ -191,12 +191,12 @@ UNMAP_AFTER_INIT ErrorOr<bool> RTL8168NetworkAdapter::probe(PCI::DeviceIdentifie
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
UNMAP_AFTER_INIT ErrorOr<NonnullLockRefPtr<NetworkAdapter>> RTL8168NetworkAdapter::create(PCI::DeviceIdentifier const& pci_device_identifier)
|
UNMAP_AFTER_INIT ErrorOr<NonnullRefPtr<NetworkAdapter>> RTL8168NetworkAdapter::create(PCI::DeviceIdentifier const& pci_device_identifier)
|
||||||
{
|
{
|
||||||
u8 irq = pci_device_identifier.interrupt_line().value();
|
u8 irq = pci_device_identifier.interrupt_line().value();
|
||||||
auto interface_name = TRY(NetworkingManagement::generate_interface_name_from_pci_address(pci_device_identifier));
|
auto interface_name = TRY(NetworkingManagement::generate_interface_name_from_pci_address(pci_device_identifier));
|
||||||
auto registers_io_window = TRY(IOWindow::create_for_pci_device_bar(pci_device_identifier, PCI::HeaderType0BaseRegister::BAR0));
|
auto registers_io_window = TRY(IOWindow::create_for_pci_device_bar(pci_device_identifier, PCI::HeaderType0BaseRegister::BAR0));
|
||||||
return TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) RTL8168NetworkAdapter(pci_device_identifier, irq, move(registers_io_window), move(interface_name))));
|
return TRY(adopt_nonnull_ref_or_enomem(new (nothrow) RTL8168NetworkAdapter(pci_device_identifier, irq, move(registers_io_window), move(interface_name))));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RTL8168NetworkAdapter::determine_supported_version() const
|
bool RTL8168NetworkAdapter::determine_supported_version() const
|
||||||
|
|
|
@ -22,7 +22,7 @@ class RTL8168NetworkAdapter final : public NetworkAdapter
|
||||||
, public IRQHandler {
|
, public IRQHandler {
|
||||||
public:
|
public:
|
||||||
static ErrorOr<bool> probe(PCI::DeviceIdentifier const&);
|
static ErrorOr<bool> probe(PCI::DeviceIdentifier const&);
|
||||||
static ErrorOr<NonnullLockRefPtr<NetworkAdapter>> create(PCI::DeviceIdentifier const&);
|
static ErrorOr<NonnullRefPtr<NetworkAdapter>> create(PCI::DeviceIdentifier const&);
|
||||||
virtual ErrorOr<void> initialize(Badge<NetworkingManagement>) override;
|
virtual ErrorOr<void> initialize(Badge<NetworkingManagement>) override;
|
||||||
|
|
||||||
virtual ~RTL8168NetworkAdapter() override;
|
virtual ~RTL8168NetworkAdapter() override;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue