via_drv.h revision a0a6dd0b221260be1e3da725e6b49797e5fa7429
122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie/* 222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. 322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. 422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * 522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * Permission is hereby granted, free of charge, to any person obtaining a 622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * copy of this software and associated documentation files (the "Software"), 722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * to deal in the Software without restriction, including without limitation 822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * the rights to use, copy, modify, merge, publish, distribute, sub license, 922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * and/or sell copies of the Software, and to permit persons to whom the 1022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * Software is furnished to do so, subject to the following conditions: 1122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * 1222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * The above copyright notice and this permission notice (including the 1322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * next paragraph) shall be included in all copies or substantial portions 1422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * of the Software. 1522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * 1622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 1922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 2022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 2122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie * DEALINGS IN THE SOFTWARE. 2322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie */ 2422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#ifndef _VIA_DRV_H_ 2522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define _VIA_DRV_H_ 2622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 27ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom#include "drm_sman.h" 28925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie#define DRIVER_AUTHOR "Various" 2922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 3022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define DRIVER_NAME "via" 3122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define DRIVER_DESC "VIA Unichrome / Pro" 32a0a6dd0b221260be1e3da725e6b49797e5fa7429Thomas Hellstrom#define DRIVER_DATE "20070202" 3322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 3422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define DRIVER_MAJOR 2 359b8d9d0e0181286c0608e6426da1eac45463ecd2Thomas Hellstrom#define DRIVER_MINOR 11 36a0a6dd0b221260be1e3da725e6b49797e5fa7429Thomas Hellstrom#define DRIVER_PATCHLEVEL 1 3722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 3822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#include "via_verifier.h" 3922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 40925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie#include "via_dmablit.h" 41925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie 4222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_PCI_BUF_SIZE 60000 4322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_FIRE_BUF_SIZE 1024 44925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie#define VIA_NUM_IRQS 4 4522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 4622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlietypedef struct drm_via_ring_buffer { 47925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie drm_local_map_t map; 4822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie char *virtual_start; 4922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie} drm_via_ring_buffer_t; 5022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 5122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlietypedef uint32_t maskarray_t[5]; 5222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 5322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlietypedef struct drm_via_irq { 5422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie atomic_t irq_received; 5522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie uint32_t pending_mask; 5622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie uint32_t enable_mask; 5722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie wait_queue_head_t irq_queue; 5822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie} drm_via_irq_t; 59b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlie 6022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlietypedef struct drm_via_private { 6122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie drm_via_sarea_t *sarea_priv; 62925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie drm_local_map_t *sarea; 63925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie drm_local_map_t *fb; 64925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie drm_local_map_t *mmio; 6522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie unsigned long agpAddr; 6622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie wait_queue_head_t decoder_queue[VIA_NR_XVMC_LOCKS]; 6722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie char *dma_ptr; 6822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie unsigned int dma_low; 6922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie unsigned int dma_high; 7022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie unsigned int dma_offset; 7122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie uint32_t dma_wrap; 7222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie volatile uint32_t *last_pause_ptr; 7322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie volatile uint32_t *hw_addr_ptr; 7422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie drm_via_ring_buffer_t ring; 75b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlie struct timeval last_vblank; 76b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlie int last_vblank_valid; 77b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlie unsigned usec_per_vblank; 7822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie drm_via_state_t hc_state; 7922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie char pci_buf[VIA_PCI_BUF_SIZE]; 8022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie const uint32_t *fire_offsets[VIA_FIRE_BUF_SIZE]; 8122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie uint32_t num_fire_offsets; 82689692e73ea4b95c9fa5d5913eade33147db2e5aThomas Hellstrom int chipset; 8322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie drm_via_irq_t via_irqs[VIA_NUM_IRQS]; 8422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie unsigned num_irqs; 8522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie maskarray_t *irq_masks; 86b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlie uint32_t irq_enable_mask; 87b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlie uint32_t irq_pending_mask; 88925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie int *irq_map; 89ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom unsigned int idle_fault; 90ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom drm_sman_t sman; 91ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom int vram_initialized; 92ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom int agp_initialized; 93ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom unsigned long vram_offset; 94ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom unsigned long agp_offset; 95925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie drm_via_blitq_t blit_queues[VIA_NUM_BLIT_ENGINES]; 96a0a6dd0b221260be1e3da725e6b49797e5fa7429Thomas Hellstrom uint32_t dma_diff; 9722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie} drm_via_private_t; 9822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 99925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieenum via_family { 100689692e73ea4b95c9fa5d5913eade33147db2e5aThomas Hellstrom VIA_OTHER = 0, /* Baseline */ 101689692e73ea4b95c9fa5d5913eade33147db2e5aThomas Hellstrom VIA_PRO_GROUP_A, /* Another video engine and DMA commands */ 102689692e73ea4b95c9fa5d5913eade33147db2e5aThomas Hellstrom VIA_DX9_0 /* Same video as pro_group_a, but 3D is unsupported */ 103925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie}; 104925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie 10522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie/* VIA MMIO register access */ 10622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_BASE ((dev_priv->mmio)) 10722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 10822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_READ(reg) DRM_READ32(VIA_BASE, reg) 10922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_WRITE(reg,val) DRM_WRITE32(VIA_BASE, reg, val) 11022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_READ8(reg) DRM_READ8(VIA_BASE, reg) 11122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_WRITE8(reg,val) DRM_WRITE8(VIA_BASE, reg, val) 11222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 113925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern drm_ioctl_desc_t via_ioctls[]; 114925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_max_ioctl; 115925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie 116925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_fb_init(DRM_IOCTL_ARGS); 117925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_mem_alloc(DRM_IOCTL_ARGS); 118925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_mem_free(DRM_IOCTL_ARGS); 119925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_agp_init(DRM_IOCTL_ARGS); 120925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_map_init(DRM_IOCTL_ARGS); 121925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_decoder_futex(DRM_IOCTL_ARGS); 122925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_wait_irq(DRM_IOCTL_ARGS); 123925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_dma_blit_sync( DRM_IOCTL_ARGS ); 124925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_dma_blit( DRM_IOCTL_ARGS ); 125925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie 126925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_driver_load(drm_device_t *dev, unsigned long chipset); 127925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_driver_unload(drm_device_t *dev); 128925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie 12922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_init_context(drm_device_t * dev, int context); 13022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_final_context(drm_device_t * dev, int context); 13122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 13222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_do_cleanup_map(drm_device_t * dev); 13322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence); 13422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 13522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS); 13622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern void via_driver_irq_preinstall(drm_device_t * dev); 13722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern void via_driver_irq_postinstall(drm_device_t * dev); 13822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern void via_driver_irq_uninstall(drm_device_t * dev); 13922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 14022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_dma_cleanup(drm_device_t * dev); 14122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern void via_init_command_verifier(void); 14222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_driver_dma_quiescent(drm_device_t * dev); 143b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlieextern void via_init_futex(drm_via_private_t * dev_priv); 144b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlieextern void via_cleanup_futex(drm_via_private_t * dev_priv); 145b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlieextern void via_release_futex(drm_via_private_t * dev_priv, int context); 14622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 147ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstromextern void via_reclaim_buffers_locked(drm_device_t *dev, struct file *filp); 148ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstromextern void via_lastclose(drm_device_t *dev); 149ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom 150925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern void via_dmablit_handler(drm_device_t *dev, int engine, int from_irq); 151925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern void via_init_dmablit(drm_device_t *dev); 152b3a83639895a422b25f72eec0a5d1d88c3ac4e9eDave Airlie 15322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#endif 154