[PATCH libdrm 3/5] xf86drm: implement drmParsePciDeviceInfo for OpenBSD
Emil Velikov
emil.l.velikov at gmail.com
Tue Nov 29 19:55:13 UTC 2016
On 26 November 2016 at 00:40, Jonathan Gray <jsg at jsg.id.au> wrote:
> Implement drmParsePciDeviceInfo for OpenBSD by using the new
> DRM_IOCTL_GET_PCIINFO ioctl.
>
> Signed-off-by: Jonathan Gray <jsg at jsg.id.au>
> ---
> xf86drm.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 51 insertions(+)
>
> diff --git a/xf86drm.c b/xf86drm.c
> index b355c83..581527b 100644
> --- a/xf86drm.c
> +++ b/xf86drm.c
> @@ -102,6 +102,26 @@
> #define DRM_MAJOR 226 /* Linux */
> #endif
>
> +#ifdef __OpenBSD__
> +
> +#define X_PRIVSEP
> +
> +struct drm_pciinfo {
> + uint16_t domain;
> + uint8_t bus;
> + uint8_t dev;
> + uint8_t func;
> + uint16_t vendor_id;
> + uint16_t device_id;
> + uint16_t subvendor_id;
> + uint16_t subdevice_id;
> + uint8_t revision_id;
> +};
> +
> +#define DRM_IOCTL_GET_PCIINFO DRM_IOR(0x15, struct drm_pciinfo)
> +
> +#endif
> +
> #define DRM_MSG_VERBOSITY 3
>
> #define memclear(s) memset(&s, 0, sizeof(s))
> @@ -2991,6 +3011,37 @@ static int drmParsePciDeviceInfo(const char *d_name,
> device->subdevice_id = config[46] | (config[47] << 8);
>
> return 0;
> +#elif defined(__OpenBSD__)
> + struct drm_pciinfo pinfo;
> + char buf[PATH_MAX + 1];
> + int fd, n;
> +
> + n = snprintf(buf, sizeof(buf), "%s/%s", DRM_DIR_NAME, d_name);
> + if (n == -1 || n >= sizeof(buf))
> + return -errno;
> +
> +#ifndef X_PRIVSEP
> + fd = open(buf, O_RDWR, 0);
> +#else
> + fd = priv_open_device(buf);
> +#endif
> +
Since X_PRIVSEP is always set one can drop the ifndef case alongside
the define X_PRIVSEP all together. At the same time, priv_open_device
isn't defined thus one might well use drmOpenMinor() like in 4/5 ?
Sidenote: In the future we might fold drmParsePciBusInfo and
drmParsePciDeviceInfo, but for the moment we have to keep them
separate :-(
Thanks
Emil
More information about the dri-devel
mailing list