📄 radeon_drv.h
字号:
/* radeon_drv.h -- Private header for radeon driver -*- linux-c -*- * * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. * Copyright 2000 VA Linux Systems, Inc., Fremont, 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 * PRECISION INSIGHT 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. * * Authors: * Kevin E. Martin <martin@valinux.com> * Gareth Hughes <gareth@valinux.com> */#ifndef __RADEON_DRV_H__#define __RADEON_DRV_H__/* General customization: */#define DRIVER_AUTHOR "Gareth Hughes, Keith Whitwell, others."#define DRIVER_NAME "radeon"#define DRIVER_DESC "ATI Radeon"#define DRIVER_DATE "20050911"/* Interface history: * * 1.1 - ?? * 1.2 - Add vertex2 ioctl (keith) * - Add stencil capability to clear ioctl (gareth, keith) * - Increase MAX_TEXTURE_LEVELS (brian) * 1.3 - Add cmdbuf ioctl (keith) * - Add support for new radeon packets (keith) * - Add getparam ioctl (keith) * - Add flip-buffers ioctl, deprecate fullscreen foo (keith). * 1.4 - Add scratch registers to get_param ioctl. * 1.5 - Add r200 packets to cmdbuf ioctl * - Add r200 function to init ioctl * - Add 'scalar2' instruction to cmdbuf * 1.6 - Add static GART memory manager * Add irq handler (won't be turned on unless X server knows to) * Add irq ioctls and irq_active getparam. * Add wait command for cmdbuf ioctl * Add GART offset query for getparam * 1.7 - Add support for cube map registers: R200_PP_CUBIC_FACES_[0..5] * and R200_PP_CUBIC_OFFSET_F1_[0..5]. * Added packets R200_EMIT_PP_CUBIC_FACES_[0..5] and * R200_EMIT_PP_CUBIC_OFFSETS_[0..5]. (brian) * 1.8 - Remove need to call cleanup ioctls on last client exit (keith) * Add 'GET' queries for starting additional clients on different VT's. * 1.9 - Add DRM_IOCTL_RADEON_CP_RESUME ioctl. * Add texture rectangle support for r100. * 1.10- Add SETPARAM ioctl; first parameter to set is FB_LOCATION, which * clients use to tell the DRM where they think the framebuffer is * located in the card's address space * 1.11- Add packet R200_EMIT_RB3D_BLENDCOLOR to support GL_EXT_blend_color * and GL_EXT_blend_[func|equation]_separate on r200 * 1.12- Add R300 CP microcode support - this just loads the CP on r300 * (No 3D support yet - just microcode loading) * 1.13- Add packet R200_EMIT_TCL_POINT_SPRITE_CNTL for ARB_point_parameters * - Add hyperz support, add hyperz flags to clear ioctl. * 1.14- Add support for color tiling * - Add R100/R200 surface allocation/free support * 1.15- Add support for texture micro tiling * - Add support for r100 cube maps * 1.16- Add R200_EMIT_PP_TRI_PERF_CNTL packet to support brilinear * texture filtering on r200 * 1.17- Add initial support for R300 (3D). * 1.18- Add support for GL_ATI_fragment_shader, new packets * R200_EMIT_PP_AFS_0/1, R200_EMIT_PP_TXCTLALL_0-5 (replaces * R200_EMIT_PP_TXFILTER_0-5, 2 more regs) and R200_EMIT_ATF_TFACTOR * (replaces R200_EMIT_TFACTOR_0 (8 consts instead of 6) * 1.19- Add support for gart table in FB memory and PCIE r300 */#define DRIVER_MAJOR 1#define DRIVER_MINOR 19#define DRIVER_PATCHLEVEL 0#define GET_RING_HEAD(dev_priv) DRM_READ32( (dev_priv)->ring_rptr, 0 )#define SET_RING_HEAD(dev_priv,val) DRM_WRITE32( (dev_priv)->ring_rptr, 0, (val) )/* * Radeon chip families */enum radeon_family { CHIP_R100, CHIP_RS100, CHIP_RV100, CHIP_R200, CHIP_RV200, CHIP_RS200, CHIP_R250, CHIP_RS250, CHIP_RV250, CHIP_RV280, CHIP_R300, CHIP_RS300, CHIP_R350, CHIP_RV350, CHIP_R420, CHIP_LAST,};enum radeon_cp_microcode_version { UCODE_R100, UCODE_R200, UCODE_R300,};/* * Chip flags */enum radeon_chip_flags { CHIP_FAMILY_MASK = 0x0000ffffUL, CHIP_FLAGS_MASK = 0xffff0000UL, CHIP_IS_MOBILITY = 0x00010000UL, CHIP_IS_IGP = 0x00020000UL, CHIP_SINGLE_CRTC = 0x00040000UL, CHIP_IS_AGP = 0x00080000UL, CHIP_HAS_HIERZ = 0x00100000UL, CHIP_IS_PCIE = 0x00200000UL,};typedef struct drm_radeon_freelist { unsigned int age; drm_buf_t *buf; struct drm_radeon_freelist *next; struct drm_radeon_freelist *prev;} drm_radeon_freelist_t;typedef struct drm_radeon_ring_buffer { u32 *start; u32 *end; int size; int size_l2qw; u32 tail; u32 tail_mask; int space; int high_mark;} drm_radeon_ring_buffer_t;typedef struct drm_radeon_depth_clear_t { u32 rb3d_cntl; u32 rb3d_zstencilcntl; u32 se_cntl;} drm_radeon_depth_clear_t;struct drm_radeon_driver_file_fields { int64_t radeon_fb_delta;};struct mem_block { struct mem_block *next; struct mem_block *prev; int start; int size; DRMFILE filp; /* 0: free, -1: heap, other: real files */};struct radeon_surface { int refcount; u32 lower; u32 upper; u32 flags;};struct radeon_virt_surface { int surface_index; u32 lower; u32 upper; u32 flags; DRMFILE filp;};typedef struct drm_radeon_private { drm_radeon_ring_buffer_t ring; drm_radeon_sarea_t *sarea_priv; u32 fb_location; int gart_size; u32 gart_vm_start; unsigned long gart_buffers_offset; int cp_mode; int cp_running; drm_radeon_freelist_t *head; drm_radeon_freelist_t *tail; int last_buf; volatile u32 *scratch; int writeback_works; int usec_timeout; int microcode_version; struct { u32 boxes; int freelist_timeouts; int freelist_loops; int requested_bufs; int last_frame_reads; int last_clear_reads; int clears; int texture_uploads; } stats; int do_boxes; int page_flipping; int current_page; u32 color_fmt; unsigned int front_offset; unsigned int front_pitch; unsigned int back_offset; unsigned int back_pitch; u32 depth_fmt; unsigned int depth_offset; unsigned int depth_pitch; u32 front_pitch_offset; u32 back_pitch_offset; u32 depth_pitch_offset; drm_radeon_depth_clear_t depth_clear; unsigned long fb_offset; unsigned long mmio_offset; unsigned long ring_offset; unsigned long ring_rptr_offset; unsigned long buffers_offset; unsigned long gart_textures_offset; drm_local_map_t *sarea; drm_local_map_t *mmio; drm_local_map_t *cp_ring; drm_local_map_t *ring_rptr; drm_local_map_t *gart_textures; struct mem_block *gart_heap; struct mem_block *fb_heap; /* SW interrupt */ wait_queue_head_t swi_queue; atomic_t swi_emitted; struct radeon_surface surfaces[RADEON_MAX_SURFACES]; struct radeon_virt_surface virt_surfaces[2 * RADEON_MAX_SURFACES]; unsigned long pcigart_offset; drm_ati_pcigart_info gart_info; /* starting from here on, data is preserved accross an open */ uint32_t flags; /* see radeon_chip_flags */ int is_pci;} drm_radeon_private_t;typedef struct drm_radeon_buf_priv { u32 age;} drm_radeon_buf_priv_t;typedef struct drm_radeon_kcmd_buffer { int bufsz; char *buf; int nbox; drm_clip_rect_t __user *boxes;} drm_radeon_kcmd_buffer_t;extern int radeon_no_wb;extern drm_ioctl_desc_t radeon_ioctls[];extern int radeon_max_ioctl; /* radeon_cp.c */extern int radeon_cp_init(DRM_IOCTL_ARGS);extern int radeon_cp_start(DRM_IOCTL_ARGS);extern int radeon_cp_stop(DRM_IOCTL_ARGS);extern int radeon_cp_reset(DRM_IOCTL_ARGS);extern int radeon_cp_idle(DRM_IOCTL_ARGS);extern int radeon_cp_resume(DRM_IOCTL_ARGS);extern int radeon_engine_reset(DRM_IOCTL_ARGS);extern int radeon_fullscreen(DRM_IOCTL_ARGS);extern int radeon_cp_buffers(DRM_IOCTL_ARGS);extern void radeon_freelist_reset(drm_device_t * dev);extern drm_buf_t *radeon_freelist_get(drm_device_t * dev);extern int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n);extern int radeon_do_cp_idle(drm_radeon_private_t * dev_priv);extern int radeon_driver_preinit(struct drm_device *dev, unsigned long flags);extern int radeon_presetup(struct drm_device *dev);extern int radeon_driver_postcleanup(struct drm_device *dev);extern int radeon_mem_alloc(DRM_IOCTL_ARGS);extern int radeon_mem_free(DRM_IOCTL_ARGS);extern int radeon_mem_init_heap(DRM_IOCTL_ARGS);extern void radeon_mem_takedown(struct mem_block **heap);extern void radeon_mem_release(DRMFILE filp, struct mem_block *heap); /* radeon_irq.c */extern int radeon_irq_emit(DRM_IOCTL_ARGS);extern int radeon_irq_wait(DRM_IOCTL_ARGS);extern void radeon_do_release(drm_device_t * dev);extern int radeon_driver_vblank_wait(drm_device_t * dev, unsigned int *sequence);extern irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS);extern void radeon_driver_irq_preinstall(drm_device_t * dev);extern void radeon_driver_irq_postinstall(drm_device_t * dev);extern void radeon_driver_irq_uninstall(drm_device_t * dev);extern void radeon_driver_prerelease(drm_device_t * dev, DRMFILE filp);extern void radeon_driver_pretakedown(drm_device_t * dev);extern int radeon_driver_open_helper(drm_device_t * dev, drm_file_t * filp_priv);extern void radeon_driver_free_filp_priv(drm_device_t * dev, drm_file_t * filp_priv);extern int radeon_preinit(struct drm_device *dev, unsigned long flags);extern int radeon_postinit(struct drm_device *dev, unsigned long flags);extern int radeon_postcleanup(struct drm_device *dev);extern long radeon_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);/* r300_cmdbuf.c */extern void r300_init_reg_flags(void);extern int r300_do_cp_cmdbuf(drm_device_t * dev, DRMFILE filp, drm_file_t * filp_priv, drm_radeon_kcmd_buffer_t * cmdbuf);/* Flags for stats.boxes */#define RADEON_BOX_DMA_IDLE 0x1#define RADEON_BOX_RING_FULL 0x2#define RADEON_BOX_FLIP 0x4#define RADEON_BOX_WAIT_IDLE 0x8#define RADEON_BOX_TEXTURE_LOAD 0x10/* Register definitions, register access macros and drmAddMap constants * for Radeon kernel driver. */#define RADEON_AGP_COMMAND 0x0f60#define RADEON_AUX_SCISSOR_CNTL 0x26f0# define RADEON_EXCLUSIVE_SCISSOR_0 (1 << 24)# define RADEON_EXCLUSIVE_SCISSOR_1 (1 << 25)# define RADEON_EXCLUSIVE_SCISSOR_2 (1 << 26)# define RADEON_SCISSOR_0_ENABLE (1 << 28)# define RADEON_SCISSOR_1_ENABLE (1 << 29)# define RADEON_SCISSOR_2_ENABLE (1 << 30)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -