Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

get compile working on freebsd

  • Loading branch information...
commit 9b94ad5b9c196477c6ee69614073223ef5599a53 1 parent b7aaec4
@mlankhorst mlankhorst authored
View
3  pscnv/bsd_support.h
@@ -89,7 +89,8 @@ static inline u32 hweight32(u32 val)
return ret;
}
-#define WARN(arg1, args...) do { \
+#define WARN(x, arg1, args...) do { \
+ if (!(x)) break; \
printf("%s:%d/%s " arg1, \
__FILE__, __LINE__, __FUNCTION__, ##args); \
kdb_backtrace(); \
View
2  pscnv/nouveau_bios.c
@@ -3915,7 +3915,7 @@ run_digital_op_script(struct drm_device *dev, uint16_t scriptptr,
#ifdef __linux__
nv04_dfp_bind_head(dev, dcbent, head, dl);
#else
- WARN("NYI\n");
+ WARN(1, "NYI\n");
#endif
}
View
84 pscnv/nouveau_bsddrv.c
@@ -28,6 +28,7 @@
#include "nouveau_pm.h"
#include "pscnv_gem.h"
#include "pscnv_vm.h"
+#include "pscnv_chan.h"
#if 0
#include "nouveau_hw.h"
#include "nouveau_fb.h"
@@ -220,6 +221,89 @@ struct drm_ioctl_desc nouveau_ioctls[] = {
DRM_IOCTL_DEF(DRM_PSCNV_FIFO_INIT_IB, pscnv_ioctl_fifo_init_ib, DRM_UNLOCKED),
};
+static int
+pscnv_gem_pager_ctor(void *handle, vm_ooffset_t size, vm_prot_t prot,
+ vm_ooffset_t foff, struct ucred *cred, u_short *color)
+{
+ struct drm_gem_object *gem_obj = handle;
+ struct drm_device *dev = gem_obj->dev;
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ int ret = (0);
+ struct pscnv_bo *bo = gem_obj->driver_private;
+ if (bo->chan)
+ pscnv_chan_ref(bo->chan);
+ else if ((ret = dev_priv->vm->map_user(bo)) == 0)
+ drm_gem_object_reference(gem_obj);
+ *color = 0; /* ...? */
+ return (ret);
+}
+
+static int
+pscnv_gem_pager_fault(vm_object_t vm_obj, vm_ooffset_t offset, int prot,
+ vm_page_t *mres)
+{
+ struct drm_gem_object *gem_obj = vm_obj->handle;
+ struct pscnv_bo *bo = gem_obj->driver_private;
+ struct drm_device *dev = gem_obj->dev;
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ vm_page_t m = NULL;
+
+ if (bo->chan)
+ m = vm_phys_fictitious_to_vm_page(dev_priv->fb_phys +
+ nvc0_fifo_ctrl_offs(dev, bo->chan->cid));
+ else switch (bo->flags & PSCNV_GEM_MEMTYPE_MASK) {
+ case PSCNV_GEM_VRAM_SMALL:
+ case PSCNV_GEM_VRAM_LARGE:
+ m = vm_phys_fictitious_to_vm_page(dev_priv->fb_phys +
+ bo->map1->start + offset);
+ break;
+ case PSCNV_GEM_SYSRAM_SNOOP:
+ case PSCNV_GEM_SYSRAM_NOSNOOP:
+ m = PHYS_TO_VM_PAGE(vtophys(((void*)bo->pages[offset/PAGE_SIZE])));
+ break;
+ }
+ //write = (prot & VM_PROT_WRITE) != 0;
+
+ /*
+ * Remove the placeholder page inserted by vm_fault() from the
+ * object.
+ */
+ if (*mres != NULL) {
+ vm_page_lock(*mres);
+ vm_page_free(*mres);
+ vm_page_unlock(*mres);
+ *mres = NULL;
+ }
+ if (offset >= bo->size || !m)
+ return (VM_PAGER_ERROR);
+
+ *mres = m;
+ m->valid = VM_PAGE_BITS_ALL;
+ vm_page_lock(m);
+ vm_page_insert(m, vm_obj, OFF_TO_IDX(offset));
+ vm_page_unlock(m);
+ vm_page_busy(m);
+ return (VM_PAGER_OK);
+}
+
+static void
+pscnv_gem_pager_dtor(void *handle)
+{
+ struct drm_gem_object *gem_obj = handle;
+ struct pscnv_bo *bo = gem_obj->driver_private;
+
+ if (bo->chan)
+ pscnv_chan_unref(bo->chan);
+ else // TODO: Add refcounting to user mmaps in pscnv_bo
+ drm_gem_object_unreference_unlocked(gem_obj);
+}
+
+struct cdev_pager_ops i915_gem_pager_ops = {
+ .cdev_pg_fault = pscnv_gem_pager_fault,
+ .cdev_pg_ctor = pscnv_gem_pager_ctor,
+ .cdev_pg_dtor = pscnv_gem_pager_dtor
+};
+
static struct drm_driver_info driver = {
.driver_features =
DRIVER_USE_AGP | DRIVER_PCI_DMA | DRIVER_SG | DRIVER_USE_MTRR |
View
26 pscnv/nouveau_display.c
@@ -80,6 +80,7 @@ nouveau_framebuffer_init(struct drm_device *dev, struct nouveau_framebuffer *nou
return 0;
}
+
#ifdef PSCNV_KAPI_DRM_MODE_FB_CMD2
static struct drm_framebuffer *
nouveau_user_framebuffer_create(struct drm_device *dev,
@@ -117,11 +118,36 @@ nouveau_user_framebuffer_create(struct drm_device *dev,
return &nouveau_fb->base;
}
+#ifdef __linux__
+
const struct drm_mode_config_funcs nouveau_mode_config_funcs = {
.fb_create = nouveau_user_framebuffer_create,
.output_poll_changed = nouveau_fbcon_output_poll_changed,
};
+#else
+
+static int
+nouveau_user_framebuffer_create_bsd(struct drm_device *dev,
+ struct drm_file *filp, struct drm_mode_fb_cmd2 *mode_cmd,
+ struct drm_framebuffer **res)
+{
+ struct drm_framebuffer *ret = nouveau_user_framebuffer_create(dev, filp, mode_cmd);
+ if (IS_ERR(ret)) {
+ *res = NULL;
+ return PTR_ERR(ret);
+ }
+ *res = ret;
+ return 0;
+}
+
+const struct drm_mode_config_funcs nouveau_mode_config_funcs = {
+ .fb_create = nouveau_user_framebuffer_create_bsd,
+ .output_poll_changed = nouveau_fbcon_output_poll_changed,
+};
+
+#endif
+
struct nouveau_drm_prop_enum_list {
u8 gen_mask;
int type;
View
36 pscnv/nouveau_fbcon.c
@@ -52,6 +52,8 @@
#include "pscnv_vm.h"
#include "pscnv_kapi.h"
+#ifdef __linux__
+
static int
nouveau_fbcon_sync(struct fb_info *info)
{
@@ -143,6 +145,9 @@ static struct fb_ops nv50_fbcon_ops = {
.fb_setcmap = drm_fb_helper_setcmap,
};
#endif
+
+#endif // __linux__
+
static void nouveau_fbcon_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
u16 blue, int regno)
{
@@ -166,6 +171,7 @@ static void nouveau_fbcon_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
static void
nouveau_fbcon_zfill(struct drm_device *dev, struct nouveau_fbdev *nfbdev)
{
+#ifdef __linux__
struct fb_info *info = nfbdev->helper.fbdev;
struct fb_fillrect rect;
@@ -179,6 +185,9 @@ nouveau_fbcon_zfill(struct drm_device *dev, struct nouveau_fbdev *nfbdev)
rect.color = 0;
rect.rop = ROP_COPY;
info->fbops->fb_fillrect(info, &rect);
+#else
+ WARN(1, "Missing!\n");
+#endif
}
static int
@@ -187,7 +196,9 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
{
struct drm_device *dev = nfbdev->dev;
struct drm_nouveau_private *dev_priv = dev->dev_private;
+#ifdef __linux__
struct fb_info *info;
+#endif
struct drm_framebuffer *fb;
struct nouveau_framebuffer *nouveau_fb;
struct pscnv_bo *nvbo;
@@ -197,8 +208,6 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
#else
struct drm_mode_fb_cmd mode_cmd;
#endif
- struct pci_dev *pdev = dev->pdev;
- struct device *device = &pdev->dev;
int size, ret;
mode_cmd.width = sizes->surface_width;
@@ -238,9 +247,10 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
goto out;
}
+#ifdef __linux__
mutex_lock(&dev->struct_mutex);
- info = framebuffer_alloc(0, device);
+ info = framebuffer_alloc(0, &dev->pdev->dev);
if (!info) {
ret = -ENOMEM;
goto out_unref;
@@ -253,6 +263,9 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
}
info->par = nfbdev;
+#else
+ DRM_LOCK();
+#endif // __linux__
nouveau_framebuffer_init(dev, &nfbdev->nouveau_fb, &mode_cmd, nvbo);
@@ -261,6 +274,7 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
/* setup helper */
nfbdev->helper.fb = fb;
+#ifdef __linux__
nfbdev->helper.fbdev = info;
strcpy(info->fix.id, "nouveaufb");
@@ -307,6 +321,9 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
info->pixmap.scan_align = 1;
mutex_unlock(&dev->struct_mutex);
+#else // __linux__
+ DRM_UNLOCK();
+#endif
#if 0
if (dev_priv->channel && !nouveau_nofbaccel) {
switch (dev_priv->card_type) {
@@ -329,11 +346,15 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
nouveau_fb->base.height,
nvbo->start, nvbo->map1->start, nvbo);
+#ifdef __linux__
vga_switcheroo_client_fb_set(dev->pdev, info);
+#endif
return 0;
+#ifdef __linux__
out_unref:
mutex_unlock(&dev->struct_mutex);
+#endif
out:
return ret;
}
@@ -366,15 +387,16 @@ static int
nouveau_fbcon_destroy(struct drm_device *dev, struct nouveau_fbdev *nfbdev)
{
struct nouveau_framebuffer *nouveau_fb = &nfbdev->nouveau_fb;
- struct fb_info *info;
+#ifdef __linux__
if (nfbdev->helper.fbdev) {
- info = nfbdev->helper.fbdev;
+ struct fb_info *info = nfbdev->helper.fbdev;
unregister_framebuffer(info);
if (info->cmap.len)
fb_dealloc_cmap(&info->cmap);
framebuffer_release(info);
}
+#endif
if (nouveau_fb->nvbo) {
drm_gem_object_unreference_unlocked(nouveau_fb->nvbo->gem);
@@ -385,6 +407,7 @@ nouveau_fbcon_destroy(struct drm_device *dev, struct nouveau_fbdev *nfbdev)
return 0;
}
+#ifdef __linux__
void nouveau_fbcon_gpu_lockup(struct fb_info *info)
{
struct nouveau_fbdev *nfbdev = info->par;
@@ -393,6 +416,7 @@ void nouveau_fbcon_gpu_lockup(struct fb_info *info)
NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
info->flags |= FBINFO_HWACCEL_DISABLED;
}
+#endif
static struct drm_fb_helper_funcs nouveau_fbcon_helper_funcs = {
.gamma_set = nouveau_fbcon_gamma_set,
@@ -439,6 +463,7 @@ void nouveau_fbcon_fini(struct drm_device *dev)
dev_priv->nfbdev = NULL;
}
+#ifdef __linux__
void nouveau_fbcon_save_disable_accel(struct drm_device *dev)
{
struct drm_nouveau_private *dev_priv = dev->dev_private;
@@ -458,6 +483,7 @@ void nouveau_fbcon_set_suspend(struct drm_device *dev, int state)
struct drm_nouveau_private *dev_priv = dev->dev_private;
fb_set_suspend(dev_priv->nfbdev->helper.fbdev, state);
}
+#endif
void nouveau_fbcon_zfill_all(struct drm_device *dev)
{
View
2  pscnv/nouveau_hw.c
@@ -568,7 +568,7 @@ nouveau_hw_save_vga_fonts(struct drm_device *dev, bool save)
uint8_t misc, gr4, gr5, gr6, seq2, seq4;
bool graphicsmode;
unsigned plane;
- struct drm_local_map *iovram;
+ struct drm_local_map *iovram = NULL;
if (nv_two_heads(dev))
NVSetOwner(dev, 0);
View
21 pscnv/nouveau_state.c
@@ -23,13 +23,13 @@
* DEALINGS IN THE SOFTWARE.
*/
-#include <linux/swab.h>
-#include <linux/slab.h>
#include "nouveau_drv.h"
#include "drm.h"
#include "drm_sarea.h"
#include "drm_crtc_helper.h"
#ifdef __linux__
+#include <linux/swab.h>
+#include <linux/slab.h>
#include <linux/vgaarb.h>
#include <linux/vga_switcheroo.h>
#endif
@@ -229,6 +229,12 @@ nouveau_card_init(struct drm_device *dev)
nouveau_switcheroo_reprobe,
nouveau_switcheroo_can_switch);
#endif
+#else
+ ret = -vm_phys_fictitious_reg_range(dev_priv->fb_phys,
+ dev_priv->fb_phys + dev_priv->fb_size,
+ VM_MEMATTR_WRITE_COMBINING);
+ if (ret)
+ return ret;
#endif
dev_priv->init_state = NOUVEAU_CARD_INIT_FAILED;
@@ -441,6 +447,9 @@ nouveau_card_init(struct drm_device *dev)
out:
#ifdef __linux__
vga_client_register(dev->pdev, NULL, NULL, NULL);
+#else
+ vm_phys_fictitious_unreg_range(dev_priv->fb_phys,
+ dev_priv->fb_phys + dev_priv->fb_size);
#endif
return ret;
}
@@ -452,7 +461,7 @@ static void nouveau_card_takedown(struct drm_device *dev)
NV_DEBUG(dev, "prev state = %d\n", dev_priv->init_state);
- if (dev_priv->init_state != NOUVEAU_CARD_INIT_DOWN) {
+ if (dev_priv->init_state == NOUVEAU_CARD_INIT_DONE) {
NV_INFO(dev, "Stopping card...\n");
nouveau_backlight_exit(dev);
drm_irq_uninstall(dev);
@@ -472,6 +481,8 @@ static void nouveau_card_takedown(struct drm_device *dev)
#ifdef __linux__
vga_client_register(dev->pdev, NULL, NULL, NULL);
+#else
+ vm_phys_fictitious_unreg_range(dev_priv->fb_phys, dev_priv->fb_phys + dev_priv->fb_size);
#endif
dev_priv->init_state = NOUVEAU_CARD_INIT_DOWN;
NV_INFO(dev, "Card stopped.\n");
@@ -517,6 +528,7 @@ static void nouveau_OF_copy_vbios_to_ramin(struct drm_device *dev)
#endif
}
+#ifdef __linux__
static struct apertures_struct *nouveau_get_apertures(struct drm_device *dev)
{
struct pci_dev *pdev = dev->pdev;
@@ -542,9 +554,11 @@ static struct apertures_struct *nouveau_get_apertures(struct drm_device *dev)
return aper;
}
+#endif
static int nouveau_remove_conflicting_drivers(struct drm_device *dev)
{
+#ifdef __linux__
struct drm_nouveau_private *dev_priv = dev->dev_private;
bool primary = false;
dev_priv->apertures = nouveau_get_apertures(dev);
@@ -556,6 +570,7 @@ static int nouveau_remove_conflicting_drivers(struct drm_device *dev)
#endif
remove_conflicting_framebuffers(dev_priv->apertures, "nouveaufb", primary);
+#endif
return 0;
}
View
5 pscnv/nvc0_pm.c
@@ -705,11 +705,11 @@ mclk_clock_set(struct nouveau_mem_exec_func *exec)
{
struct nvc0_pm_state *info = exec->priv;
struct drm_device *dev = exec->dev;
- u32 ctrl = nv_rd32(dev, 0x132000);
u32 pll = info->mem.coef;
+#if 0
+ u32 ctrl = nv_rd32(dev, 0x132000);
nv_wr32(dev, 0x137360, 0x00000001);
-#if 0
nv_wr32(dev, 0x137370, 0x00000000);
nv_wr32(dev, 0x137380, 0x00000000);
if (ctrl & 0x00000001)
@@ -727,6 +727,7 @@ mclk_clock_set(struct nouveau_mem_exec_func *exec)
//up: 10f824: 0x7e77 -> 0x7fd4 (setting 0x100, altering low bits
//down: 10f824: 0x7fd4 -> 0x7e54 (old & 0x77) -> 7e77 (setting new bits)
+ nv_wr32(dev, 0x137360, 0x00000001);
fuc_wr32(info, 0x10f090, 0x61);
fuc_wr32(info, 0x10f090, 0xc000007f);
fuc_sleep(info, 1000);
View
7 pscnv/pscnv_chan.c
@@ -105,6 +105,7 @@ pscnv_chan_new (struct drm_device *dev, struct pscnv_vspace *vs, int fake) {
return 0;
}
+ res->bo->chan = res;
return res;
}
@@ -114,6 +115,8 @@ void pscnv_chan_ref_free(struct kref *ref) {
struct drm_nouveau_private *dev_priv = dev->dev_private;
NV_INFO(dev, "CHAN: Freeing channel %d\n", ch->cid);
+ if (ch->bo->gem)
+ drm_gem_object_unreference_unlocked(ch->bo->gem);
if (ch->cid >= 0) {
int i;
@@ -132,6 +135,8 @@ void pscnv_chan_ref_free(struct kref *ref) {
kfree(ch);
}
+#ifdef __linux__
+
static void pscnv_chan_vm_open(struct vm_area_struct *vma) {
struct pscnv_chan *ch = vma->vm_private_data;
pscnv_chan_ref(ch);
@@ -202,6 +207,8 @@ int pscnv_chan_mmap(struct file *filp, struct vm_area_struct *vma)
return -EINVAL;
}
+#endif
+
int pscnv_chan_handle_lookup(struct drm_device *dev, uint32_t handle) {
struct drm_nouveau_private *dev_priv = dev->dev_private;
unsigned long flags;
View
39 pscnv/pscnv_gem.c
@@ -35,34 +35,49 @@ void pscnv_gem_free_object (struct drm_gem_object *obj) {
#ifndef PSCNV_KAPI_DRM_GEM_OBJECT_HANDLE_COUNT
atomic_dec(&obj->handle_count);
#endif
- pscnv_mem_free(vo);
+ if (!vo->chan)
+ pscnv_mem_free(vo);
+ else
+ vo->gem = 0;
+ drm_gem_free_mmap_offset(obj);
drm_gem_object_release(obj);
kfree(obj);
}
-struct drm_gem_object *pscnv_gem_new(struct drm_device *dev, uint64_t size, uint32_t flags,
- uint32_t tile_flags, uint32_t cookie, uint32_t *user)
+struct drm_gem_object *pscnv_gem_wrap(struct drm_device *dev, struct pscnv_bo *vo)
{
- int i;
struct drm_gem_object *obj;
- struct pscnv_bo *vo;
-
- vo = pscnv_mem_alloc(dev, size, flags, tile_flags, cookie);
- if (!vo)
- return 0;
obj = drm_gem_object_alloc(dev, vo->size);
- if (!obj) {
- pscnv_mem_free(vo);
+ if (!obj)
+ return 0;
+#ifndef __linux__
+ if (drm_gem_create_mmap_offset(obj) != 0) {
+ drm_gem_object_handle_unreference_unlocked(obj);
return 0;
}
+#endif
+
#ifndef PSCNV_KAPI_DRM_GEM_OBJECT_HANDLE_COUNT
atomic_inc(&obj->handle_count);
#endif
obj->driver_private = vo;
vo->gem = obj;
+ return obj;
+}
- if (user)
+struct drm_gem_object *pscnv_gem_new(struct drm_device *dev, uint64_t size, uint32_t flags,
+ uint32_t tile_flags, uint32_t cookie, uint32_t *user)
+{
+ int i;
+ struct pscnv_bo *vo = pscnv_mem_alloc(dev, size, flags, tile_flags, cookie);
+ struct drm_gem_object *obj;
+ if (!vo)
+ return 0;
+
+ if (!(obj = pscnv_gem_wrap(dev, vo)))
+ pscnv_mem_free(vo);
+ else if (user)
for (i = 0; i < DRM_ARRAY_SIZE(vo->user); i++)
vo->user[i] = user[i];
else
View
2  pscnv/pscnv_gem.h
@@ -32,5 +32,7 @@ void pscnv_gem_free_object (struct drm_gem_object *);
struct drm_gem_object *pscnv_gem_new(struct drm_device *dev, uint64_t size,
uint32_t flags, uint32_t tile_flags, uint32_t cookie,
uint32_t *user);
+struct drm_gem_object *pscnv_gem_wrap(struct drm_device *dev,
+ struct pscnv_bo *vo);
#endif
View
28 pscnv/pscnv_ioctl.c
@@ -124,8 +124,14 @@ int pscnv_ioctl_gem_new(struct drm_device *dev, void *data,
if (pscnv_gem_debug >= 1)
NV_INFO(dev, "GEM handle %x is VO %x/%d\n", info->handle, bo->cookie, bo->serial);
+#ifdef __linux__
info->map_handle = (uint64_t)info->handle << 32;
+#else
+ info->map_handle = DRM_GEM_MAPPING_OFF(obj->map_list.key) |
+ DRM_GEM_MAPPING_KEY;
+#endif
drm_gem_object_handle_unreference_unlocked (obj);
+
return ret;
}
@@ -149,7 +155,12 @@ int pscnv_ioctl_gem_info(struct drm_device *dev, void *data,
info->flags = bo->flags;
info->tile_flags = bo->tile_flags;
info->size = obj->size;
- info->map_handle = (uint64_t)info->handle << 32;
+#ifdef __linux__
+ info->map_handle = (uint64_t)info->handle | 32;
+#else
+ info->map_handle = DRM_GEM_MAPPING_OFF(obj->map_list.key) |
+ DRM_GEM_MAPPING_KEY;
+#endif
for (i = 0; i < DRM_ARRAY_SIZE(bo->user); i++)
info->user[i] = bo->user[i];
@@ -305,7 +316,9 @@ int pscnv_ioctl_chan_new(struct drm_device *dev, void *data,
struct drm_pscnv_chan_new *req = data;
struct pscnv_vspace *vs;
struct pscnv_chan *ch;
-
+#ifndef __linux__
+ struct drm_gem_object *obj;
+#endif
NOUVEAU_CHECK_INITIALISED_WITH_RETURN;
vs = pscnv_get_vspace(dev, file_priv, req->vid);
@@ -318,9 +331,18 @@ int pscnv_ioctl_chan_new(struct drm_device *dev, void *data,
return -ENOMEM;
}
pscnv_vspace_unref(vs);
+#ifndef __linux__
+ if (!(obj = pscnv_gem_wrap(dev, ch->bo))) {
+ pscnv_chan_unref(ch);
+ return -ENOMEM;
+ }
+ req->map_handle = DRM_GEM_MAPPING_OFF(obj->map_list.key) |
+ DRM_GEM_MAPPING_KEY;
+#else
+ req->map_handle = 0xc0000000 | ch->cid << 16;
+#endif
req->cid = ch->cid;
- req->map_handle = 0xc0000000 | ch->cid << 16;
ch->filp = file_priv;
View
2  pscnv/pscnv_mem.h
@@ -56,6 +56,8 @@ struct pscnv_bo {
/* SYSRaM only: list of pages */
struct page **pages;
dma_addr_t *dmapages;
+ /* CHAN only, pointer to a channel (FreeBSD doesn't allow overriding mmap) */
+ struct pscnv_chan *chan;
};
#define PSCNV_GEM_NOUSER 0x10
View
4 pscnv/pscnv_vm.c
@@ -182,6 +182,8 @@ pscnv_vspace_unmap(struct pscnv_vspace *vs, uint64_t start) {
return ret;
}
+#ifdef __linux__
+
static struct vm_operations_struct pscnv_vram_ops = {
.open = drm_gem_vm_open,
.close = drm_gem_vm_close,
@@ -250,3 +252,5 @@ int pscnv_mmap(struct file *filp, struct vm_area_struct *vma)
return -ENOSYS;
}
}
+
+#endif
Please sign in to comment.
Something went wrong with that request. Please try again.