📄 savage_drv.h
字号:
/* savage_drv.h -- Private header for the savage driver * * Copyright 2004 Felix Kuehling * 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, sub license, * 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 * NON-INFRINGEMENT. IN NO EVENT SHALL FELIX KUEHLING 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. */#ifndef __SAVAGE_DRV_H__#define __SAVAGE_DRV_H__#define DRIVER_AUTHOR "Felix Kuehling"#define DRIVER_NAME "savage"#define DRIVER_DESC "Savage3D/MX/IX, Savage4, SuperSavage, Twister, ProSavage[DDR]"#define DRIVER_DATE "20050313"#define DRIVER_MAJOR 2#define DRIVER_MINOR 4#define DRIVER_PATCHLEVEL 1/* Interface history: * * 1.x The DRM driver from the VIA/S3 code drop, basically a dummy * 2.0 The first real DRM * 2.1 Scissors registers managed by the DRM, 3D operations clipped by * cliprects of the cmdbuf ioctl * 2.2 Implemented SAVAGE_CMD_DMA_IDX and SAVAGE_CMD_VB_IDX * 2.3 Event counters used by BCI_EVENT_EMIT/WAIT ioctls are now 32 bits * wide and thus very long lived (unlikely to ever wrap). The size * in the struct was 32 bits before, but only 16 bits were used * 2.4 Implemented command DMA. Now drm_savage_init_t.cmd_dma_offset is * actually used */typedef struct drm_savage_age { uint16_t event; unsigned int wrap;} drm_savage_age_t;typedef struct drm_savage_buf_priv { struct drm_savage_buf_priv *next; struct drm_savage_buf_priv *prev; drm_savage_age_t age; drm_buf_t *buf;} drm_savage_buf_priv_t;typedef struct drm_savage_dma_page { drm_savage_age_t age; unsigned int used, flushed;} drm_savage_dma_page_t;#define SAVAGE_DMA_PAGE_SIZE 1024 /* in dwords *//* Fake DMA buffer size in bytes. 4 pages. Allows a maximum command * size of 16kbytes or 4k entries. Minimum requirement would be * 10kbytes for 255 40-byte vertices in one drawing command. */#define SAVAGE_FAKE_DMA_SIZE (SAVAGE_DMA_PAGE_SIZE*4*4)/* interesting bits of hardware state that are saved in dev_priv */typedef union { struct drm_savage_common_state { uint32_t vbaddr; } common; struct { unsigned char pad[sizeof(struct drm_savage_common_state)]; uint32_t texctrl, texaddr; uint32_t scstart, new_scstart; uint32_t scend, new_scend; } s3d; struct { unsigned char pad[sizeof(struct drm_savage_common_state)]; uint32_t texdescr, texaddr0, texaddr1; uint32_t drawctrl0, new_drawctrl0; uint32_t drawctrl1, new_drawctrl1; } s4;} drm_savage_state_t;/* these chip tags should match the ones in the 2D driver in savage_regs.h. */enum savage_family { S3_UNKNOWN = 0, S3_SAVAGE3D, S3_SAVAGE_MX, S3_SAVAGE4, S3_PROSAVAGE, S3_TWISTER, S3_PROSAVAGEDDR, S3_SUPERSAVAGE, S3_SAVAGE2000, S3_LAST};extern drm_ioctl_desc_t savage_ioctls[];extern int savage_max_ioctl;#define S3_SAVAGE3D_SERIES(chip) ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE_MX))#define S3_SAVAGE4_SERIES(chip) ((chip==S3_SAVAGE4) \ || (chip==S3_PROSAVAGE) \ || (chip==S3_TWISTER) \ || (chip==S3_PROSAVAGEDDR))#define S3_SAVAGE_MOBILE_SERIES(chip) ((chip==S3_SAVAGE_MX) || (chip==S3_SUPERSAVAGE))#define S3_SAVAGE_SERIES(chip) ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE2000))#define S3_MOBILE_TWISTER_SERIES(chip) ((chip==S3_TWISTER) \ ||(chip==S3_PROSAVAGEDDR))/* flags */#define SAVAGE_IS_AGP 1typedef struct drm_savage_private { drm_savage_sarea_t *sarea_priv; drm_savage_buf_priv_t head, tail; /* who am I? */ enum savage_family chipset; unsigned int cob_size; unsigned int bci_threshold_lo, bci_threshold_hi; unsigned int dma_type; /* frame buffer layout */ unsigned int fb_bpp; unsigned int front_offset, front_pitch; unsigned int back_offset, back_pitch; unsigned int depth_bpp; unsigned int depth_offset, depth_pitch; /* bitmap descriptors for swap and clear */ unsigned int front_bd, back_bd, depth_bd; /* local textures */ unsigned int texture_offset; unsigned int texture_size; /* memory regions in physical memory */ drm_local_map_t *sarea; drm_local_map_t *mmio; drm_local_map_t *fb; drm_local_map_t *aperture; drm_local_map_t *status; drm_local_map_t *agp_textures; drm_local_map_t *cmd_dma; drm_local_map_t fake_dma; struct { int handle; unsigned long base, size; } mtrr[3]; /* BCI and status-related stuff */ volatile uint32_t *status_ptr, *bci_ptr; uint32_t status_used_mask; uint16_t event_counter; unsigned int event_wrap; /* Savage4 command DMA */ drm_savage_dma_page_t *dma_pages; unsigned int nr_dma_pages, first_dma_page, current_dma_page; drm_savage_age_t last_dma_age; /* saved hw state for global/local check on S3D */ uint32_t hw_draw_ctrl, hw_zbuf_ctrl; /* and for scissors (global, so don't emit if not changed) */ uint32_t hw_scissors_start, hw_scissors_end; drm_savage_state_t state; /* after emitting a wait cmd Savage3D needs 63 nops before next DMA */ unsigned int waiting; /* config/hardware-dependent function pointers */ int (*wait_fifo) (struct drm_savage_private * dev_priv, unsigned int n); int (*wait_evnt) (struct drm_savage_private * dev_priv, uint16_t e); /* Err, there is a macro wait_event in include/linux/wait.h. * Avoid unwanted macro expansion. */ void (*emit_clip_rect) (struct drm_savage_private * dev_priv, drm_clip_rect_t * pbox); void (*dma_flush) (struct drm_savage_private * dev_priv);} drm_savage_private_t;/* ioctls */extern int savage_bci_cmdbuf(DRM_IOCTL_ARGS);extern int savage_bci_buffers(DRM_IOCTL_ARGS);/* BCI functions */extern uint16_t savage_bci_emit_event(drm_savage_private_t * dev_priv, unsigned int flags);extern void savage_freelist_put(drm_device_t * dev, drm_buf_t * buf);extern void savage_dma_reset(drm_savage_private_t * dev_priv);extern void savage_dma_wait(drm_savage_private_t * dev_priv, unsigned int page);extern uint32_t *savage_dma_alloc(drm_savage_private_t * dev_priv, unsigned int n);extern int savage_preinit(drm_device_t * dev, unsigned long chipset);extern int savage_postcleanup(drm_device_t * dev);extern int savage_do_cleanup_bci(drm_device_t * dev);extern void savage_reclaim_buffers(drm_device_t * dev, DRMFILE filp);/* state functions */extern void savage_emit_clip_rect_s3d(drm_savage_private_t * dev_priv, drm_clip_rect_t * pbox);extern void savage_emit_clip_rect_s4(drm_savage_private_t * dev_priv, drm_clip_rect_t * pbox);#define SAVAGE_FB_SIZE_S3 0x01000000 /* 16MB */#define SAVAGE_FB_SIZE_S4 0x02000000 /* 32MB */#define SAVAGE_MMIO_SIZE 0x00080000 /* 512kB */#define SAVAGE_APERTURE_OFFSET 0x02000000 /* 32MB */#define SAVAGE_APERTURE_SIZE 0x05000000 /* 5 tiled surfaces, 16MB each */#define SAVAGE_BCI_OFFSET 0x00010000 /* offset of the BCI region * inside the MMIO region */#define SAVAGE_BCI_FIFO_SIZE 32 /* number of entries in on-chip * BCI FIFO *//* * MMIO registers */#define SAVAGE_STATUS_WORD0 0x48C00#define SAVAGE_STATUS_WORD1 0x48C04#define SAVAGE_ALT_STATUS_WORD0 0x48C60#define SAVAGE_FIFO_USED_MASK_S3D 0x0001ffff#define SAVAGE_FIFO_USED_MASK_S4 0x001fffff/* Copied from savage_bci.h in the 2D driver with some renaming. *//* Bitmap descriptors */#define SAVAGE_BD_STRIDE_SHIFT 0#define SAVAGE_BD_BPP_SHIFT 16#define SAVAGE_BD_TILE_SHIFT 24#define SAVAGE_BD_BW_DISABLE (1<<28)/* common: */#define SAVAGE_BD_TILE_LINEAR 0/* savage4, MX, IX, 3D */#define SAVAGE_BD_TILE_16BPP 2#define SAVAGE_BD_TILE_32BPP 3/* twister, prosavage, DDR, supersavage, 2000 */#define SAVAGE_BD_TILE_DEST 1#define SAVAGE_BD_TILE_TEXTURE 2/* GBD - BCI enable *//* savage4, MX, IX, 3D */#define SAVAGE_GBD_BCI_ENABLE 8/* twister, prosavage, DDR, supersavage, 2000 */#define SAVAGE_GBD_BCI_ENABLE_TWISTER 0#define SAVAGE_GBD_BIG_ENDIAN 4#define SAVAGE_GBD_LITTLE_ENDIAN 0#define SAVAGE_GBD_64 1/* Global Bitmap Descriptor */#define SAVAGE_BCI_GLB_BD_LOW 0x8168#define SAVAGE_BCI_GLB_BD_HIGH 0x816C/* * BCI registers *//* Savage4/Twister/ProSavage 3D registers */#define SAVAGE_DRAWLOCALCTRL_S4 0x1e#define SAVAGE_TEXPALADDR_S4 0x1f#define SAVAGE_TEXCTRL0_S4 0x20#define SAVAGE_TEXCTRL1_S4 0x21#define SAVAGE_TEXADDR0_S4 0x22#define SAVAGE_TEXADDR1_S4 0x23#define SAVAGE_TEXBLEND0_S4 0x24#define SAVAGE_TEXBLEND1_S4 0x25#define SAVAGE_TEXXPRCLR_S4 0x26 /* never used */#define SAVAGE_TEXDESCR_S4 0x27#define SAVAGE_FOGTABLE_S4 0x28#define SAVAGE_FOGCTRL_S4 0x30#define SAVAGE_STENCILCTRL_S4 0x31#define SAVAGE_ZBUFCTRL_S4 0x32#define SAVAGE_ZBUFOFF_S4 0x33#define SAVAGE_DESTCTRL_S4 0x34#define SAVAGE_DRAWCTRL0_S4 0x35
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -