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

📄 hacking.ati

📁 君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图片解码,浏览,电子书,录音,想学ucos,识货的人就下吧 russblock fmradio explore set
💻 ATI
字号:
                       ATI chips hacking                       =================						Dedicated to ATI's hackers.Preface~~~~~~~This document will compare ATI chips only from point of DAC and video overlay.There are lots of difference from 3D point, dual-head support, tv-out supportand many other things but it's already perfectly different story.This document doesn't include information about ATI AIW (All In Wonder) chips.What are units on modern ATI chips:DAC   - (Digital to Analog Convertor) controls CRTC, LCD, DFP monitor's output	Consists from:		PLL  - (Programable line length) registers		CRTC - CRT controller		LCD/DFP scaler		surface controlDAC2  - controls CRTC, LCD, DFP monitor's output on second headTVDAC - controls Composite Video and Super Video output ports	Consists from:		TV_PLL		TV scaler & sync unit		TV format convertor (PAL/NTSC)TVCAP - controls Video-In portMPP   - Miscellaneous peripheral port. (includes macrovision's filter - copy	protection mechanism)OV    - Video overlay (YUV BES) (include subpictures, gamma correction and        adaptive deinterlacing)CAP0  - Video capturing CAP1  - Video capturing (second unit)RT    - Rage theatre: video encoding and mixingMUX   - video muxerMEM   - PCI/AGP bus mastering2D    - GUI engine3D    - 3D-OpenGL engine (There are lots of stuff)I2C   - I2C Bus controlThis document is mainly related only with OV unit ;)Video decoding diagram:RAM memory:   [ App ]    Copies YUV image to overlay memory                 |       <-- (It's possible to program DMA here)overlay memory:[ OV ]    performs scaling and YUVtoRGB convertion                /\RGB memory:   /    \            /  [ macrovision ]  performs copy protection filtering          /            \        (unneeded but presented by default thing;) [ CRTC/LCD/DFP DAC ] [ TV DAC ] convert RGB memory to CRTC and NTSC/PAL signals          |                | [CRTC/LCD/DFP Monitor] [TV-screen]History~~~~~~~  What is history of ATI's chips? I can be wrong but below is my visionof this question:0. I don't know any earlied chips :(1. Mach82. Mach163. Mach324. Mach64.	It's first chip which has support from side of open	source drivers. Set of mach64 chips is:		mach64GX (ATI888GX00)		mach64CX (ATI888CX00)		mach64CT (ATI264CT)		mach64ET (ATI264ET)		mach64VTA3 (ATI264VT)		mach64VTA4 (ATI264VT)		mach64VTB (ATI264VTB)		mach64VT4 (ATI264VT4)5. 3D rage chips.	It seems that these chips have fully compatible by GPU with Mach64	which is extended by 3D possibilities. Set of 3D rage chips is:		3D RAGE (GT)		3D RAGE II+ (GTB)		3D RAGE IIC (PCI)		3D RAGE IIC (AGP)		3D RAGE LT		3D RAGE LT-G		3D RAGE PRO (BGA, AGP)		3D RAGE PRO (BGA, AGP, 1x only)		3D RAGE PRO (BGA, PCI)		3D RAGE PRO (PQFP, PCI)		3D RAGE PRO (PQFP, PCI, limited 3D)		3D RAGE (XL)		3D RAGE LT PRO (AGP)		3D RAGE LT PRO (PCI)		3D RAGE Mobility (PCI)		3D RAGE Mobility (AGP)6. Rage128 chips.	These chips have perfectly new GPU which supports memory mapped IO	space for accelerating port access (It's main cause of incompatibility	with mach64). Set of Rage128 chips is:		Rage128 GL RE		Rage128 GL RF		Rage128 GL RG		Rage128 GL RH		Rage128 GL RI		Rage128 VR RK		Rage128 VR RL		Rage128 VR RM		Rage128 VR RN		Rage128 VR RO		Rage128 Mobility M3 LE		Rage128 Mobility M3 LF7. Rage128Pro chips.	These chips are successors of Rage128 ones.		Rage128Pro GL PA		Rage128Pro GL PB		Rage128Pro GL PC		Rage128Pro GL PD		Rage128Pro GL PE		Rage128Pro GL PF		Rage128Pro VR PG		Rage128Pro VR PH		Rage128Pro VR PI		Rage128Pro VR PJ		Rage128Pro VR PK		Rage128Pro VR PL		Rage128Pro VR PM		Rage128Pro VR PN		Rage128Pro VR PO		Rage128Pro VR PP		Rage128Pro VR PQ		Rage128Pro VR PR		Rage128Pro VR TR		Rage128Pro VR PS		Rage128Pro VR PT		Rage128Pro VR PU		Rage128Pro VR PV		Rage128Pro VR PW		Rage128Pro VR PX		Rage128Pro Ultra U1		Rage128Pro Ultra U2		Rage128Pro Ultra U38. Radeon chips.	Indeed they could be named Rage256 Pro. (With minor changes is fully	compatible with Rage128 chips).		Radeon QD		Radeon QE		Radeon QF		Radeon QG		Radeon VE QY		Radeon VE QZ		Radeon M6 LY		Radeon M6 LZ		Radeon M7 LW9. Radeon2 chips.	Indeed they could be named Rage512 Pro.		Radeon2 8500 QL		Radeon2 7500 QW10. Radeon3 and newest are cooming soon, but I hope that they will be fully    compatible with Radeon1 chips.In Radeon famility there were introduced also FX chips: Radeon FX andRadeon2 8700 FX. Probably they have the same possibility as other Radeonbut currently it's unknown for me.What about video overlay and DAC?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Currently it's known that there is only difference betweenMach64 and Rage128 compatible chips:- They have different logic of io ports programming!- They are incompatible by port numbers!But:- They use the same program logic from register's name point.(Indeed exists slight difference even between Radeon and Rage128chips. AFAIK only Radeon has OV0_SLICE_CNTL register which currentlyis not used by driver. But I know only its name ;). Also thereis difference in slight adjust of BES position but it's configuredby #ifdef blocks).Please compare:(The piece of Back-End Scaler programming) Sample for Mach64 compatible chips: ***********************************#define SPARSE_IO_BASE		0x03fcu#define SPARSE_IO_SELECT	0xfc00u#define BLOCK_IO_BASE		0xff00u#define BLOCK_IO_SELECT		0x00fcu#define MM_IO_SELECT		0x03fcu#define BLOCK_SELECT		0x0400u#define DWORD_SELECT		(BLOCK_SELECT | MM_IO_SELECT)#define IO_BYTE_SELECT		0x0003u#define SPARSE_IO_PORT		(SPARSE_IO_BASE | IO_BYTE_SELECT)#define BLOCK_IO_PORT		(BLOCK_IO_BASE | IO_BYTE_SELECT)#define IOPortTag(_SparseIOSelect, _BlockIOSelect)	\	(SetBits(_SparseIOSelect, SPARSE_IO_SELECT) |	\	 SetBits(_BlockIOSelect, BLOCK_SELECT | MM_IO_SELECT))#define SparseIOTag(_IOSelect)	IOPortTag(_IOSelect, 0)#define BlockIOTag(_IOSelect)	IOPortTag(0, _IOSelect)...#define OVERLAY_Y_X_START	BlockIOTag(0x100u)#define OVERLAY_Y_X_END		BlockIOTag(0x101u)...#define OUTREG(_Register, _Value)                              \    MMIO_OUT32(pATI->pBlock[GetBits(_Register, BLOCK_SELECT)], \               (_Register) & MM_IO_SELECT, _Value)...OUTREG(OVERLAY_Y_X_START,((drw_x)<<16)|(drw_y)|(1<<31));OUTREG(OVERLAY_Y_X_END,((drw_x+drw_w)<<16)|(drw_y+drw_h)); Sample for Rage128 compatible chips: ************************************#define OV0_Y_X_START                          0x0400#define OV0_Y_X_END                            0x0404  ...#define INREG(addr)		readl((rage_mmio_base)+addr)#define OUTREG(addr,val)	writel(val, (rage_mmio_base)+addr)...rage_mmio_base = ioremap_nocache(pci_resource_start (dev, 2),RAGE_REGSIZE);...#ifdef RADEON#define X_ADJUST 8#else /* rage128 */#define X_ADJUST 0#endifOUTREG(OV0_Y_X_START,(drw_x+X_ADJUST)|(drw_y<<16));OUTREG(OV0_Y_X_END,(drw_x+drw_w+X_ADJUST)|(drw_y+drw_h)<<16));Thus - these chips have almost the same logic from register's name point.(except the fact that they have swapped 16-bit halfs).Yes - programming of Rage128 is much simpler of Mach64.What about other ATI's chips?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~I suggest you have latest copy of GATOS-CVS:http://www.linuxvideo.orgGATOS was designed and introduced as General ATI TV and Overlay Sowfware.You will be able to find out there a lots of useful hacking utilities(at location gatos-ati/gatos):gfxdump - Program for dumping graphics chips registers on Linux and Windows 9X.	  (it's more useful for Win9x to hack their values).xatitv  - For working with tv-in (currently is under hard development)atitvout- For working with tv-outand lot of other stuff.BUT: After studing of Gatos and X11 stuffs I've found that they are badoptimized for movie playback.Please compare: radeon_vid - configures video overlay only once and provides DGA to it.	      (doesn't require to be MMX optimized) gatos and X11 - configures video overlay at every slice of frame, then              performs unoptimized copying of source stuff to video memory	      often with using CopyMungedData (it's C-analog of YV12_to_YUY2)	      since there are lacks in yv12 support.              (is not MMX optimized that's gladly accepted, but probably               will be never optimized due portability).hardware IDCT support diagram:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                      |[ Video parser ] <---------- [ Transport demuxing ] --> [ Audio ]       |                                |       |[ Variable length decoder]              |D      |       |                                |V      |[ Inverse quantization ]                |D      |       |                                |       |-------|---[ video card ]---------+     |s      |       |                          |     |u      |[ Run level decode & de-zigzag ]  |     |b      |       |                          |     |p      |[    IDCT   ]                     |     |i      |       |                          |     |c      |[  Motion compensation  ]         |     |t      |       |                          |     |u      |[ Advanced deinterlacing ]        |     |r      |       |                          |     |e      |[ Filtered X-Y scaling ] [SUBPIC]-|-----+s   [ OSD ]       |                     |    |     |       |[ 4-bit alpha blending ] <---+    |     +-------+       |                          |[ YUV to RGB conversion ]         |-------|--------------------------+TV-screen or CRT-displayConslusion:~~~~~~~~~~~That's all folk!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -