Skip to content

Commit

Permalink
drm: Add uDRM subproject and bridge module
Browse files Browse the repository at this point in the history
  • Loading branch information
marv7000 committed Dec 26, 2024
1 parent 321b634 commit fe2ed3e
Show file tree
Hide file tree
Showing 8 changed files with 86 additions and 5 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@
[submodule "kernel/system/uapi/uapi"]
path = kernel/system/uapi/uapi
url = https://github.com/uDrivers/uAPI
[submodule "modules/drv/gpu/drm/udrm"]
path = modules/drv/gpu/drm/udrm
url = https://github.com/uDrivers/uDRM
6 changes: 3 additions & 3 deletions include/menix/system/pci/pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,11 @@ typedef struct PciDriver
i32 (*probe)(PciDevice* dev);
// Called when a device is being removed. (Optional).
void (*remove)(PciDevice* dev);
// Called to put a device to sleep. Returns 0 if successful.
// Called to put a device to sleep. Returns 0 if successful. (Optional).
i32 (*suspend)(PciDevice* dev);
// Called to wake it back up again. Returns 0 if successful.
// Called to wake it back up again. Returns 0 if successful. (Optional).
i32 (*resume)(PciDevice* dev);
// Called to deinitialize a device during shutdown.
// Called to deinitialize a device during shutdown. (Optional).
void (*shutdown)(PciDevice* dev);
} PciDriver;

Expand Down
3 changes: 2 additions & 1 deletion kernel/system/uapi/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

target_sources(menix PUBLIC
pci.c
log.c
)

target_include_directories(menix PUBLIC .)
target_include_directories(menix PUBLIC .)
24 changes: 24 additions & 0 deletions kernel/system/uapi/log.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// uAPI log.h implementation

#include <menix/common.h>
#include <menix/util/log.h>

#include <uapi/status.h>
#include <uapi/types.h>

#define UAPI_KERNEL_API
#define UAPI_WANTS_LOG
#include <uapi/log.h>
#undef UAPI_KERNEL_API

void uapi_kernel_log(uapi_log_level level, const uapi_char* msg)
{
switch (level)
{
case UAPI_LOG_INFO:
case UAPI_LOG_TRACE:
case UAPI_LOG_DEBUG: print_log("uapi: %s", msg); break;
case UAPI_LOG_WARN: print_warn("uapi: %s", msg); break;
case UAPI_LOG_ERROR: print_error("uapi: %s", msg); break;
}
}
7 changes: 6 additions & 1 deletion kernel/system/uapi/pci.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// uDRM Bridge
// uAPI pci.h implementation

#include <menix/common.h>
#include <menix/io/mmio.h>
Expand All @@ -7,6 +7,11 @@
#include <uapi/status.h>
#include <uapi/types.h>

#define UAPI_KERNEL_API
#define UAPI_WANTS_PCI
#include <uapi/pci.h>
#undef UAPI_KERNEL_API

uapi_status uapi_kernel_pci_cfg_read(uapi_handle handle, uapi_size offset, uapi_u8 byte_width, uapi_u64* value)
{
PciDevice* const device = handle;
Expand Down
8 changes: 8 additions & 0 deletions modules/drv/gpu/drm/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Direct Rendering Manager

add_module(udrm "Marvin Friedrich" "Direct Rendering Manager" MAIN OFF ON
udrm_bridge.c
udrm/src/udrm_core.c
udrm/src/udrm_bochs.c
)
target_include_directories(${MENIX_CURRENT_MOD} PRIVATE udrm/include)
1 change: 1 addition & 0 deletions modules/drv/gpu/drm/udrm
Submodule udrm added at 2ccad7
39 changes: 39 additions & 0 deletions modules/drv/gpu/drm/udrm_bridge.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// uDRM Bridge

#include <menix/common.h>
#include <menix/io/mmio.h>
#include <menix/system/module.h>
#include <menix/system/pci/pci.h>

#include <udrm/kernel_api.h>
#include <udrm/udrm.h>

static i32 bochs_probe(PciDevice* dev)
{
uapi_status status = udrm_bochs_probe(dev);
return status;
}

static PciVariant bochs_variant = {
.vendor = 0x1234,
.device = 0x1111,
};

static PciDriver bochs_driver = {
.name = "udrm_bochs",
.variants = &bochs_variant,
.num_variants = 1,
.probe = bochs_probe,
};

static i32 init_fn()
{
udrm_initialize();

// Register all device drivers.
pci_register_driver(&bochs_driver);

return 0;
}

MODULE_DEFAULT(init_fn, NULL);

0 comments on commit fe2ed3e

Please sign in to comment.