⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 savage_drv.h

📁 linux-2.6.15.6
💻 H
📖 第 1 页 / 共 2 页
字号:
/* 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 + -