From dbff692c8677f9da0a4736e4cd04f02bb50e659e Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Thu, 17 Aug 2017 13:07:39 +0200 Subject: [PATCH] libports: DRM library 2.4.65 issue #2488 --- repos/libports/lib/import/import-drm.mk | 2 + repos/libports/lib/mk/drm.mk | 26 +++++++++ repos/libports/ports/drm.hash | 1 + repos/libports/ports/drm.port | 11 ++++ repos/libports/src/lib/drm/dummies.cc | 55 +++++++++++++++++++ repos/libports/src/lib/drm/files.list | 18 ++++++ .../src/lib/drm/include/genode_types.h | 9 +++ .../src/lib/drm/include/libdrm_macros.h | 20 +++++++ .../libports/src/lib/drm/include/pciaccess.h | 23 ++++++++ repos/libports/src/lib/drm/ioctl.cc | 26 +++++++++ 10 files changed, 191 insertions(+) create mode 100644 repos/libports/lib/import/import-drm.mk create mode 100644 repos/libports/lib/mk/drm.mk create mode 100644 repos/libports/ports/drm.hash create mode 100644 repos/libports/ports/drm.port create mode 100644 repos/libports/src/lib/drm/dummies.cc create mode 100644 repos/libports/src/lib/drm/files.list create mode 100644 repos/libports/src/lib/drm/include/genode_types.h create mode 100644 repos/libports/src/lib/drm/include/libdrm_macros.h create mode 100644 repos/libports/src/lib/drm/include/pciaccess.h create mode 100644 repos/libports/src/lib/drm/ioctl.cc diff --git a/repos/libports/lib/import/import-drm.mk b/repos/libports/lib/import/import-drm.mk new file mode 100644 index 0000000000..f324d388d5 --- /dev/null +++ b/repos/libports/lib/import/import-drm.mk @@ -0,0 +1,2 @@ +DRM_DIR = $(call select_from_ports,drm)/src/lib/drm +INC_DIR += $(DRM_DIR) $(addprefix $(DRM_DIR)/,intel include/drm) diff --git a/repos/libports/lib/mk/drm.mk b/repos/libports/lib/mk/drm.mk new file mode 100644 index 0000000000..69a4e5f511 --- /dev/null +++ b/repos/libports/lib/mk/drm.mk @@ -0,0 +1,26 @@ +SHARED_LIB = yes +LIBS = libc +DRM_SRC_DIR := $(call select_from_ports,drm)/src/lib/drm +LIB_DIR = $(REP_DIR)/src/lib/drm + +INC_DIR += $(DRM_SRC_DIR)/include/drm $(LIB_DIR)/include \ + $(DRM_SRC_DIR) + +SRC_C = intel/intel_bufmgr.c \ + intel/intel_bufmgr_gem.c \ + intel/intel_decode.c \ + xf86drm.c xf86drmHash.c \ + xf86drmRandom.c + +SRC_CC = dummies.cc ioctl.cc + +CC_OPT = -DHAVE_LIBDRM_ATOMIC_PRIMITIVES=1 -DO_CLOEXEC=0 + +# +# We rename 'ioctl' calls to 'genode_ioctl' calls, this way we are not required +# to write a libc plugin for libdrm. +# +CC_C_OPT += -Dioctl=genode_ioctl + +vpath %.c $(DRM_SRC_DIR) +vpath %.cc $(LIB_DIR) diff --git a/repos/libports/ports/drm.hash b/repos/libports/ports/drm.hash new file mode 100644 index 0000000000..5f7f6d1495 --- /dev/null +++ b/repos/libports/ports/drm.hash @@ -0,0 +1 @@ +97d3bb14d989f15d91f42b0cba901be5841bff4b diff --git a/repos/libports/ports/drm.port b/repos/libports/ports/drm.port new file mode 100644 index 0000000000..08c4603ef4 --- /dev/null +++ b/repos/libports/ports/drm.port @@ -0,0 +1,11 @@ +LICENSE := MIT +VERSION := 2.4.65 +DOWNLOADS := drm.archive + +URL(drm) := https://dri.freedesktop.org/libdrm/libdrm-$(VERSION).tar.bz2 +SHA(drm) := 74a6b2aa8c436e822e3ec5c52e463313c4e219d9 +DIR(drm) := src/lib/drm +TAR_OPT(drm) := --strip-components=1 --files-from $(REP_DIR)/src/lib/drm/files.list +HASH_INPUT += $(REP_DIR)/src/lib/mesa/files.list + + diff --git a/repos/libports/src/lib/drm/dummies.cc b/repos/libports/src/lib/drm/dummies.cc new file mode 100644 index 0000000000..61e645d4f5 --- /dev/null +++ b/repos/libports/src/lib/drm/dummies.cc @@ -0,0 +1,55 @@ +/** + * \brief DRM library dummies + * \author Sebastian Sumpf + * \date 2017-08-17 + */ + +/* + * Copyright (C) 2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + + + +extern "C" { +#include +} + +#include + +#define TRACE Genode::log(__func__, "called not implemented"); + +int pci_system_init(void) +{ + TRACE; + return -1; +} + + +void pci_system_cleanup(void) +{ + TRACE; +} + + +struct pci_device *pci_device_find_by_slot(uint32_t domain, uint32_t bus, + uint32_t dev, uint32_t func) +{ + TRACE; + return nullptr; +} + + +int pci_device_probe(struct pci_device *dev) +{ + TRACE; + return -1; +} + +extern "C" int posix_memalign(void **memptr, size_t alignment, size_t size) +{ + TRACE; + return -1; +} diff --git a/repos/libports/src/lib/drm/files.list b/repos/libports/src/lib/drm/files.list new file mode 100644 index 0000000000..7c3c608034 --- /dev/null +++ b/repos/libports/src/lib/drm/files.list @@ -0,0 +1,18 @@ +libdrm-2.4.65/libdrm_lists.h +libdrm-2.4.65/xf86atomic.h +libdrm-2.4.65/xf86drm.c +libdrm-2.4.65/xf86drm.h +libdrm-2.4.65/xf86drmHash.c +libdrm-2.4.65/xf86drmHash.h +libdrm-2.4.65/xf86drmRandom.c +libdrm-2.4.65/xf86drmRandom.h +libdrm-2.4.65/include/drm/drm_mode.h +libdrm-2.4.65/include/drm/drm.h +libdrm-2.4.65/include/drm/i915_drm.h +libdrm-2.4.65/intel/intel_aub.h +libdrm-2.4.65/intel/intel_bufmgr.c +libdrm-2.4.65/intel/intel_bufmgr.h +libdrm-2.4.65/intel/intel_bufmgr_priv.h +libdrm-2.4.65/intel/intel_bufmgr_gem.c +libdrm-2.4.65/intel/intel_chipset.h +libdrm-2.4.65/intel/intel_decode.c diff --git a/repos/libports/src/lib/drm/include/genode_types.h b/repos/libports/src/lib/drm/include/genode_types.h new file mode 100644 index 0000000000..ad2c4ba205 --- /dev/null +++ b/repos/libports/src/lib/drm/include/genode_types.h @@ -0,0 +1,9 @@ +#ifndef _INCLUDE__GENODE_TYPES_H_ +#define _INCLUDE__GENODE_TYPES_H_ + +#include + +typedef genode_uint32_t uint32_t; +typedef __SIZE_TYPE__ size_t; + +#endif /* _INCLUDE__GENODE_TYPES_H_ */ diff --git a/repos/libports/src/lib/drm/include/libdrm_macros.h b/repos/libports/src/lib/drm/include/libdrm_macros.h new file mode 100644 index 0000000000..42bc532787 --- /dev/null +++ b/repos/libports/src/lib/drm/include/libdrm_macros.h @@ -0,0 +1,20 @@ +#ifndef _INCLUDE__LIBDRM_MACROS_H_ +#define _INCLUDE__LIBDRM_MACROS_H_ + +#include + +/** + * On Genode the virtual address of MMAP_GTT is stored in the offset + */ +static inline void *drm_mmap(void *addr, size_t length, int prot, int flags, + int fd, off_t offset) +{ + return (void *)offset; +} + +static inline int drm_munmap(void *addr, size_t length) +{ + return 0; +} + +#endif /* _INCLUDE__LIBDRM_MACROS_H_ */ diff --git a/repos/libports/src/lib/drm/include/pciaccess.h b/repos/libports/src/lib/drm/include/pciaccess.h new file mode 100644 index 0000000000..0410ee1944 --- /dev/null +++ b/repos/libports/src/lib/drm/include/pciaccess.h @@ -0,0 +1,23 @@ +#ifndef _INCLUDE__PCIACCESS_H_ +#define _INCLUDE__PCIACCESS_H_ + +#include + +struct pci_mem_region +{ + void *memory; + size_t size; +}; + +struct pci_device +{ + struct pci_mem_region regions[6]; +}; + +int pci_system_init(void); +void pci_system_cleanup(void); +int pci_device_probe(struct pci_device *dev); + +struct pci_device *pci_device_find_by_slot(uint32_t domain, uint32_t bus, + uint32_t dev, uint32_t func); +#endif /* _INCLUDE__PCIACCESS_H_ */ diff --git a/repos/libports/src/lib/drm/ioctl.cc b/repos/libports/src/lib/drm/ioctl.cc new file mode 100644 index 0000000000..7cf6abdeab --- /dev/null +++ b/repos/libports/src/lib/drm/ioctl.cc @@ -0,0 +1,26 @@ +/** + * \brief Called for every DRM function (implement me) + * \author Sebastian Sumpf + * \date 2017-08-17 + */ + +/* + * Copyright (C) 2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +extern "C" { +#include +#include +} + +#include + + +extern "C" int genode_ioctl(int fd, unsigned long request, void *arg) +{ + Genode::error(__func__, " not implemented"); + return -1; +}