drmFree(ptr->values);
drmFree(ptr->enums);
+ drmFree(ptr->blob_ids);
drmFree(ptr);
}
if (found)
return 0;
#elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__)
- char kbusid[1024], sbusid[1024];
+ char sbusid[1024];
char oid[128];
- int domain, bus, dev, func;
int i, modesetting, ret;
size_t len;
- ret = sscanf(busid, "pci:%04x:%02x:%02x.%d", &domain, &bus, &dev,
- &func);
- if (ret != 4)
- return -EINVAL;
- snprintf(kbusid, sizeof(kbusid), "pci:%04x:%02x:%02x.%d", domain, bus,
- dev, func);
-
/* How many GPUs do we expect in the machine ? */
- for (i = 0; i < 16; i++) {
+ for (i = 0; i < 10; i++) {
snprintf(oid, sizeof(oid), "hw.dri.%d.busid", i);
len = sizeof(sbusid);
ret = sysctlbyname(oid, sbusid, &len, NULL, 0);
continue;
return -EINVAL;
}
- if (strcmp(sbusid, kbusid) != 0)
+ if (strcmp(sbusid, busid) != 0)
continue;
snprintf(oid, sizeof(oid), "hw.dri.%d.modesetting", i);
len = sizeof(modesetting);
return DRM_IOCTL(fd, DRM_IOCTL_MODE_SETGAMMA, &l);
}
+#ifdef TIZEN_USE_USER_HANDLER
+#include "libdrm_lists.h"
+#include <stdlib.h>
+
+struct drm_user_handler_data {
+ int fd;
+ drm_user_handler handler;
+ drmMMListHead link;
+};
+
+static drmMMListHead user_handler_list;
+static int user_handler_list_init = 0;
+
+drm_public int
+drmAddUserHandler(int fd, drm_user_handler handler)
+{
+ struct drm_user_handler_data *data = malloc(sizeof(struct drm_user_handler_data));
+
+ if (!data)
+ return -1;
+
+ data->fd = fd;
+ data->handler = handler;
+
+ if (!user_handler_list_init)
+ {
+ user_handler_list_init = 1;
+ DRMINITLISTHEAD(&user_handler_list);
+ }
+
+ DRMLISTADDTAIL(&data->link, &user_handler_list);
+
+ return 0;
+}
+
+drm_public void
+drmRemoveUserHandler(int fd, drm_user_handler handler)
+{
+ struct drm_user_handler_data *data;
+
+ if (!user_handler_list_init)
+ {
+ user_handler_list_init = 1;
+ DRMINITLISTHEAD(&user_handler_list);
+ }
+
+ DRMLISTFOREACHENTRY(data, &user_handler_list, link) {
+ if (data->fd == fd && data->handler == handler)
+ {
+ DRMLISTDEL(&data->link);
+ free(data);
+ return;
+ }
+ }
+}
+#endif
+
drm_public int drmHandleEvent(int fd, drmEventContextPtr evctx)
{
char buffer[1024];
seq->user_data);
break;
default:
+#ifdef TIZEN_USE_USER_HANDLER
+ {
+ struct drm_user_handler_data *data;
+ int ret = -1;
+ if (!user_handler_list_init)
+ break;
+ DRMLISTFOREACHENTRY(data, &user_handler_list, link) {
+ if (data->handler)
+ {
+ ret = data->handler(e);
+ if (ret == 0)
+ break;
+ }
+ }
+ }
+#endif
break;
}
i += e->length;