Hi Marcin,
I have some minor comments inlined below.

Best regards,
Erik

> +static int
> +nouveau_bo_create(struct kms_driver *kms,
> +                const unsigned width, const unsigned height,
> +                const enum kms_bo_type type, const unsigned *attr,
> +                struct kms_bo **out)
> +{
> +       struct drm_nouveau_gem_new arg;
> +       unsigned size, pitch;
> +       struct nouveau_bo *bo;
> +       int i, ret;
> +
> +       for (i = 0; attr[i]; i += 2) {
> +               switch (attr[i]) {
> +               case KMS_WIDTH:
> +               case KMS_HEIGHT:
> +               case KMS_BO_TYPE:
> +                       break;
> +               default:
> +                       return -EINVAL;
> +               }
> +       }
> +
> +       bo = calloc(1, sizeof(*bo));
> +       if (!bo)
> +               return -ENOMEM;
> +
> +       if (type == KMS_BO_TYPE_CURSOR_64X64_ARGB) {
> +               pitch = 64 * 4;
> +               size = 64 * 64 * 4;
> +       } else if (type == KMS_BO_TYPE_SCANOUT) {
> +               pitch = width * 4;
> +               pitch = (pitch + 512 - 1) & ~(512 - 1);
What is 512 derived from?
Would a #define explain this better?



> +               size = pitch * height;
> +       } else {
> +               return -EINVAL;
> +       }
> +
> +       memset(&arg, 0, sizeof(arg));
> +       arg.info.size = size;
> +       arg.info.domain = NOUVEAU_GEM_DOMAIN_MAPPABLE | 
> NOUVEAU_GEM_DOMAIN_VRAM;
> +       arg.info.tile_mode = 0;
> +       arg.info.tile_flags = 0;
> +       arg.align = 512;
> +       arg.channel_hint = 0;
> +
> +       ret = drmCommandWriteRead(kms->fd, DRM_NOUVEAU_GEM_NEW, &arg, 
> sizeof(arg));
> +       if (ret)
> +               goto err_free;
> +
> +       bo->base.kms = kms;
> +       bo->base.handle = arg.info.handle;
> +       bo->base.size = size;
> +       bo->base.pitch = pitch;
> +       bo->map_handle = arg.info.map_handle;
> +
> +       *out = &bo->base;
> +
> +       return 0;
> +
> +err_free:
> +       free(bo);
> +       return ret;
> +}
> +
> +static int
> +nouveau_bo_get_prop(struct kms_bo *bo, unsigned key, unsigned *out)
> +{
> +       switch (key) {
> +       default:
> +               return -EINVAL;
> +       }
> +}
> +
> +static int
> +nouveau_bo_map(struct kms_bo *_bo, void **out)
> +{
> +       struct nouveau_bo *bo = (struct nouveau_bo *)_bo;
> +       void *map = NULL;
> +       int ret;
> +
ret is unused.

> +       if (bo->base.ptr) {
> +               bo->map_count++;
> +               *out = bo->base.ptr;
> +               return 0;
> +       }
> +
> +       map = mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, 
> bo->base.kms->fd, bo->map_handle);
> +       if (map == MAP_FAILED)
> +               return -errno;
> +
> +       bo->base.ptr = map;
> +       bo->map_count++;
> +       *out = bo->base.ptr;
> +
> +       return 0;
> +}
> +
> +static int
> +nouveau_bo_unmap(struct kms_bo *_bo)
> +{
> +       struct nouveau_bo *bo = (struct nouveau_bo *)_bo;
> +       bo->map_count--;
> +       return 0;
> +}
> +
> +static int
> +nouveau_bo_destroy(struct kms_bo *_bo)
> +{
> +       struct nouveau_bo *bo = (struct nouveau_bo *)_bo;
> +       struct drm_gem_close arg;
> +       int ret;
> +
> +       if (bo->base.ptr) {
> +               /* XXX Sanity check map_count */
> +               munmap(bo->base.ptr, bo->base.size);
> +               bo->base.ptr = NULL;
> +       }
> +
> +       memset(&arg, 0, sizeof(arg));
> +       arg.handle = bo->base.handle;
> +
> +       ret = drmIoctl(bo->base.kms->fd, DRM_IOCTL_GEM_CLOSE, &arg);
> +       if (ret)
> +               return -errno;
> +
> +       free(bo);
> +       return 0;
> +}
> +
> +int
> +nouveau_create(int fd, struct kms_driver **out)
> +{
> +       struct kms_driver *kms;
> +
> +       kms = calloc(1, sizeof(*kms));
> +       if (!kms)
> +               return -ENOMEM;
> +
> +       kms->fd = fd;
> +
> +       kms->bo_create = nouveau_bo_create;
> +       kms->bo_map = nouveau_bo_map;
> +       kms->bo_unmap = nouveau_bo_unmap;
> +       kms->bo_get_prop = nouveau_bo_get_prop;
> +       kms->bo_destroy = nouveau_bo_destroy;
> +//     kms->get_prop = nouveau_get_prop;
> +       kms->destroy = nouveau_destroy;
> +       *out = kms;
> +
> +       return 0;
> +}
> --
> 1.6.4.4
>
>
>
> ------------------------------------------------------------------------------
> Download Intel® Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling, find bugs
> proactively, and fine-tune applications for parallel performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev
> --
> _______________________________________________
> Dri-devel mailing list
> Dri-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/dri-devel
>
>

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to