sync with OpenBSD -current

This commit is contained in:
purplerain 2024-01-31 02:14:33 +00:00
parent abc24a81d1
commit 921461fcd8
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
53 changed files with 2169 additions and 443 deletions

View file

@ -833,8 +833,6 @@ static const char *drmGetDeviceName(int type)
switch (type) {
case DRM_NODE_PRIMARY:
return DRM_DEV_NAME;
case DRM_NODE_CONTROL:
return DRM_CONTROL_DEV_NAME;
case DRM_NODE_RENDER:
return DRM_RENDER_DEV_NAME;
}
@ -1053,8 +1051,6 @@ static int drmGetMinorBase(int type)
switch (type) {
case DRM_NODE_PRIMARY:
return 0;
case DRM_NODE_CONTROL:
return 64;
case DRM_NODE_RENDER:
return 128;
default:
@ -1075,8 +1071,6 @@ static int drmGetMinorType(int major, int minor)
// If not in /dev/drm/ we have the type in the name
if (sscanf(name, "dri/card%d\n", &id) >= 1)
return DRM_NODE_PRIMARY;
else if (sscanf(name, "dri/control%d\n", &id) >= 1)
return DRM_NODE_CONTROL;
else if (sscanf(name, "dri/renderD%d\n", &id) >= 1)
return DRM_NODE_RENDER;
return -1;
@ -1084,19 +1078,20 @@ static int drmGetMinorType(int major, int minor)
minor = id;
#endif
int type = minor >> 6;
char path[DRM_NODE_NAME_MAX];
const char *dev_name;
int i;
if (minor < 0)
return -1;
switch (type) {
case DRM_NODE_PRIMARY:
case DRM_NODE_CONTROL:
case DRM_NODE_RENDER:
return type;
default:
return -1;
for (i = DRM_NODE_PRIMARY; i < DRM_NODE_MAX; i++) {
dev_name = drmGetDeviceName(i);
if (!dev_name)
continue;
snprintf(path, sizeof(path), dev_name, DRM_DIR_NAME, minor);
if (!access(path, F_OK))
return i;
}
return -1;
}
static const char *drmGetMinorName(int type)
@ -1104,8 +1099,6 @@ static const char *drmGetMinorName(int type)
switch (type) {
case DRM_NODE_PRIMARY:
return DRM_PRIMARY_MINOR_NAME;
case DRM_NODE_CONTROL:
return DRM_CONTROL_MINOR_NAME;
case DRM_NODE_RENDER:
return DRM_RENDER_MINOR_NAME;
default:
@ -1292,7 +1285,7 @@ drm_public int drmOpen(const char *name, const char *busid)
*
* \param name driver name. Not referenced if bus ID is supplied.
* \param busid bus ID. Zero if not known.
* \param type the device node type to open, PRIMARY, CONTROL or RENDER
* \param type the device node type to open, PRIMARY or RENDER
*
* \return a file descriptor on success, or a negative value on error.
*
@ -1325,7 +1318,7 @@ drm_public int drmOpenWithType(const char *name, const char *busid, int type)
drm_public int drmOpenControl(int minor)
{
return drmOpenMinor(minor, 0, DRM_NODE_CONTROL);
return -EINVAL;
}
drm_public int drmOpenRender(int minor)
@ -3735,12 +3728,9 @@ static int get_sysctl_pci_bus_info(int maj, int min, drmPciBusInfoPtr info)
switch (type) {
case DRM_NODE_PRIMARY:
break;
case DRM_NODE_CONTROL:
id -= 64;
break;
case DRM_NODE_RENDER:
id -= 128;
break;
break;
}
if (id < 0)
return -EINVAL;
@ -3852,10 +3842,6 @@ drm_public int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b)
static int drmGetNodeType(const char *name)
{
if (strncmp(name, DRM_CONTROL_MINOR_NAME,
sizeof(DRM_CONTROL_MINOR_NAME ) - 1) == 0)
return DRM_NODE_CONTROL;
if (strncmp(name, DRM_RENDER_MINOR_NAME,
sizeof(DRM_RENDER_MINOR_NAME) - 1) == 0)
return DRM_NODE_RENDER;
@ -4684,6 +4670,23 @@ drm_public int drmGetDeviceFromDevId(dev_t find_rdev, uint32_t flags, drmDeviceP
return 0;
}
drm_public int drmGetNodeTypeFromDevId(dev_t devid)
{
int maj, min, node_type;
maj = major(devid);
min = minor(devid);
if (!drmNodeIsDRM(maj, min))
return -EINVAL;
node_type = drmGetMinorType(maj, min);
if (node_type == -1)
return -ENODEV;
return node_type;
}
/**
* Get information about the opened drm device
*
@ -5101,6 +5104,20 @@ drm_public int drmSyncobjTransfer(int fd,
return ret;
}
drm_public int drmSyncobjEventfd(int fd, uint32_t handle, uint64_t point, int ev_fd,
uint32_t flags)
{
struct drm_syncobj_eventfd args;
memclear(args);
args.handle = handle;
args.point = point;
args.fd = ev_fd;
args.flags = flags;
return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_EVENTFD, &args);
}
static char *
drmGetFormatModifierFromSimpleTokens(uint64_t modifier)
{