1/******************************************************************************
2/
3/	File:			VIP.h
4/
5/	Description:	ATI Radeon Video Input Port (VIP) interface.
6/
7/	Copyright 2001, Carlos Hasan
8/
9*******************************************************************************/
10
11#ifndef __VIP_PORT_H__
12#define __VIP_PORT_H__
13
14#include "Radeon.h"
15
16enum vip_port_device {
17	C_VIP_PORT_DEVICE_0 		= 0,
18	C_VIP_PORT_DEVICE_1 		= 1,
19	C_VIP_PORT_DEVICE_2 		= 2,
20	C_VIP_PORT_DEVICE_3 		= 3
21};
22
23enum vip_port_register {
24	C_VIP_VENDOR_DEVICE_ID		= 0x0000,
25		C_VIP_VENDOR_ID			= BITS(15:0),
26		C_VIP_DEVICE_ID			= BITS(31:16),
27
28	C_VIP_SUB_VENDOR_DEVICE_ID	= 0x0004,
29		C_VIP_SUB_VENDOR_ID		= BITS(15:0),
30		C_VIP_SUB_DEVICE_ID		= BITS(31:16),
31
32	C_VIP_COMMAND_STATUS		= 0x0008,
33		C_VIP_POWER_ST			= BITS(1:0),
34		C_VIP_XHOST_ON			= BITS(2:2),
35		C_VIP_P1_SUPPORT		= BITS(16:16),
36		C_VIP_P2_SUPPORT		= BITS(17:17),
37		C_VIP_HOST_CAP			= BITS(19:18),
38
39	C_VIP_REVISION_ID			= 0x000c,
40		C_VIP_REVISION_ID_MASK	= BITS(15:0)
41};
42
43class CVIPPort {
44public:
45	CVIPPort(CRadeon & radeon);
46
47	~CVIPPort();
48
49	status_t InitCheck() const;
50
51	CRadeon & Radeon();
52
53	int Register(int device, int address) {
54		return fRadeon.VIPRegister( device, address );
55	}
56
57	void SetRegister(int device, int address, int value) {
58		fRadeon.SetVIPRegister( device, address, value );
59	}
60
61	int ReadFifo(int device, uint32 address, uint32 count, uint8 *buffer) {
62		return fRadeon.VIPReadFifo( device, address, count, buffer );
63	}
64
65	int WriteFifo(int device, uint32 address, uint32 count, uint8 *buffer) {
66		return fRadeon.VIPWriteFifo( device, address, count, buffer );
67	}
68
69	int FindVIPDevice( uint32 device_id ) {
70		return fRadeon.FindVIPDevice( device_id );
71	}
72
73private:
74	CRadeon & fRadeon;
75};
76
77#endif
78