Пример #1
0
static int drm_tegra_wrap(struct drm_tegra **drmp, int fd, bool close)
{
	struct drm_tegra *drm;

	if (fd < 0 || !drmp)
		return -EINVAL;

	drm = calloc(1, sizeof(*drm));
	if (!drm)
		return -ENOMEM;

	drm->close = close;
	drm->fd = fd;

	drm_tegra_bo_cache_init(&drm->bo_cache, false);
	drm->handle_table = drmHashCreate();
	drm->name_table = drmHashCreate();
	DRMINITLISTHEAD(&drm->mmap_cache.list);

	if (!drm->handle_table || !drm->name_table)
		return -ENOMEM;

	drm_tegra_setup_debug(drm);

	*drmp = drm;

	return 0;
}
Пример #2
0
static struct fd_device * fd_device_new_impl(int fd)
{
	struct fd_device *dev;
	drmVersionPtr version;

	/* figure out if we are kgsl or msm drm driver: */
	version = drmGetVersion(fd);
	if (!version) {
		ERROR_MSG("cannot get version: %s", strerror(errno));
		return NULL;
	}

	if (!strcmp(version->name, "kgsl")) {
		DEBUG_MSG("kgsl DRM device");
		dev = kgsl_device_new(fd);
	} else if (!strcmp(version->name, "msm")) {
		DEBUG_MSG("msm DRM device");
		dev = msm_device_new(fd);
	} else {
		ERROR_MSG("unknown device: %s", version->name);
		dev = NULL;
	}

	if (!dev)
		return NULL;

	atomic_set(&dev->refcnt, 1);
	dev->fd = fd;
	dev->handle_table = drmHashCreate();
	dev->name_table = drmHashCreate();
	init_cache_buckets(dev);

	return dev;
}
Пример #3
0
struct etna_device * etna_device_new(int fd)
{
	struct etna_device *dev = calloc(sizeof(*dev), 1);

	if (!dev)
		return NULL;

	atomic_set(&dev->refcnt, 1);
	dev->fd = fd;
	dev->handle_table = drmHashCreate();
	dev->name_table = drmHashCreate();
	init_cache_buckets(dev);

	return dev;
}
Пример #4
0
void hash_create(struct locked_hash_table *table)
{
	pthread_rwlock_init(&table->lock, NULL);
	table->table = drmHashCreate();
	if (!table->table) {
		ERROR_MSG("failed to create hash table");
		exit(1);
	}
}
Пример #5
0
static struct omap_device * omap_device_new_impl(int fd)
{
	struct omap_device *dev = calloc(sizeof(*dev), 1);
	if (!dev)
		return NULL;
	dev->fd = fd;
	atomic_set(&dev->refcnt, 1);
	dev->handle_table = drmHashCreate();
	return dev;
}
Пример #6
0
struct fd_device * fd_device_new(int fd)
{
	struct fd_device *dev = NULL;
	int key = fd;

	pthread_mutex_lock(&table_lock);

	if (!dev_table)
		dev_table = drmHashCreate();

	if (drmHashLookup(dev_table, key, (void **)&dev)) {
		dev = fd_device_new_impl(fd);
		if (dev)
			drmHashInsert(dev_table, key, dev);
	} else {
		dev = fd_device_ref(dev);
	}

	pthread_mutex_unlock(&table_lock);

	return dev;
}
Пример #7
0
drm_public struct omap_device * omap_device_new(int fd)
{
	struct omap_device *dev = NULL;

	pthread_mutex_lock(&table_lock);

	if (!dev_table)
		dev_table = drmHashCreate();

	if (drmHashLookup(dev_table, fd, (void **)&dev)) {
		/* not found, create new device */
		dev = omap_device_new_impl(fd);
		drmHashInsert(dev_table, fd, dev);
	} else {
		/* found, just incr refcnt */
		dev = omap_device_ref(dev);
	}

	pthread_mutex_unlock(&table_lock);

	return dev;
}
Пример #8
0
int main(void)
{
    HashTablePtr  table;
    unsigned long i;
    int           ret = 0;

    printf("\n***** 256 consecutive integers ****\n");
    table = drmHashCreate();
    for (i = 0; i < 256; i++)
        drmHashInsert(table, i, (void *)(i << 16 | i));
    for (i = 0; i < 256; i++)
        ret |= check_table(table, i, (void *)(i << 16 | i));
    compute_dist(table);
    drmHashDestroy(table);

    printf("\n***** 1024 consecutive integers ****\n");
    table = drmHashCreate();
    for (i = 0; i < 1024; i++)
        drmHashInsert(table, i, (void *)(i << 16 | i));
    for (i = 0; i < 1024; i++)
        ret |= check_table(table, i, (void *)(i << 16 | i));
    compute_dist(table);
    drmHashDestroy(table);

    printf("\n***** 1024 consecutive page addresses (4k pages) ****\n");
    table = drmHashCreate();
    for (i = 0; i < 1024; i++)
        drmHashInsert(table, i*4096, (void *)(i << 16 | i));
    for (i = 0; i < 1024; i++)
        ret |= check_table(table, i*4096, (void *)(i << 16 | i));
    compute_dist(table);
    drmHashDestroy(table);

    printf("\n***** 1024 random integers ****\n");
    table = drmHashCreate();
    srandom(0xbeefbeef);
    for (i = 0; i < 1024; i++)
        drmHashInsert(table, random(), (void *)(i << 16 | i));
    srandom(0xbeefbeef);
    for (i = 0; i < 1024; i++)
        ret |= check_table(table, random(), (void *)(i << 16 | i));
    srandom(0xbeefbeef);
    for (i = 0; i < 1024; i++)
        ret |= check_table(table, random(), (void *)(i << 16 | i));
    compute_dist(table);
    drmHashDestroy(table);

    printf("\n***** 5000 random integers ****\n");
    table = drmHashCreate();
    srandom(0xbeefbeef);
    for (i = 0; i < 5000; i++)
        drmHashInsert(table, random(), (void *)(i << 16 | i));
    srandom(0xbeefbeef);
    for (i = 0; i < 5000; i++)
        ret |= check_table(table, random(), (void *)(i << 16 | i));
    srandom(0xbeefbeef);
    for (i = 0; i < 5000; i++)
        ret |= check_table(table, random(), (void *)(i << 16 | i));
    compute_dist(table);
    drmHashDestroy(table);

    return ret;
}