1/* $NetBSD: vbox_ttm.c,v 1.2 2021/12/18 23:45:44 riastradh Exp $ */ 2 3// SPDX-License-Identifier: MIT 4/* 5 * Copyright (C) 2013-2017 Oracle Corporation 6 * This file is based on ast_ttm.c 7 * Copyright 2012 Red Hat Inc. 8 * Authors: Dave Airlie <airlied@redhat.com> 9 * Michael Thayer <michael.thayer@oracle.com> 10 */ 11#include <sys/cdefs.h> 12__KERNEL_RCSID(0, "$NetBSD: vbox_ttm.c,v 1.2 2021/12/18 23:45:44 riastradh Exp $"); 13 14#include <linux/pci.h> 15#include <drm/drm_file.h> 16#include "vbox_drv.h" 17 18int vbox_mm_init(struct vbox_private *vbox) 19{ 20 struct drm_vram_mm *vmm; 21 int ret; 22 struct drm_device *dev = &vbox->ddev; 23 24 vmm = drm_vram_helper_alloc_mm(dev, pci_resource_start(dev->pdev, 0), 25 vbox->available_vram_size); 26 if (IS_ERR(vmm)) { 27 ret = PTR_ERR(vmm); 28 DRM_ERROR("Error initializing VRAM MM; %d\n", ret); 29 return ret; 30 } 31 32#ifdef DRM_MTRR_WC 33 vbox->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 0), 34 pci_resource_len(dev->pdev, 0), 35 DRM_MTRR_WC); 36#else 37 vbox->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0), 38 pci_resource_len(dev->pdev, 0)); 39#endif 40 return 0; 41} 42 43void vbox_mm_fini(struct vbox_private *vbox) 44{ 45#ifdef DRM_MTRR_WC 46 drm_mtrr_del(vbox->fb_mtrr, 47 pci_resource_start(vbox->ddev.pdev, 0), 48 pci_resource_len(vbox->ddev.pdev, 0), DRM_MTRR_WC); 49#else 50 arch_phys_wc_del(vbox->fb_mtrr); 51#endif 52 drm_vram_helper_release_mm(&vbox->ddev); 53} 54