tegra: Extract common buffer object allocation code

All of the buffer object allocation functions use the same boilerplate
code. Move that code into a separate function that can be reused.

Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
main
Thierry Reding 2018-04-23 10:58:09 +02:00
parent bec2a28e98
commit e44e781603
1 changed files with 22 additions and 13 deletions

View File

@ -97,6 +97,26 @@ drm_public void drm_tegra_close(struct drm_tegra *drm)
free(drm); free(drm);
} }
static struct drm_tegra_bo *drm_tegra_bo_alloc(struct drm_tegra *drm,
uint32_t handle,
uint32_t flags,
uint32_t size)
{
struct drm_tegra_bo *bo;
bo = calloc(1, sizeof(*bo));
if (!bo)
return NULL;
atomic_set(&bo->ref, 1);
bo->handle = handle;
bo->flags = flags;
bo->size = size;
bo->drm = drm;
return bo;
}
drm_public int drm_public int
drm_tegra_bo_new(struct drm_tegra_bo **bop, struct drm_tegra *drm, drm_tegra_bo_new(struct drm_tegra_bo **bop, struct drm_tegra *drm,
uint32_t flags, uint32_t size) uint32_t flags, uint32_t size)
@ -108,15 +128,10 @@ drm_tegra_bo_new(struct drm_tegra_bo **bop, struct drm_tegra *drm,
if (!drm || size == 0 || !bop) if (!drm || size == 0 || !bop)
return -EINVAL; return -EINVAL;
bo = calloc(1, sizeof(*bo)); bo = drm_tegra_bo_alloc(drm, 0, flags, size);
if (!bo) if (!bo)
return -ENOMEM; return -ENOMEM;
atomic_set(&bo->ref, 1);
bo->flags = flags;
bo->size = size;
bo->drm = drm;
memset(&args, 0, sizeof(args)); memset(&args, 0, sizeof(args));
args.flags = flags; args.flags = flags;
args.size = size; args.size = size;
@ -145,16 +160,10 @@ drm_tegra_bo_wrap(struct drm_tegra_bo **bop, struct drm_tegra *drm,
if (!drm || !bop) if (!drm || !bop)
return -EINVAL; return -EINVAL;
bo = calloc(1, sizeof(*bo)); bo = drm_tegra_bo_alloc(drm, handle, flags, size);
if (!bo) if (!bo)
return -ENOMEM; return -ENOMEM;
atomic_set(&bo->ref, 1);
bo->handle = handle;
bo->flags = flags;
bo->size = size;
bo->drm = drm;
*bop = bo; *bop = bo;
return 0; return 0;