| #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<<7 |
| |
| typedef 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 |