linux/drivers/gpu/drm/radeon/radeon_drv.c

/*
 * \file radeon_drv.c
 * ATI Radeon driver
 *
 * \author Gareth Hughes <[email protected]>
 */

/*
 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
 * All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */


#include <linux/compat.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/vga_switcheroo.h>
#include <linux/mmu_notifier.h>
#include <linux/pci.h>

#include <drm/drm_aperture.h>
#include <drm/drm_drv.h>
#include <drm/drm_file.h>
#include <drm/drm_gem.h>
#include <drm/drm_ioctl.h>
#include <drm/drm_pciids.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_vblank.h>
#include <drm/radeon_drm.h>

#include "radeon_drv.h"
#include "radeon.h"
#include "radeon_kms.h"
#include "radeon_ttm.h"
#include "radeon_device.h"
#include "radeon_prime.h"

/*
 * KMS wrapper.
 * - 2.0.0 - initial interface
 * - 2.1.0 - add square tiling interface
 * - 2.2.0 - add r6xx/r7xx const buffer support
 * - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs
 * - 2.4.0 - add crtc id query
 * - 2.5.0 - add get accel 2 to work around ddx breakage for evergreen
 * - 2.6.0 - add tiling config query (r6xx+), add initial HiZ support (r300->r500)
 *   2.7.0 - fixups for r600 2D tiling support. (no external ABI change), add eg dyn gpr regs
 *   2.8.0 - pageflip support, r500 US_FORMAT regs. r500 ARGB2101010 colorbuf, r300->r500 CMASK, clock crystal query
 *   2.9.0 - r600 tiling (s3tc,rgtc) working, SET_PREDICATION packet 3 on r600 + eg, backend query
 *   2.10.0 - fusion 2D tiling
 *   2.11.0 - backend map, initial compute support for the CS checker
 *   2.12.0 - RADEON_CS_KEEP_TILING_FLAGS
 *   2.13.0 - virtual memory support, streamout
 *   2.14.0 - add evergreen tiling informations
 *   2.15.0 - add max_pipes query
 *   2.16.0 - fix evergreen 2D tiled surface calculation
 *   2.17.0 - add STRMOUT_BASE_UPDATE for r7xx
 *   2.18.0 - r600-eg: allow "invalid" DB formats
 *   2.19.0 - r600-eg: MSAA textures
 *   2.20.0 - r600-si: RADEON_INFO_TIMESTAMP query
 *   2.21.0 - r600-r700: FMASK and CMASK
 *   2.22.0 - r600 only: RESOLVE_BOX allowed
 *   2.23.0 - allow STRMOUT_BASE_UPDATE on RS780 and RS880
 *   2.24.0 - eg only: allow MIP_ADDRESS=0 for MSAA textures
 *   2.25.0 - eg+: new info request for num SE and num SH
 *   2.26.0 - r600-eg: fix htile size computation
 *   2.27.0 - r600-SI: Add CS ioctl support for async DMA
 *   2.28.0 - r600-eg: Add MEM_WRITE packet support
 *   2.29.0 - R500 FP16 color clear registers
 *   2.30.0 - fix for FMASK texturing
 *   2.31.0 - Add fastfb support for rs690
 *   2.32.0 - new info request for rings working
 *   2.33.0 - Add SI tiling mode array query
 *   2.34.0 - Add CIK tiling mode array query
 *   2.35.0 - Add CIK macrotile mode array query
 *   2.36.0 - Fix CIK DCE tiling setup
 *   2.37.0 - allow GS ring setup on r6xx/r7xx
 *   2.38.0 - RADEON_GEM_OP (GET_INITIAL_DOMAIN, SET_INITIAL_DOMAIN),
 *            CIK: 1D and linear tiling modes contain valid PIPE_CONFIG
 *   2.39.0 - Add INFO query for number of active CUs
 *   2.40.0 - Add RADEON_GEM_GTT_WC/UC, flush HDP cache before submitting
 *            CS to GPU on >= r600
 *   2.41.0 - evergreen/cayman: Add SET_BASE/DRAW_INDIRECT command parsing support
 *   2.42.0 - Add VCE/VUI (Video Usability Information) support
 *   2.43.0 - RADEON_INFO_GPU_RESET_COUNTER
 *   2.44.0 - SET_APPEND_CNT packet3 support
 *   2.45.0 - Allow setting shader registers using DMA/COPY packet3 on SI
 *   2.46.0 - Add PFP_SYNC_ME support on evergreen
 *   2.47.0 - Add UVD_NO_OP register support
 *   2.48.0 - TA_CS_BC_BASE_ADDR allowed on SI
 *   2.49.0 - DRM_RADEON_GEM_INFO ioctl returns correct vram_size/visible values
 *   2.50.0 - Allows unaligned shader loads on CIK. (needed by OpenGL)
 */
#define KMS_DRIVER_MAJOR
#define KMS_DRIVER_MINOR
#define KMS_DRIVER_PATCHLEVEL

int radeon_no_wb;
int radeon_modeset =;
int radeon_dynclks =;
int radeon_r4xx_atom;
int radeon_agpmode =;
int radeon_vram_limit;
int radeon_gart_size =; /* auto */
int radeon_benchmarking;
int radeon_testing;
int radeon_connector_table;
int radeon_tv =;
int radeon_audio =;
int radeon_disp_priority;
int radeon_hw_i2c;
int radeon_pcie_gen2 =;
int radeon_msi =;
int radeon_lockup_timeout =;
int radeon_fastfb;
int radeon_dpm =;
int radeon_aspm =;
int radeon_runtime_pm =;
int radeon_hard_reset;
int radeon_vm_size =;
int radeon_vm_block_size =;
int radeon_deep_color;
int radeon_use_pflipirq =;
int radeon_bapm =;
int radeon_backlight =;
int radeon_auxch =;
int radeon_uvd =;
int radeon_vce =;

MODULE_PARM_DESC();
module_param_named(no_wb, radeon_no_wb, int, 0444);

MODULE_PARM_DESC();
module_param_named(modeset, radeon_modeset, int, 0400);

MODULE_PARM_DESC();
module_param_named(dynclks, radeon_dynclks, int, 0444);

MODULE_PARM_DESC();
module_param_named(r4xx_atom, radeon_r4xx_atom, int, 0444);

MODULE_PARM_DESC();
module_param_named(vramlimit, radeon_vram_limit, int, 0600);

MODULE_PARM_DESC();
module_param_named(agpmode, radeon_agpmode, int, 0444);

MODULE_PARM_DESC();
module_param_named(gartsize, radeon_gart_size, int, 0600);

MODULE_PARM_DESC();
module_param_named(benchmark, radeon_benchmarking, int, 0444);

MODULE_PARM_DESC();
module_param_named(test, radeon_testing, int, 0444);

MODULE_PARM_DESC();
module_param_named(connector_table, radeon_connector_table, int, 0444);

MODULE_PARM_DESC();
module_param_named(tv, radeon_tv, int, 0444);

MODULE_PARM_DESC();
module_param_named(audio, radeon_audio, int, 0444);

MODULE_PARM_DESC();
module_param_named(disp_priority, radeon_disp_priority, int, 0444);

MODULE_PARM_DESC();
module_param_named(hw_i2c, radeon_hw_i2c, int, 0444);

MODULE_PARM_DESC();
module_param_named(pcie_gen2, radeon_pcie_gen2, int, 0444);

MODULE_PARM_DESC();
module_param_named(msi, radeon_msi, int, 0444);

MODULE_PARM_DESC();
module_param_named(lockup_timeout, radeon_lockup_timeout, int, 0444);

MODULE_PARM_DESC();
module_param_named(fastfb, radeon_fastfb, int, 0444);

MODULE_PARM_DESC();
module_param_named(dpm, radeon_dpm, int, 0444);

MODULE_PARM_DESC();
module_param_named(aspm, radeon_aspm, int, 0444);

MODULE_PARM_DESC();
module_param_named(runpm, radeon_runtime_pm, int, 0444);

MODULE_PARM_DESC();
module_param_named(hard_reset, radeon_hard_reset, int, 0444);

MODULE_PARM_DESC();
module_param_named(vm_size, radeon_vm_size, int, 0444);

MODULE_PARM_DESC();
module_param_named(vm_block_size, radeon_vm_block_size, int, 0444);

MODULE_PARM_DESC();
module_param_named(deep_color, radeon_deep_color, int, 0444);

MODULE_PARM_DESC();
module_param_named(use_pflipirq, radeon_use_pflipirq, int, 0444);

MODULE_PARM_DESC();
module_param_named(bapm, radeon_bapm, int, 0444);

MODULE_PARM_DESC();
module_param_named(backlight, radeon_backlight, int, 0444);

MODULE_PARM_DESC();
module_param_named(auxch, radeon_auxch, int, 0444);

MODULE_PARM_DESC();
module_param_named(uvd, radeon_uvd, int, 0444);

MODULE_PARM_DESC();
module_param_named(vce, radeon_vce, int, 0444);

int radeon_si_support =;
MODULE_PARM_DESC();
module_param_named(si_support, radeon_si_support, int, 0444);

int radeon_cik_support =;
MODULE_PARM_DESC();
module_param_named(cik_support, radeon_cik_support, int, 0444);

static struct pci_device_id pciidlist[] =;

MODULE_DEVICE_TABLE(pci, pciidlist);

static const struct drm_driver kms_driver;

static int radeon_pci_probe(struct pci_dev *pdev,
			    const struct pci_device_id *ent)
{}

static void
radeon_pci_remove(struct pci_dev *pdev)
{}

static void
radeon_pci_shutdown(struct pci_dev *pdev)
{}

static int radeon_pmops_suspend(struct device *dev)
{}

static int radeon_pmops_resume(struct device *dev)
{}

static int radeon_pmops_freeze(struct device *dev)
{}

static int radeon_pmops_thaw(struct device *dev)
{}

static int radeon_pmops_runtime_suspend(struct device *dev)
{}

static int radeon_pmops_runtime_resume(struct device *dev)
{}

static int radeon_pmops_runtime_idle(struct device *dev)
{}

long radeon_drm_ioctl(struct file *filp,
		      unsigned int cmd, unsigned long arg)
{}

#ifdef CONFIG_COMPAT
static long radeon_kms_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{}
#endif

static const struct dev_pm_ops radeon_pm_ops =;

static const struct file_operations radeon_driver_kms_fops =;

static const struct drm_ioctl_desc radeon_ioctls_kms[] =;

static const struct drm_driver kms_driver =;

static struct pci_driver radeon_kms_pci_driver =;

static int __init radeon_module_init(void)
{}

static void __exit radeon_module_exit(void)
{}

module_init();
module_exit(radeon_module_exit);

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();