📄 intel.h
字号:
#ifndef _INTEL_H_#define _INTEL_H_#include "xf86drm.h" /* drm_handle_t, etc *//* Intel */#ifndef PCI_CHIP_I810#define PCI_CHIP_I810 0x7121#define PCI_CHIP_I810_DC100 0x7123#define PCI_CHIP_I810_E 0x7125#define PCI_CHIP_I815 0x1132#define PCI_CHIP_I810_BRIDGE 0x7120#define PCI_CHIP_I810_DC100_BRIDGE 0x7122#define PCI_CHIP_I810_E_BRIDGE 0x7124#define PCI_CHIP_I815_BRIDGE 0x1130#endif#define PCI_CHIP_845_G 0x2562#define PCI_CHIP_I830_M 0x3577#ifndef PCI_CHIP_I855_GM#define PCI_CHIP_I855_GM 0x3582#define PCI_CHIP_I855_GM_BRIDGE 0x3580#endif#ifndef PCI_CHIP_I865_G#define PCI_CHIP_I865_G 0x2572#define PCI_CHIP_I865_G_BRIDGE 0x2570#endif#ifndef PCI_CHIP_I915_G#define PCI_CHIP_I915_G 0x2582#define PCI_CHIP_I915_G_BRIDGE 0x2580#endif#ifndef PCI_CHIP_I915_GM#define PCI_CHIP_I915_GM 0x2592#define PCI_CHIP_I915_GM_BRIDGE 0x2590#endif#ifndef PCI_CHIP_E7221_G#define PCI_CHIP_E7221_G 0x258A/* Same as I915_G_BRIDGE */#define PCI_CHIP_E7221_G_BRIDGE 0x2580#endif#ifndef PCI_CHIP_I945_G#define PCI_CHIP_I945_G 0x2772#define PCI_CHIP_I945_G_BRIDGE 0x2770#endif#ifndef PCI_CHIP_I945_GM#define PCI_CHIP_I945_GM 0x27A2#define PCI_CHIP_I945_GM_BRIDGE 0x27A0#endif#define IS_I810(pI810) (pI810->Chipset == PCI_CHIP_I810 || \ pI810->Chipset == PCI_CHIP_I810_DC100 || \ pI810->Chipset == PCI_CHIP_I810_E)#define IS_I815(pI810) (pI810->Chipset == PCI_CHIP_I815)#define IS_I830(pI810) (pI810->Chipset == PCI_CHIP_I830_M)#define IS_845G(pI810) (pI810->Chipset == PCI_CHIP_845_G)#define IS_I85X(pI810) (pI810->Chipset == PCI_CHIP_I855_GM)#define IS_I852(pI810) (pI810->Chipset == PCI_CHIP_I855_GM && (pI810->variant == I852_GM || pI810->variant == I852_GME))#define IS_I855(pI810) (pI810->Chipset == PCI_CHIP_I855_GM && (pI810->variant == I855_GM || pI810->variant == I855_GME))#define IS_I865G(pI810) (pI810->Chipset == PCI_CHIP_I865_G)#define IS_I915G(pI810) (pI810->Chipset == PCI_CHIP_I915_G || pI810->Chipset == PCI_CHIP_E7221_G)#define IS_I915GM(pI810) (pI810->Chipset == PCI_CHIP_I915_GM)#define IS_I945G(pI810) (pI810->Chipset == PCI_CHIP_I945_G)#define IS_I945GM(pI810) (pI810->Chipset == PCI_CHIP_I945_GM)#define IS_I9XX(pI810) (IS_I915G(pI810) || IS_I915GM(pI810) || IS_I945G(pI810) || IS_I945GM(pI810))#define IS_MOBILE(pI810) (IS_I830(pI810) || IS_I85X(pI810) || IS_I915GM(pI810) || IS_I945GM(pI810))#define I830_GMCH_CTRL 0x52#define I830_GMCH_MEM_MASK 0x1#define I830_GMCH_MEM_64M 0x1#define I830_GMCH_MEM_128M 0#define I830_GMCH_GMS_MASK 0x70#define I830_GMCH_GMS_DISABLED 0x00#define I830_GMCH_GMS_LOCAL 0x10#define I830_GMCH_GMS_STOLEN_512 0x20#define I830_GMCH_GMS_STOLEN_1024 0x30#define I830_GMCH_GMS_STOLEN_8192 0x40#define I855_GMCH_GMS_MASK (0x7 << 4)#define I855_GMCH_GMS_DISABLED 0x00#define I855_GMCH_GMS_STOLEN_1M (0x1 << 4)#define I855_GMCH_GMS_STOLEN_4M (0x2 << 4)#define I855_GMCH_GMS_STOLEN_8M (0x3 << 4)#define I855_GMCH_GMS_STOLEN_16M (0x4 << 4)#define I855_GMCH_GMS_STOLEN_32M (0x5 << 4)#define I915G_GMCH_GMS_STOLEN_48M (0x6 << 4)#define I915G_GMCH_GMS_STOLEN_64M (0x7 << 4)typedef unsigned char Bool;#define TRUE 1#define FALSE 0#define PIPE_NONE 0<<0#define PIPE_CRT 1<<0#define PIPE_TV 1<<1#define PIPE_DFP 1<<2#define PIPE_LFP 1<<3#define PIPE_CRT2 1<<4#define PIPE_TV2 1<<5#define PIPE_DFP2 1<<6#define PIPE_LFP2 1<<7typedef struct _I830MemPool *I830MemPoolPtr;typedef struct _I830MemRange *I830MemRangePtr;typedef struct _I830MemRange { long Start; long End; long Size; unsigned long Physical; unsigned long Offset; /* Offset of AGP-allocated portion */ unsigned long Alignment; drm_handle_t Key; unsigned long Pitch; // add pitch I830MemPoolPtr Pool;} I830MemRange;typedef struct _I830MemPool { I830MemRange Total; I830MemRange Free; I830MemRange Fixed; I830MemRange Allocated;} I830MemPool;typedef struct { int tail_mask; I830MemRange mem; unsigned char *virtual_start; int head; int tail; int space;} I830RingBuffer;typedef struct _I830Rec { unsigned char *MMIOBase; unsigned char *FbBase; int cpp; uint32_t aper_size; unsigned int bios_version; /* These are set in PreInit and never changed. */ long FbMapSize; long TotalVideoRam; I830MemRange StolenMemory; /* pre-allocated memory */ long BIOSMemorySize; /* min stolen pool size */ int BIOSMemSizeLoc; /* These change according to what has been allocated. */ long FreeMemory; I830MemRange MemoryAperture; I830MemPool StolenPool; long allocatedMemory; /* Regions allocated either from the above pools, or from agpgart. */ /* for single and dual head configurations */ I830MemRange FrontBuffer; I830MemRange FrontBuffer2; I830MemRange Scratch; I830MemRange Scratch2; I830RingBuffer *LpRing; I830MemRange BackBuffer; I830MemRange DepthBuffer; I830MemRange TexMem; int TexGranularity; I830MemRange ContextMem; int drmMinor; Bool have3DWindows; Bool NeedRingBufferLow; Bool allowPageFlip; Bool disableTiling; int Chipset; unsigned long LinearAddr; unsigned long MMIOAddr; drmSize registerSize; /**< \brief MMIO register map size */ drm_handle_t registerHandle; /**< \brief MMIO register map handle */ // IOADDRESS ioBase; int irq; /**< \brief IRQ number */ int GttBound; drm_handle_t ring_map; unsigned int Fence[8];} I830Rec;/* * 12288 is set as the maximum, chosen because it is enough for * 1920x1440@32bpp with a 2048 pixel line pitch with some to spare. */#define I830_MAXIMUM_VBIOS_MEM 12288#define I830_DEFAULT_VIDEOMEM_2D (MB(32) / 1024)#define I830_DEFAULT_VIDEOMEM_3D (MB(64) / 1024)/* Flags for memory allocation function */#define FROM_ANYWHERE 0x00000000#define FROM_POOL_ONLY 0x00000001#define FROM_NEW_ONLY 0x00000002#define FROM_MASK 0x0000000f#define ALLOCATE_AT_TOP 0x00000010#define ALLOCATE_AT_BOTTOM 0x00000020#define FORCE_GAPS 0x00000040#define NEED_PHYSICAL_ADDR 0x00000100#define ALIGN_BOTH_ENDS 0x00000200#define FORCE_LOW 0x00000400#define ALLOC_NO_TILING 0x00001000#define ALLOC_INITIAL 0x00002000#define ALLOCATE_DRY_RUN 0x80000000/* Chipset registers for VIDEO BIOS memory RW access */#define _855_DRAM_RW_CONTROL 0x58#define _845_DRAM_RW_CONTROL 0x90#define DRAM_WRITE 0x33330000#define KB(x) ((x) * 1024)#define MB(x) ((x) * KB(1024))#define GTT_PAGE_SIZE KB(4)#define ROUND_TO(x, y) (((x) + (y) - 1) / (y) * (y))#define ROUND_DOWN_TO(x, y) ((x) / (y) * (y))#define ROUND_TO_PAGE(x) ROUND_TO((x), GTT_PAGE_SIZE)#define ROUND_TO_MB(x) ROUND_TO((x), MB(1))#define PRIMARY_RINGBUFFER_SIZE KB(128)/* Ring buffer registers, p277, overview p19 */#define LP_RING 0x2030#define HP_RING 0x2040#define RING_TAIL 0x00#define TAIL_ADDR 0x000FFFF8#define I830_TAIL_MASK 0x001FFFF8#define RING_HEAD 0x04#define HEAD_WRAP_COUNT 0xFFE00000#define HEAD_WRAP_ONE 0x00200000#define HEAD_ADDR 0x001FFFFC#define I830_HEAD_MASK 0x001FFFFC#define RING_START 0x08#define START_ADDR 0x03FFFFF8#define I830_RING_START_MASK 0xFFFFF000#define RING_LEN 0x0C#define RING_NR_PAGES 0x001FF000 #define I830_RING_NR_PAGES 0x001FF000#define RING_REPORT_MASK 0x00000006#define RING_REPORT_64K 0x00000002#define RING_REPORT_128K 0x00000004#define RING_NO_REPORT 0x00000000#define RING_VALID_MASK 0x00000001#define RING_VALID 0x00000001#define RING_INVALID 0x00000000/* Fence/Tiling ranges [0..7] */#define FENCE 0x2000#define FENCE_NR 8#define I915G_FENCE_START_MASK 0x0ff00000#define I830_FENCE_START_MASK 0x07f80000#define FENCE_START_MASK 0x03F80000#define FENCE_X_MAJOR 0x00000000#define FENCE_Y_MAJOR 0x00001000#define FENCE_SIZE_MASK 0x00000700#define FENCE_SIZE_512K 0x00000000#define FENCE_SIZE_1M 0x00000100#define FENCE_SIZE_2M 0x00000200#define FENCE_SIZE_4M 0x00000300#define FENCE_SIZE_8M 0x00000400#define FENCE_SIZE_16M 0x00000500#define FENCE_SIZE_32M 0x00000600#define FENCE_SIZE_64M 0x00000700#define I915G_FENCE_SIZE_1M 0x00000000#define I915G_FENCE_SIZE_2M 0x00000100#define I915G_FENCE_SIZE_4M 0x00000200#define I915G_FENCE_SIZE_8M 0x00000300#define I915G_FENCE_SIZE_16M 0x00000400#define I915G_FENCE_SIZE_32M 0x00000500#define I915G_FENCE_SIZE_64M 0x00000600#define I915G_FENCE_SIZE_128M 0x00000700#define FENCE_PITCH_1 0x00000000#define FENCE_PITCH_2 0x00000010#define FENCE_PITCH_4 0x00000020#define FENCE_PITCH_8 0x00000030#define FENCE_PITCH_16 0x00000040#define FENCE_PITCH_32 0x00000050#define FENCE_PITCH_64 0x00000060#define FENCE_VALID 0x00000001#include <mmio.h># define MMIO_IN8(base, offset) \ *(volatile unsigned char *)(((unsigned char*)(base)) + (offset))# define MMIO_IN32(base, offset) \ read_MMIO_LE32(base, offset)# define MMIO_OUT8(base, offset, val) \ *(volatile unsigned char *)(((unsigned char*)(base)) + (offset)) = (val)# define MMIO_OUT32(base, offset, val) \ *(volatile unsigned int *)(void *)(((unsigned char*)(base)) + (offset)) = CPU_TO_LE32(val) /* Memory mapped register access macros */#define INREG8(addr) MMIO_IN8(MMIO, addr)#define INREG(addr) MMIO_IN32(MMIO, addr)#define OUTREG8(addr, val) MMIO_OUT8(MMIO, addr, val)#define OUTREG(addr, val) MMIO_OUT32(MMIO, addr, val)#define DSPABASE 0x70184#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -