mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-07 19:57:45 +03:00
062e0db46c
Since it will become a stream in a little bit, it should behave like all non-trivial stream classes, who are not primarily intended to have shared ownership to make closing behavior more predictable. Across all uses of MappedFile, there is only one use case of shared mapped files in LibVideo, which now uses the thin SharedMappedFile wrapper.
88 lines
2.0 KiB
C++
88 lines
2.0 KiB
C++
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/DeprecatedString.h>
|
|
#include <AK/HashMap.h>
|
|
#include <AK/NonnullOwnPtr.h>
|
|
#include <AK/RefCounted.h>
|
|
#include <AK/RefPtr.h>
|
|
#include <AK/StringView.h>
|
|
#include <LibCore/MappedFile.h>
|
|
|
|
namespace PCIDB {
|
|
|
|
struct Subsystem {
|
|
u16 vendor_id;
|
|
u16 device_id;
|
|
StringView name;
|
|
};
|
|
|
|
struct Device {
|
|
u16 id;
|
|
StringView name;
|
|
HashMap<int, NonnullOwnPtr<Subsystem>> subsystems;
|
|
};
|
|
|
|
struct Vendor {
|
|
u16 id;
|
|
StringView name;
|
|
HashMap<int, NonnullOwnPtr<Device>> devices;
|
|
};
|
|
|
|
struct ProgrammingInterface {
|
|
u8 id { 0 };
|
|
StringView name {};
|
|
};
|
|
|
|
struct Subclass {
|
|
u8 id { 0 };
|
|
StringView name {};
|
|
HashMap<int, NonnullOwnPtr<ProgrammingInterface>> programming_interfaces;
|
|
};
|
|
|
|
struct Class {
|
|
u8 id { 0 };
|
|
StringView name {};
|
|
HashMap<int, NonnullOwnPtr<Subclass>> subclasses;
|
|
};
|
|
|
|
class Database : public RefCounted<Database> {
|
|
public:
|
|
static RefPtr<Database> open(DeprecatedString const& filename);
|
|
static RefPtr<Database> open() { return open("/res/pci.ids"); }
|
|
|
|
const StringView get_vendor(u16 vendor_id) const;
|
|
const StringView get_device(u16 vendor_id, u16 device_id) const;
|
|
const StringView get_subsystem(u16 vendor_id, u16 device_id, u16 subvendor_id, u16 subdevice_id) const;
|
|
const StringView get_class(u8 class_id) const;
|
|
const StringView get_subclass(u8 class_id, u8 subclass_id) const;
|
|
const StringView get_programming_interface(u8 class_id, u8 subclass_id, u8 programming_interface_id) const;
|
|
|
|
private:
|
|
explicit Database(NonnullOwnPtr<Core::MappedFile> file)
|
|
: m_file(move(file))
|
|
{
|
|
}
|
|
|
|
int init();
|
|
|
|
enum ParseMode {
|
|
UnknownMode,
|
|
VendorMode,
|
|
ClassMode,
|
|
};
|
|
|
|
NonnullOwnPtr<Core::MappedFile> m_file;
|
|
StringView m_view {};
|
|
HashMap<int, NonnullOwnPtr<Vendor>> m_vendors;
|
|
HashMap<int, NonnullOwnPtr<Class>> m_classes;
|
|
bool m_ready { false };
|
|
};
|
|
|
|
}
|