via_drv.h revision ce65a44de07f73ceda1749812b75086b7add408d
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" 32ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom#define DRIVER_DATE "20060529" 3322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 3422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define DRIVER_MAJOR 2 35ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom#define DRIVER_MINOR 10 36ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom#define DRIVER_PATCHLEVEL 0 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; 8222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie int pro_group_a; 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]; 9622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie} drm_via_private_t; 9722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 98925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieenum via_family { 99925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie VIA_OTHER = 0, 100925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie VIA_PRO_GROUP_A, 101925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie}; 102925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie 10322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie/* VIA MMIO register access */ 10422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_BASE ((dev_priv->mmio)) 10522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 10622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_READ(reg) DRM_READ32(VIA_BASE, reg) 10722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_WRITE(reg,val) DRM_WRITE32(VIA_BASE, reg, val) 10822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_READ8(reg) DRM_READ8(VIA_BASE, reg) 10922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#define VIA_WRITE8(reg,val) DRM_WRITE8(VIA_BASE, reg, val) 11022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 111925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern drm_ioctl_desc_t via_ioctls[]; 112925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_max_ioctl; 113925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie 114925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_fb_init(DRM_IOCTL_ARGS); 115925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_mem_alloc(DRM_IOCTL_ARGS); 116925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_mem_free(DRM_IOCTL_ARGS); 117925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_agp_init(DRM_IOCTL_ARGS); 118925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_map_init(DRM_IOCTL_ARGS); 119925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_decoder_futex(DRM_IOCTL_ARGS); 120925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_wait_irq(DRM_IOCTL_ARGS); 121925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_dma_blit_sync( DRM_IOCTL_ARGS ); 122925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_dma_blit( DRM_IOCTL_ARGS ); 123925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie 124925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_driver_load(drm_device_t *dev, unsigned long chipset); 125925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern int via_driver_unload(drm_device_t *dev); 126925142431bd653175b80ae153bd7a8bc13628bdeDave Airlie 12722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_init_context(drm_device_t * dev, int context); 12822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_final_context(drm_device_t * dev, int context); 12922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 13022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_do_cleanup_map(drm_device_t * dev); 13122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence); 13222f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 13322f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS); 13422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern void via_driver_irq_preinstall(drm_device_t * dev); 13522f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern void via_driver_irq_postinstall(drm_device_t * dev); 13622f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern void via_driver_irq_uninstall(drm_device_t * dev); 13722f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 13822f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_dma_cleanup(drm_device_t * dev); 13922f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern void via_init_command_verifier(void); 14022f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlieextern int via_driver_dma_quiescent(drm_device_t * dev); 141b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlieextern void via_init_futex(drm_via_private_t * dev_priv); 142b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlieextern void via_cleanup_futex(drm_via_private_t * dev_priv); 143b5e89ed53ed8d24f83ba1941c07382af00ed238eDave Airlieextern void via_release_futex(drm_via_private_t * dev_priv, int context); 14422f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie 145ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstromextern void via_reclaim_buffers_locked(drm_device_t *dev, struct file *filp); 146ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstromextern void via_lastclose(drm_device_t *dev); 147ce65a44de07f73ceda1749812b75086b7add408dThomas Hellstrom 148925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern void via_dmablit_handler(drm_device_t *dev, int engine, int from_irq); 149925142431bd653175b80ae153bd7a8bc13628bdeDave Airlieextern void via_init_dmablit(drm_device_t *dev); 150b3a83639895a422b25f72eec0a5d1d88c3ac4e9eDave Airlie 15122f579c621e2f264e6d093b07d75f99bc97d5df2Dave Airlie#endif 152