2 * Copyright 2013 Red Hat Inc.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
22 * Authors: Dave Airlie
27 #include "qxl_object.h"
29 /* dumb ioctls implementation */
31 int qxl_mode_dumb_create(struct drm_file
*file_priv
,
32 struct drm_device
*dev
,
33 struct drm_mode_create_dumb
*args
)
35 struct qxl_device
*qdev
= to_qxl(dev
);
39 struct qxl_surface surf
;
40 uint32_t pitch
, format
;
42 pitch
= args
->width
* ((args
->bpp
+ 1) / 8);
43 args
->size
= pitch
* args
->height
;
44 args
->size
= ALIGN(args
->size
, PAGE_SIZE
);
48 format
= SPICE_SURFACE_FMT_16_565
;
51 format
= SPICE_SURFACE_FMT_32_xRGB
;
57 surf
.width
= args
->width
;
58 surf
.height
= args
->height
;
61 r
= qxl_gem_object_create_with_handle(qdev
, file_priv
,
62 QXL_GEM_DOMAIN_SURFACE
,
63 args
->size
, &surf
, &qobj
,
69 args
->handle
= handle
;
73 int qxl_mode_dumb_mmap(struct drm_file
*file_priv
,
74 struct drm_device
*dev
,
75 uint32_t handle
, uint64_t *offset_p
)
77 struct drm_gem_object
*gobj
;
81 gobj
= drm_gem_object_lookup(file_priv
, handle
);
84 qobj
= gem_to_qxl_bo(gobj
);
85 *offset_p
= qxl_bo_mmap_offset(qobj
);
86 drm_gem_object_put(gobj
);