Subversion Repositories Kolibri OS

Rev

Rev 2007 | Rev 2997 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2007 Rev 2160
1
/*
1
/*
2
 * Copyright 2008 Advanced Micro Devices, Inc.
2
 * Copyright 2008 Advanced Micro Devices, Inc.
3
 * Copyright 2008 Red Hat Inc.
3
 * Copyright 2008 Red Hat Inc.
4
 * Copyright 2009 Jerome Glisse.
4
 * Copyright 2009 Jerome Glisse.
5
 *
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a
6
 * Permission is hereby granted, free of charge, to any person obtaining a
7
 * copy of this software and associated documentation files (the "Software"),
7
 * copy of this software and associated documentation files (the "Software"),
8
 * to deal in the Software without restriction, including without limitation
8
 * to deal in the Software without restriction, including without limitation
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
 * and/or sell copies of the Software, and to permit persons to whom the
10
 * and/or sell copies of the Software, and to permit persons to whom the
11
 * Software is furnished to do so, subject to the following conditions:
11
 * Software is furnished to do so, subject to the following conditions:
12
 *
12
 *
13
 * The above copyright notice and this permission notice shall be included in
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
14
 * all copies or substantial portions of the Software.
15
 *
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
 * OTHER DEALINGS IN THE SOFTWARE.
22
 * OTHER DEALINGS IN THE SOFTWARE.
23
 *
23
 *
24
 * Authors: Dave Airlie
24
 * Authors: Dave Airlie
25
 *          Alex Deucher
25
 *          Alex Deucher
26
 *          Jerome Glisse
26
 *          Jerome Glisse
27
 */
27
 */
28
 
28
 
29
//#include 
29
//#include 
30
#include 
30
#include 
31
#include 
31
#include 
32
#include 
32
#include 
33
//#include 
33
//#include 
34
//#include 
34
//#include 
35
#include "radeon_reg.h"
35
#include "radeon_reg.h"
36
#include "radeon.h"
36
#include "radeon.h"
37
#include "radeon_asic.h"
37
#include "radeon_asic.h"
38
#include "atom.h"
38
#include "atom.h"
39
 
39
 
40
/*
40
/*
41
 * Registers accessors functions.
41
 * Registers accessors functions.
42
 */
42
 */
43
static uint32_t radeon_invalid_rreg(struct radeon_device *rdev, uint32_t reg)
43
static uint32_t radeon_invalid_rreg(struct radeon_device *rdev, uint32_t reg)
44
{
44
{
45
	DRM_ERROR("Invalid callback to read register 0x%04X\n", reg);
45
	DRM_ERROR("Invalid callback to read register 0x%04X\n", reg);
46
	BUG_ON(1);
46
	BUG_ON(1);
47
	return 0;
47
	return 0;
48
}
48
}
49
 
49
 
50
static void radeon_invalid_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
50
static void radeon_invalid_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
51
{
51
{
52
	DRM_ERROR("Invalid callback to write register 0x%04X with 0x%08X\n",
52
	DRM_ERROR("Invalid callback to write register 0x%04X with 0x%08X\n",
53
		  reg, v);
53
		  reg, v);
54
	BUG_ON(1);
54
	BUG_ON(1);
55
}
55
}
56
 
56
 
57
static void radeon_register_accessor_init(struct radeon_device *rdev)
57
static void radeon_register_accessor_init(struct radeon_device *rdev)
58
{
58
{
59
	rdev->mc_rreg = &radeon_invalid_rreg;
59
	rdev->mc_rreg = &radeon_invalid_rreg;
60
	rdev->mc_wreg = &radeon_invalid_wreg;
60
	rdev->mc_wreg = &radeon_invalid_wreg;
61
	rdev->pll_rreg = &radeon_invalid_rreg;
61
	rdev->pll_rreg = &radeon_invalid_rreg;
62
	rdev->pll_wreg = &radeon_invalid_wreg;
62
	rdev->pll_wreg = &radeon_invalid_wreg;
63
	rdev->pciep_rreg = &radeon_invalid_rreg;
63
	rdev->pciep_rreg = &radeon_invalid_rreg;
64
	rdev->pciep_wreg = &radeon_invalid_wreg;
64
	rdev->pciep_wreg = &radeon_invalid_wreg;
65
 
65
 
66
	/* Don't change order as we are overridding accessor. */
66
	/* Don't change order as we are overridding accessor. */
67
	if (rdev->family < CHIP_RV515) {
67
	if (rdev->family < CHIP_RV515) {
68
		rdev->pcie_reg_mask = 0xff;
68
		rdev->pcie_reg_mask = 0xff;
69
	} else {
69
	} else {
70
		rdev->pcie_reg_mask = 0x7ff;
70
		rdev->pcie_reg_mask = 0x7ff;
71
	}
71
	}
72
	/* FIXME: not sure here */
72
	/* FIXME: not sure here */
73
	if (rdev->family <= CHIP_R580) {
73
	if (rdev->family <= CHIP_R580) {
74
		rdev->pll_rreg = &r100_pll_rreg;
74
		rdev->pll_rreg = &r100_pll_rreg;
75
		rdev->pll_wreg = &r100_pll_wreg;
75
		rdev->pll_wreg = &r100_pll_wreg;
76
	}
76
	}
77
	if (rdev->family >= CHIP_R420) {
77
	if (rdev->family >= CHIP_R420) {
78
		rdev->mc_rreg = &r420_mc_rreg;
78
		rdev->mc_rreg = &r420_mc_rreg;
79
		rdev->mc_wreg = &r420_mc_wreg;
79
		rdev->mc_wreg = &r420_mc_wreg;
80
	}
80
	}
81
	if (rdev->family >= CHIP_RV515) {
81
	if (rdev->family >= CHIP_RV515) {
82
		rdev->mc_rreg = &rv515_mc_rreg;
82
		rdev->mc_rreg = &rv515_mc_rreg;
83
		rdev->mc_wreg = &rv515_mc_wreg;
83
		rdev->mc_wreg = &rv515_mc_wreg;
84
	}
84
	}
85
	if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) {
85
	if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) {
86
		rdev->mc_rreg = &rs400_mc_rreg;
86
		rdev->mc_rreg = &rs400_mc_rreg;
87
		rdev->mc_wreg = &rs400_mc_wreg;
87
		rdev->mc_wreg = &rs400_mc_wreg;
88
	}
88
	}
89
	if (rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) {
89
	if (rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) {
90
		rdev->mc_rreg = &rs690_mc_rreg;
90
		rdev->mc_rreg = &rs690_mc_rreg;
91
		rdev->mc_wreg = &rs690_mc_wreg;
91
		rdev->mc_wreg = &rs690_mc_wreg;
92
	}
92
	}
93
	if (rdev->family == CHIP_RS600) {
93
	if (rdev->family == CHIP_RS600) {
94
		rdev->mc_rreg = &rs600_mc_rreg;
94
		rdev->mc_rreg = &rs600_mc_rreg;
95
		rdev->mc_wreg = &rs600_mc_wreg;
95
		rdev->mc_wreg = &rs600_mc_wreg;
96
	}
96
	}
97
	if (rdev->family >= CHIP_R600) {
97
	if (rdev->family >= CHIP_R600) {
98
		rdev->pciep_rreg = &r600_pciep_rreg;
98
		rdev->pciep_rreg = &r600_pciep_rreg;
99
		rdev->pciep_wreg = &r600_pciep_wreg;
99
		rdev->pciep_wreg = &r600_pciep_wreg;
100
	}
100
	}
101
}
101
}
102
 
102
 
103
 
103
 
104
/* helper to disable agp */
104
/* helper to disable agp */
105
void radeon_agp_disable(struct radeon_device *rdev)
105
void radeon_agp_disable(struct radeon_device *rdev)
106
{
106
{
107
	rdev->flags &= ~RADEON_IS_AGP;
107
	rdev->flags &= ~RADEON_IS_AGP;
108
	if (rdev->family >= CHIP_R600) {
108
	if (rdev->family >= CHIP_R600) {
109
		DRM_INFO("Forcing AGP to PCIE mode\n");
109
		DRM_INFO("Forcing AGP to PCIE mode\n");
110
		rdev->flags |= RADEON_IS_PCIE;
110
		rdev->flags |= RADEON_IS_PCIE;
111
	} else if (rdev->family >= CHIP_RV515 ||
111
	} else if (rdev->family >= CHIP_RV515 ||
112
			rdev->family == CHIP_RV380 ||
112
			rdev->family == CHIP_RV380 ||
113
			rdev->family == CHIP_RV410 ||
113
			rdev->family == CHIP_RV410 ||
114
			rdev->family == CHIP_R423) {
114
			rdev->family == CHIP_R423) {
115
		DRM_INFO("Forcing AGP to PCIE mode\n");
115
		DRM_INFO("Forcing AGP to PCIE mode\n");
116
		rdev->flags |= RADEON_IS_PCIE;
116
		rdev->flags |= RADEON_IS_PCIE;
117
		rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush;
117
		rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush;
118
		rdev->asic->gart_set_page = &rv370_pcie_gart_set_page;
118
		rdev->asic->gart_set_page = &rv370_pcie_gart_set_page;
119
	} else {
119
	} else {
120
		DRM_INFO("Forcing AGP to PCI mode\n");
120
		DRM_INFO("Forcing AGP to PCI mode\n");
121
		rdev->flags |= RADEON_IS_PCI;
121
		rdev->flags |= RADEON_IS_PCI;
122
		rdev->asic->gart_tlb_flush = &r100_pci_gart_tlb_flush;
122
		rdev->asic->gart_tlb_flush = &r100_pci_gart_tlb_flush;
123
		rdev->asic->gart_set_page = &r100_pci_gart_set_page;
123
		rdev->asic->gart_set_page = &r100_pci_gart_set_page;
124
	}
124
	}
125
	rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
125
	rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
126
}
126
}
127
 
127
 
128
/*
128
/*
129
 * ASIC
129
 * ASIC
130
 */
130
 */
131
static struct radeon_asic r100_asic = {
131
static struct radeon_asic r100_asic = {
132
	.init = &r100_init,
132
	.init = &r100_init,
133
//	.fini = &r100_fini,
133
//	.fini = &r100_fini,
134
//	.suspend = &r100_suspend,
134
//	.suspend = &r100_suspend,
135
//	.resume = &r100_resume,
135
//	.resume = &r100_resume,
136
//	.vga_set_state = &r100_vga_set_state,
136
//	.vga_set_state = &r100_vga_set_state,
137
	.gpu_is_lockup = &r100_gpu_is_lockup,
137
	.gpu_is_lockup = &r100_gpu_is_lockup,
138
	.asic_reset = &r100_asic_reset,
138
	.asic_reset = &r100_asic_reset,
139
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
139
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
140
	.gart_set_page = &r100_pci_gart_set_page,
140
	.gart_set_page = &r100_pci_gart_set_page,
141
	.cp_commit = &r100_cp_commit,
141
	.cp_commit = &r100_cp_commit,
142
	.ring_start = &r100_ring_start,
142
	.ring_start = &r100_ring_start,
143
	.ring_test = &r100_ring_test,
143
	.ring_test = &r100_ring_test,
144
	.ring_ib_execute = &r100_ring_ib_execute,
144
	.ring_ib_execute = &r100_ring_ib_execute,
145
	.irq_set = &r100_irq_set,
145
	.irq_set = &r100_irq_set,
146
	.irq_process = &r100_irq_process,
146
	.irq_process = &r100_irq_process,
147
//	.get_vblank_counter = &r100_get_vblank_counter,
147
//	.get_vblank_counter = &r100_get_vblank_counter,
148
	.fence_ring_emit = &r100_fence_ring_emit,
148
	.fence_ring_emit = &r100_fence_ring_emit,
149
//	.cs_parse = &r100_cs_parse,
149
//	.cs_parse = &r100_cs_parse,
150
	.copy_blit = &r100_copy_blit,
150
	.copy_blit = &r100_copy_blit,
151
	.copy_dma = NULL,
151
	.copy_dma = NULL,
152
	.copy = &r100_copy_blit,
152
	.copy = &r100_copy_blit,
153
	.get_engine_clock = &radeon_legacy_get_engine_clock,
153
	.get_engine_clock = &radeon_legacy_get_engine_clock,
154
	.set_engine_clock = &radeon_legacy_set_engine_clock,
154
	.set_engine_clock = &radeon_legacy_set_engine_clock,
155
	.get_memory_clock = &radeon_legacy_get_memory_clock,
155
	.get_memory_clock = &radeon_legacy_get_memory_clock,
156
	.set_memory_clock = NULL,
156
	.set_memory_clock = NULL,
157
	.get_pcie_lanes = NULL,
157
	.get_pcie_lanes = NULL,
158
	.set_pcie_lanes = NULL,
158
	.set_pcie_lanes = NULL,
159
	.set_clock_gating = &radeon_legacy_set_clock_gating,
159
	.set_clock_gating = &radeon_legacy_set_clock_gating,
160
	.set_surface_reg = r100_set_surface_reg,
160
	.set_surface_reg = r100_set_surface_reg,
161
	.clear_surface_reg = r100_clear_surface_reg,
161
	.clear_surface_reg = r100_clear_surface_reg,
162
	.bandwidth_update = &r100_bandwidth_update,
162
	.bandwidth_update = &r100_bandwidth_update,
163
	.hpd_init = &r100_hpd_init,
163
	.hpd_init = &r100_hpd_init,
164
	.hpd_fini = &r100_hpd_fini,
164
	.hpd_fini = &r100_hpd_fini,
165
	.hpd_sense = &r100_hpd_sense,
165
	.hpd_sense = &r100_hpd_sense,
166
	.hpd_set_polarity = &r100_hpd_set_polarity,
166
	.hpd_set_polarity = &r100_hpd_set_polarity,
167
	.ioctl_wait_idle = NULL,
167
	.ioctl_wait_idle = NULL,
168
	.gui_idle = &r100_gui_idle,
168
	.gui_idle = &r100_gui_idle,
169
};
169
};
170
 
170
 
171
static struct radeon_asic r200_asic = {
171
static struct radeon_asic r200_asic = {
172
	.init = &r100_init,
172
	.init = &r100_init,
173
//	.fini = &r100_fini,
173
//	.fini = &r100_fini,
174
//	.suspend = &r100_suspend,
174
//	.suspend = &r100_suspend,
175
//	.resume = &r100_resume,
175
//	.resume = &r100_resume,
176
//	.vga_set_state = &r100_vga_set_state,
176
//	.vga_set_state = &r100_vga_set_state,
177
	.gpu_is_lockup = &r100_gpu_is_lockup,
177
	.gpu_is_lockup = &r100_gpu_is_lockup,
178
	.asic_reset = &r100_asic_reset,
178
	.asic_reset = &r100_asic_reset,
179
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
179
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
180
	.gart_set_page = &r100_pci_gart_set_page,
180
	.gart_set_page = &r100_pci_gart_set_page,
181
	.cp_commit = &r100_cp_commit,
181
	.cp_commit = &r100_cp_commit,
182
	.ring_start = &r100_ring_start,
182
	.ring_start = &r100_ring_start,
183
	.ring_test = &r100_ring_test,
183
	.ring_test = &r100_ring_test,
184
	.ring_ib_execute = &r100_ring_ib_execute,
184
	.ring_ib_execute = &r100_ring_ib_execute,
185
	.irq_set = &r100_irq_set,
185
	.irq_set = &r100_irq_set,
186
	.irq_process = &r100_irq_process,
186
	.irq_process = &r100_irq_process,
187
//	.get_vblank_counter = &r100_get_vblank_counter,
187
//	.get_vblank_counter = &r100_get_vblank_counter,
188
	.fence_ring_emit = &r100_fence_ring_emit,
188
	.fence_ring_emit = &r100_fence_ring_emit,
189
//	.cs_parse = &r100_cs_parse,
189
//	.cs_parse = &r100_cs_parse,
190
	.copy_blit = &r100_copy_blit,
190
	.copy_blit = &r100_copy_blit,
191
	.copy_dma = &r200_copy_dma,
191
	.copy_dma = &r200_copy_dma,
192
	.copy = &r100_copy_blit,
192
	.copy = &r100_copy_blit,
193
	.get_engine_clock = &radeon_legacy_get_engine_clock,
193
	.get_engine_clock = &radeon_legacy_get_engine_clock,
194
	.set_engine_clock = &radeon_legacy_set_engine_clock,
194
	.set_engine_clock = &radeon_legacy_set_engine_clock,
195
	.get_memory_clock = &radeon_legacy_get_memory_clock,
195
	.get_memory_clock = &radeon_legacy_get_memory_clock,
196
	.set_memory_clock = NULL,
196
	.set_memory_clock = NULL,
197
	.set_pcie_lanes = NULL,
197
	.set_pcie_lanes = NULL,
198
	.set_clock_gating = &radeon_legacy_set_clock_gating,
198
	.set_clock_gating = &radeon_legacy_set_clock_gating,
199
	.set_surface_reg = r100_set_surface_reg,
199
	.set_surface_reg = r100_set_surface_reg,
200
	.clear_surface_reg = r100_clear_surface_reg,
200
	.clear_surface_reg = r100_clear_surface_reg,
201
	.bandwidth_update = &r100_bandwidth_update,
201
	.bandwidth_update = &r100_bandwidth_update,
202
	.hpd_init = &r100_hpd_init,
202
	.hpd_init = &r100_hpd_init,
203
	.hpd_fini = &r100_hpd_fini,
203
	.hpd_fini = &r100_hpd_fini,
204
	.hpd_sense = &r100_hpd_sense,
204
	.hpd_sense = &r100_hpd_sense,
205
	.hpd_set_polarity = &r100_hpd_set_polarity,
205
	.hpd_set_polarity = &r100_hpd_set_polarity,
206
	.ioctl_wait_idle = NULL,
206
	.ioctl_wait_idle = NULL,
207
	.gui_idle = &r100_gui_idle,
207
	.gui_idle = &r100_gui_idle,
208
};
208
};
209
 
209
 
210
static struct radeon_asic r300_asic = {
210
static struct radeon_asic r300_asic = {
211
	.init = &r300_init,
211
	.init = &r300_init,
212
//	.fini = &r300_fini,
212
//	.fini = &r300_fini,
213
//	.suspend = &r300_suspend,
213
//	.suspend = &r300_suspend,
214
//	.resume = &r300_resume,
214
//	.resume = &r300_resume,
215
//	.vga_set_state = &r100_vga_set_state,
215
//	.vga_set_state = &r100_vga_set_state,
216
	.asic_reset = &r300_asic_reset,
216
	.asic_reset = &r300_asic_reset,
217
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
217
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
218
	.gart_set_page = &r100_pci_gart_set_page,
218
	.gart_set_page = &r100_pci_gart_set_page,
219
	.cp_commit = &r100_cp_commit,
219
	.cp_commit = &r100_cp_commit,
220
	.ring_start = &r300_ring_start,
220
	.ring_start = &r300_ring_start,
221
	.ring_test = &r100_ring_test,
221
	.ring_test = &r100_ring_test,
222
	.ring_ib_execute = &r100_ring_ib_execute,
222
	.ring_ib_execute = &r100_ring_ib_execute,
223
	.irq_set = &r100_irq_set,
223
	.irq_set = &r100_irq_set,
224
	.irq_process = &r100_irq_process,
224
	.irq_process = &r100_irq_process,
225
//	.get_vblank_counter = &r100_get_vblank_counter,
225
//	.get_vblank_counter = &r100_get_vblank_counter,
226
	.fence_ring_emit = &r300_fence_ring_emit,
226
	.fence_ring_emit = &r300_fence_ring_emit,
227
//	.cs_parse = &r300_cs_parse,
227
//	.cs_parse = &r300_cs_parse,
228
	.copy_blit = &r100_copy_blit,
228
	.copy_blit = &r100_copy_blit,
229
	.copy_dma = &r200_copy_dma,
229
	.copy_dma = &r200_copy_dma,
230
	.copy = &r100_copy_blit,
230
	.copy = &r100_copy_blit,
231
	.get_engine_clock = &radeon_legacy_get_engine_clock,
231
	.get_engine_clock = &radeon_legacy_get_engine_clock,
232
	.set_engine_clock = &radeon_legacy_set_engine_clock,
232
	.set_engine_clock = &radeon_legacy_set_engine_clock,
233
	.get_memory_clock = &radeon_legacy_get_memory_clock,
233
	.get_memory_clock = &radeon_legacy_get_memory_clock,
234
	.set_memory_clock = NULL,
234
	.set_memory_clock = NULL,
235
	.get_pcie_lanes = &rv370_get_pcie_lanes,
235
	.get_pcie_lanes = &rv370_get_pcie_lanes,
236
	.set_pcie_lanes = &rv370_set_pcie_lanes,
236
	.set_pcie_lanes = &rv370_set_pcie_lanes,
237
	.set_clock_gating = &radeon_legacy_set_clock_gating,
237
	.set_clock_gating = &radeon_legacy_set_clock_gating,
238
	.set_surface_reg = r100_set_surface_reg,
238
	.set_surface_reg = r100_set_surface_reg,
239
	.clear_surface_reg = r100_clear_surface_reg,
239
	.clear_surface_reg = r100_clear_surface_reg,
240
	.bandwidth_update = &r100_bandwidth_update,
240
	.bandwidth_update = &r100_bandwidth_update,
241
	.hpd_init = &r100_hpd_init,
241
	.hpd_init = &r100_hpd_init,
242
	.hpd_fini = &r100_hpd_fini,
242
	.hpd_fini = &r100_hpd_fini,
243
	.hpd_sense = &r100_hpd_sense,
243
	.hpd_sense = &r100_hpd_sense,
244
	.hpd_set_polarity = &r100_hpd_set_polarity,
244
	.hpd_set_polarity = &r100_hpd_set_polarity,
245
	.ioctl_wait_idle = NULL,
245
	.ioctl_wait_idle = NULL,
246
	.gui_idle = &r100_gui_idle,
246
	.gui_idle = &r100_gui_idle,
247
};
247
};
248
 
248
 
249
static struct radeon_asic r300_asic_pcie = {
249
static struct radeon_asic r300_asic_pcie = {
250
	.init = &r300_init,
250
	.init = &r300_init,
251
//	.fini = &r300_fini,
251
//	.fini = &r300_fini,
252
//	.suspend = &r300_suspend,
252
//	.suspend = &r300_suspend,
253
//	.resume = &r300_resume,
253
//	.resume = &r300_resume,
254
//	.vga_set_state = &r100_vga_set_state,
254
//	.vga_set_state = &r100_vga_set_state,
255
	.asic_reset = &r300_asic_reset,
255
	.asic_reset = &r300_asic_reset,
256
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
256
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
257
	.gart_set_page = &rv370_pcie_gart_set_page,
257
	.gart_set_page = &rv370_pcie_gart_set_page,
258
	.cp_commit = &r100_cp_commit,
258
	.cp_commit = &r100_cp_commit,
259
	.ring_start = &r300_ring_start,
259
	.ring_start = &r300_ring_start,
260
	.ring_test = &r100_ring_test,
260
	.ring_test = &r100_ring_test,
261
	.ring_ib_execute = &r100_ring_ib_execute,
261
	.ring_ib_execute = &r100_ring_ib_execute,
262
	.irq_set = &r100_irq_set,
262
	.irq_set = &r100_irq_set,
263
	.irq_process = &r100_irq_process,
263
	.irq_process = &r100_irq_process,
264
//	.get_vblank_counter = &r100_get_vblank_counter,
264
//	.get_vblank_counter = &r100_get_vblank_counter,
265
	.fence_ring_emit = &r300_fence_ring_emit,
265
	.fence_ring_emit = &r300_fence_ring_emit,
266
//	.cs_parse = &r300_cs_parse,
266
//	.cs_parse = &r300_cs_parse,
267
	.copy_blit = &r100_copy_blit,
267
	.copy_blit = &r100_copy_blit,
268
	.copy_dma = &r200_copy_dma,
268
	.copy_dma = &r200_copy_dma,
269
	.copy = &r100_copy_blit,
269
	.copy = &r100_copy_blit,
270
	.get_engine_clock = &radeon_legacy_get_engine_clock,
270
	.get_engine_clock = &radeon_legacy_get_engine_clock,
271
	.set_engine_clock = &radeon_legacy_set_engine_clock,
271
	.set_engine_clock = &radeon_legacy_set_engine_clock,
272
	.get_memory_clock = &radeon_legacy_get_memory_clock,
272
	.get_memory_clock = &radeon_legacy_get_memory_clock,
273
	.set_memory_clock = NULL,
273
	.set_memory_clock = NULL,
274
	.set_pcie_lanes = &rv370_set_pcie_lanes,
274
	.set_pcie_lanes = &rv370_set_pcie_lanes,
275
	.set_clock_gating = &radeon_legacy_set_clock_gating,
275
	.set_clock_gating = &radeon_legacy_set_clock_gating,
276
	.set_surface_reg = r100_set_surface_reg,
276
	.set_surface_reg = r100_set_surface_reg,
277
	.clear_surface_reg = r100_clear_surface_reg,
277
	.clear_surface_reg = r100_clear_surface_reg,
278
	.bandwidth_update = &r100_bandwidth_update,
278
	.bandwidth_update = &r100_bandwidth_update,
279
	.hpd_init = &r100_hpd_init,
279
	.hpd_init = &r100_hpd_init,
280
	.hpd_fini = &r100_hpd_fini,
280
	.hpd_fini = &r100_hpd_fini,
281
	.hpd_sense = &r100_hpd_sense,
281
	.hpd_sense = &r100_hpd_sense,
282
	.hpd_set_polarity = &r100_hpd_set_polarity,
282
	.hpd_set_polarity = &r100_hpd_set_polarity,
283
	.ioctl_wait_idle = NULL,
283
	.ioctl_wait_idle = NULL,
284
	.gui_idle = &r100_gui_idle,
284
	.gui_idle = &r100_gui_idle,
285
};
285
};
286
 
286
 
287
static struct radeon_asic r420_asic = {
287
static struct radeon_asic r420_asic = {
288
	.init = &r420_init,
288
	.init = &r420_init,
289
//	.fini = &r420_fini,
289
//	.fini = &r420_fini,
290
//	.suspend = &r420_suspend,
290
//	.suspend = &r420_suspend,
291
//	.resume = &r420_resume,
291
//	.resume = &r420_resume,
292
//	.vga_set_state = &r100_vga_set_state,
292
//	.vga_set_state = &r100_vga_set_state,
293
	.asic_reset = &r300_asic_reset,
293
	.asic_reset = &r300_asic_reset,
294
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
294
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
295
	.gart_set_page = &rv370_pcie_gart_set_page,
295
	.gart_set_page = &rv370_pcie_gart_set_page,
296
	.cp_commit = &r100_cp_commit,
296
	.cp_commit = &r100_cp_commit,
297
	.ring_start = &r300_ring_start,
297
	.ring_start = &r300_ring_start,
298
	.ring_test = &r100_ring_test,
298
	.ring_test = &r100_ring_test,
299
	.ring_ib_execute = &r100_ring_ib_execute,
299
	.ring_ib_execute = &r100_ring_ib_execute,
300
	.irq_set = &r100_irq_set,
300
	.irq_set = &r100_irq_set,
301
	.irq_process = &r100_irq_process,
301
	.irq_process = &r100_irq_process,
302
//	.get_vblank_counter = &r100_get_vblank_counter,
302
//	.get_vblank_counter = &r100_get_vblank_counter,
303
	.fence_ring_emit = &r300_fence_ring_emit,
303
	.fence_ring_emit = &r300_fence_ring_emit,
304
//	.cs_parse = &r300_cs_parse,
304
//	.cs_parse = &r300_cs_parse,
305
	.copy_blit = &r100_copy_blit,
305
	.copy_blit = &r100_copy_blit,
306
	.copy_dma = &r200_copy_dma,
306
	.copy_dma = &r200_copy_dma,
307
	.copy = &r100_copy_blit,
307
	.copy = &r100_copy_blit,
308
	.get_engine_clock = &radeon_atom_get_engine_clock,
308
	.get_engine_clock = &radeon_atom_get_engine_clock,
309
	.set_engine_clock = &radeon_atom_set_engine_clock,
309
	.set_engine_clock = &radeon_atom_set_engine_clock,
310
	.get_memory_clock = &radeon_atom_get_memory_clock,
310
	.get_memory_clock = &radeon_atom_get_memory_clock,
311
	.set_memory_clock = &radeon_atom_set_memory_clock,
311
	.set_memory_clock = &radeon_atom_set_memory_clock,
312
	.get_pcie_lanes = &rv370_get_pcie_lanes,
312
	.get_pcie_lanes = &rv370_get_pcie_lanes,
313
	.set_pcie_lanes = &rv370_set_pcie_lanes,
313
	.set_pcie_lanes = &rv370_set_pcie_lanes,
314
	.set_clock_gating = &radeon_atom_set_clock_gating,
314
	.set_clock_gating = &radeon_atom_set_clock_gating,
315
	.set_surface_reg = r100_set_surface_reg,
315
	.set_surface_reg = r100_set_surface_reg,
316
	.clear_surface_reg = r100_clear_surface_reg,
316
	.clear_surface_reg = r100_clear_surface_reg,
317
	.bandwidth_update = &r100_bandwidth_update,
317
	.bandwidth_update = &r100_bandwidth_update,
318
	.hpd_init = &r100_hpd_init,
318
	.hpd_init = &r100_hpd_init,
319
	.hpd_fini = &r100_hpd_fini,
319
	.hpd_fini = &r100_hpd_fini,
320
	.hpd_sense = &r100_hpd_sense,
320
	.hpd_sense = &r100_hpd_sense,
321
	.hpd_set_polarity = &r100_hpd_set_polarity,
321
	.hpd_set_polarity = &r100_hpd_set_polarity,
322
	.ioctl_wait_idle = NULL,
322
	.ioctl_wait_idle = NULL,
-
 
323
	.gui_idle = &r100_gui_idle,
323
};
324
};
324
 
325
 
325
static struct radeon_asic rs400_asic = {
326
static struct radeon_asic rs400_asic = {
326
	.init = &rs400_init,
327
	.init = &rs400_init,
327
//	.fini = &rs400_fini,
328
//	.fini = &rs400_fini,
328
//	.suspend = &rs400_suspend,
329
//	.suspend = &rs400_suspend,
329
//	.resume = &rs400_resume,
330
//	.resume = &rs400_resume,
330
//	.vga_set_state = &r100_vga_set_state,
331
//	.vga_set_state = &r100_vga_set_state,
331
	.asic_reset = &r300_asic_reset,
332
	.asic_reset = &r300_asic_reset,
332
	.gart_tlb_flush = &rs400_gart_tlb_flush,
333
	.gart_tlb_flush = &rs400_gart_tlb_flush,
333
	.gart_set_page = &rs400_gart_set_page,
334
	.gart_set_page = &rs400_gart_set_page,
334
	.cp_commit = &r100_cp_commit,
335
	.cp_commit = &r100_cp_commit,
335
	.ring_start = &r300_ring_start,
336
	.ring_start = &r300_ring_start,
336
	.ring_test = &r100_ring_test,
337
	.ring_test = &r100_ring_test,
337
	.ring_ib_execute = &r100_ring_ib_execute,
338
	.ring_ib_execute = &r100_ring_ib_execute,
338
	.irq_set = &r100_irq_set,
339
	.irq_set = &r100_irq_set,
339
	.irq_process = &r100_irq_process,
340
	.irq_process = &r100_irq_process,
340
//	.get_vblank_counter = &r100_get_vblank_counter,
341
//	.get_vblank_counter = &r100_get_vblank_counter,
341
	.fence_ring_emit = &r300_fence_ring_emit,
342
	.fence_ring_emit = &r300_fence_ring_emit,
342
//	.cs_parse = &r300_cs_parse,
343
//	.cs_parse = &r300_cs_parse,
343
	.copy_blit = &r100_copy_blit,
344
	.copy_blit = &r100_copy_blit,
344
	.copy_dma = &r200_copy_dma,
345
	.copy_dma = &r200_copy_dma,
345
	.copy = &r100_copy_blit,
346
	.copy = &r100_copy_blit,
346
	.get_engine_clock = &radeon_legacy_get_engine_clock,
347
	.get_engine_clock = &radeon_legacy_get_engine_clock,
347
	.set_engine_clock = &radeon_legacy_set_engine_clock,
348
	.set_engine_clock = &radeon_legacy_set_engine_clock,
348
	.get_memory_clock = &radeon_legacy_get_memory_clock,
349
	.get_memory_clock = &radeon_legacy_get_memory_clock,
349
	.set_memory_clock = NULL,
350
	.set_memory_clock = NULL,
350
	.get_pcie_lanes = NULL,
351
	.get_pcie_lanes = NULL,
351
	.set_pcie_lanes = NULL,
352
	.set_pcie_lanes = NULL,
352
	.set_clock_gating = &radeon_legacy_set_clock_gating,
353
	.set_clock_gating = &radeon_legacy_set_clock_gating,
353
	.set_surface_reg = r100_set_surface_reg,
354
	.set_surface_reg = r100_set_surface_reg,
354
	.clear_surface_reg = r100_clear_surface_reg,
355
	.clear_surface_reg = r100_clear_surface_reg,
355
	.bandwidth_update = &r100_bandwidth_update,
356
	.bandwidth_update = &r100_bandwidth_update,
356
	.hpd_init = &r100_hpd_init,
357
	.hpd_init = &r100_hpd_init,
357
	.hpd_fini = &r100_hpd_fini,
358
	.hpd_fini = &r100_hpd_fini,
358
	.hpd_sense = &r100_hpd_sense,
359
	.hpd_sense = &r100_hpd_sense,
359
	.hpd_set_polarity = &r100_hpd_set_polarity,
360
	.hpd_set_polarity = &r100_hpd_set_polarity,
360
	.ioctl_wait_idle = NULL,
361
	.ioctl_wait_idle = NULL,
-
 
362
	.gui_idle = &r100_gui_idle,
361
};
363
};
362
 
364
 
363
static struct radeon_asic rs600_asic = {
365
static struct radeon_asic rs600_asic = {
364
	.init = &rs600_init,
366
	.init = &rs600_init,
365
//	.fini = &rs600_fini,
367
//	.fini = &rs600_fini,
366
//	.suspend = &rs600_suspend,
368
//	.suspend = &rs600_suspend,
367
//	.resume = &rs600_resume,
369
//	.resume = &rs600_resume,
368
//	.vga_set_state = &r100_vga_set_state,
370
//	.vga_set_state = &r100_vga_set_state,
369
	.asic_reset = &rs600_asic_reset,
371
	.asic_reset = &rs600_asic_reset,
370
	.gart_tlb_flush = &rs600_gart_tlb_flush,
372
	.gart_tlb_flush = &rs600_gart_tlb_flush,
371
	.gart_set_page = &rs600_gart_set_page,
373
	.gart_set_page = &rs600_gart_set_page,
372
	.cp_commit = &r100_cp_commit,
374
	.cp_commit = &r100_cp_commit,
373
	.ring_start = &r300_ring_start,
375
	.ring_start = &r300_ring_start,
374
	.ring_test = &r100_ring_test,
376
	.ring_test = &r100_ring_test,
375
	.ring_ib_execute = &r100_ring_ib_execute,
377
	.ring_ib_execute = &r100_ring_ib_execute,
376
	.irq_set = &rs600_irq_set,
378
	.irq_set = &rs600_irq_set,
377
	.irq_process = &rs600_irq_process,
379
	.irq_process = &rs600_irq_process,
378
//	.get_vblank_counter = &rs600_get_vblank_counter,
380
//	.get_vblank_counter = &rs600_get_vblank_counter,
379
	.fence_ring_emit = &r300_fence_ring_emit,
381
	.fence_ring_emit = &r300_fence_ring_emit,
380
//   .cs_parse = &r300_cs_parse,
382
//   .cs_parse = &r300_cs_parse,
381
    .copy_blit = &r100_copy_blit,
383
    .copy_blit = &r100_copy_blit,
382
	.copy_dma = &r200_copy_dma,
384
	.copy_dma = &r200_copy_dma,
383
    .copy = &r100_copy_blit,
385
    .copy = &r100_copy_blit,
384
	.get_engine_clock = &radeon_atom_get_engine_clock,
386
	.get_engine_clock = &radeon_atom_get_engine_clock,
385
	.set_engine_clock = &radeon_atom_set_engine_clock,
387
	.set_engine_clock = &radeon_atom_set_engine_clock,
386
	.get_memory_clock = &radeon_atom_get_memory_clock,
388
	.get_memory_clock = &radeon_atom_get_memory_clock,
387
	.set_memory_clock = &radeon_atom_set_memory_clock,
389
	.set_memory_clock = &radeon_atom_set_memory_clock,
388
	.get_pcie_lanes = NULL,
390
	.get_pcie_lanes = NULL,
389
	.set_pcie_lanes = NULL,
391
	.set_pcie_lanes = NULL,
390
	.set_clock_gating = &radeon_atom_set_clock_gating,
392
	.set_clock_gating = &radeon_atom_set_clock_gating,
391
	.set_surface_reg = r100_set_surface_reg,
393
	.set_surface_reg = r100_set_surface_reg,
392
	.clear_surface_reg = r100_clear_surface_reg,
394
	.clear_surface_reg = r100_clear_surface_reg,
393
	.bandwidth_update = &rs600_bandwidth_update,
395
	.bandwidth_update = &rs600_bandwidth_update,
394
	.hpd_init = &rs600_hpd_init,
396
	.hpd_init = &rs600_hpd_init,
395
	.hpd_fini = &rs600_hpd_fini,
397
	.hpd_fini = &rs600_hpd_fini,
396
	.hpd_sense = &rs600_hpd_sense,
398
	.hpd_sense = &rs600_hpd_sense,
397
	.hpd_set_polarity = &rs600_hpd_set_polarity,
399
	.hpd_set_polarity = &rs600_hpd_set_polarity,
398
	.ioctl_wait_idle = NULL,
400
	.ioctl_wait_idle = NULL,
-
 
401
	.gui_idle = &r100_gui_idle,
399
};
402
};
400
 
403
 
401
static struct radeon_asic rs690_asic = {
404
static struct radeon_asic rs690_asic = {
402
	.init = &rs690_init,
405
	.init = &rs690_init,
403
//	.fini = &rs690_fini,
406
//	.fini = &rs690_fini,
404
//	.suspend = &rs690_suspend,
407
//	.suspend = &rs690_suspend,
405
//	.resume = &rs690_resume,
408
//	.resume = &rs690_resume,
406
//	.vga_set_state = &r100_vga_set_state,
409
//	.vga_set_state = &r100_vga_set_state,
407
	.asic_reset = &rs600_asic_reset,
410
	.asic_reset = &rs600_asic_reset,
408
	.gart_tlb_flush = &rs400_gart_tlb_flush,
411
	.gart_tlb_flush = &rs400_gart_tlb_flush,
409
	.gart_set_page = &rs400_gart_set_page,
412
	.gart_set_page = &rs400_gart_set_page,
410
	.cp_commit = &r100_cp_commit,
413
	.cp_commit = &r100_cp_commit,
411
	.ring_start = &r300_ring_start,
414
	.ring_start = &r300_ring_start,
412
	.ring_test = &r100_ring_test,
415
	.ring_test = &r100_ring_test,
413
	.ring_ib_execute = &r100_ring_ib_execute,
416
	.ring_ib_execute = &r100_ring_ib_execute,
414
	.irq_set = &rs600_irq_set,
417
	.irq_set = &rs600_irq_set,
415
	.irq_process = &rs600_irq_process,
418
	.irq_process = &rs600_irq_process,
416
//	.get_vblank_counter = &rs600_get_vblank_counter,
419
//	.get_vblank_counter = &rs600_get_vblank_counter,
417
	.fence_ring_emit = &r300_fence_ring_emit,
420
	.fence_ring_emit = &r300_fence_ring_emit,
418
//	.cs_parse = &r300_cs_parse,
421
//	.cs_parse = &r300_cs_parse,
419
	.copy_blit = &r100_copy_blit,
422
	.copy_blit = &r100_copy_blit,
420
	.copy_dma = &r200_copy_dma,
423
	.copy_dma = &r200_copy_dma,
421
	.copy = &r200_copy_dma,
424
	.copy = &r200_copy_dma,
422
	.get_engine_clock = &radeon_atom_get_engine_clock,
425
	.get_engine_clock = &radeon_atom_get_engine_clock,
423
	.set_engine_clock = &radeon_atom_set_engine_clock,
426
	.set_engine_clock = &radeon_atom_set_engine_clock,
424
	.get_memory_clock = &radeon_atom_get_memory_clock,
427
	.get_memory_clock = &radeon_atom_get_memory_clock,
425
	.set_memory_clock = &radeon_atom_set_memory_clock,
428
	.set_memory_clock = &radeon_atom_set_memory_clock,
426
	.get_pcie_lanes = NULL,
429
	.get_pcie_lanes = NULL,
427
	.set_pcie_lanes = NULL,
430
	.set_pcie_lanes = NULL,
428
	.set_clock_gating = &radeon_atom_set_clock_gating,
431
	.set_clock_gating = &radeon_atom_set_clock_gating,
429
	.set_surface_reg = r100_set_surface_reg,
432
	.set_surface_reg = r100_set_surface_reg,
430
	.clear_surface_reg = r100_clear_surface_reg,
433
	.clear_surface_reg = r100_clear_surface_reg,
431
	.bandwidth_update = &rs690_bandwidth_update,
434
	.bandwidth_update = &rs690_bandwidth_update,
432
	.hpd_init = &rs600_hpd_init,
435
	.hpd_init = &rs600_hpd_init,
433
	.hpd_fini = &rs600_hpd_fini,
436
	.hpd_fini = &rs600_hpd_fini,
434
	.hpd_sense = &rs600_hpd_sense,
437
	.hpd_sense = &rs600_hpd_sense,
435
	.hpd_set_polarity = &rs600_hpd_set_polarity,
438
	.hpd_set_polarity = &rs600_hpd_set_polarity,
436
	.ioctl_wait_idle = NULL,
439
	.ioctl_wait_idle = NULL,
-
 
440
	.gui_idle = &r100_gui_idle,
437
};
441
};
438
 
442
 
439
static struct radeon_asic rv515_asic = {
443
static struct radeon_asic rv515_asic = {
440
	.init = &rv515_init,
444
	.init = &rv515_init,
441
//	.fini = &rv515_fini,
445
//	.fini = &rv515_fini,
442
//	.suspend = &rv515_suspend,
446
//	.suspend = &rv515_suspend,
443
//	.resume = &rv515_resume,
447
//	.resume = &rv515_resume,
444
//	.vga_set_state = &r100_vga_set_state,
448
//	.vga_set_state = &r100_vga_set_state,
445
	.asic_reset = &rs600_asic_reset,
449
	.asic_reset = &rs600_asic_reset,
446
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
450
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
447
	.gart_set_page = &rv370_pcie_gart_set_page,
451
	.gart_set_page = &rv370_pcie_gart_set_page,
448
	.cp_commit = &r100_cp_commit,
452
	.cp_commit = &r100_cp_commit,
449
	.ring_start = &rv515_ring_start,
453
	.ring_start = &rv515_ring_start,
450
	.ring_test = &r100_ring_test,
454
	.ring_test = &r100_ring_test,
451
	.ring_ib_execute = &r100_ring_ib_execute,
455
	.ring_ib_execute = &r100_ring_ib_execute,
452
	.irq_set = &rs600_irq_set,
456
	.irq_set = &rs600_irq_set,
453
	.irq_process = &rs600_irq_process,
457
	.irq_process = &rs600_irq_process,
454
//	.get_vblank_counter = &rs600_get_vblank_counter,
458
//	.get_vblank_counter = &rs600_get_vblank_counter,
455
	.fence_ring_emit = &r300_fence_ring_emit,
459
	.fence_ring_emit = &r300_fence_ring_emit,
456
//	.cs_parse = &r300_cs_parse,
460
//	.cs_parse = &r300_cs_parse,
457
	.copy_blit = &r100_copy_blit,
461
	.copy_blit = &r100_copy_blit,
458
	.copy_dma = &r200_copy_dma,
462
	.copy_dma = &r200_copy_dma,
459
	.copy = &r100_copy_blit,
463
	.copy = &r100_copy_blit,
460
	.get_engine_clock = &radeon_atom_get_engine_clock,
464
	.get_engine_clock = &radeon_atom_get_engine_clock,
461
	.set_engine_clock = &radeon_atom_set_engine_clock,
465
	.set_engine_clock = &radeon_atom_set_engine_clock,
462
	.get_memory_clock = &radeon_atom_get_memory_clock,
466
	.get_memory_clock = &radeon_atom_get_memory_clock,
463
	.set_memory_clock = &radeon_atom_set_memory_clock,
467
	.set_memory_clock = &radeon_atom_set_memory_clock,
464
	.get_pcie_lanes = &rv370_get_pcie_lanes,
468
	.get_pcie_lanes = &rv370_get_pcie_lanes,
465
	.set_pcie_lanes = &rv370_set_pcie_lanes,
469
	.set_pcie_lanes = &rv370_set_pcie_lanes,
466
	.set_clock_gating = &radeon_atom_set_clock_gating,
470
	.set_clock_gating = &radeon_atom_set_clock_gating,
467
	.set_surface_reg = r100_set_surface_reg,
471
	.set_surface_reg = r100_set_surface_reg,
468
	.clear_surface_reg = r100_clear_surface_reg,
472
	.clear_surface_reg = r100_clear_surface_reg,
469
	.bandwidth_update = &rv515_bandwidth_update,
473
	.bandwidth_update = &rv515_bandwidth_update,
470
	.hpd_init = &rs600_hpd_init,
474
	.hpd_init = &rs600_hpd_init,
471
	.hpd_fini = &rs600_hpd_fini,
475
	.hpd_fini = &rs600_hpd_fini,
472
	.hpd_sense = &rs600_hpd_sense,
476
	.hpd_sense = &rs600_hpd_sense,
473
	.hpd_set_polarity = &rs600_hpd_set_polarity,
477
	.hpd_set_polarity = &rs600_hpd_set_polarity,
474
	.ioctl_wait_idle = NULL,
478
	.ioctl_wait_idle = NULL,
-
 
479
	.gui_idle = &r100_gui_idle,
475
};
480
};
476
 
481
 
477
static struct radeon_asic r520_asic = {
482
static struct radeon_asic r520_asic = {
478
	.init = &r520_init,
483
	.init = &r520_init,
479
//	.fini = &rv515_fini,
484
//	.fini = &rv515_fini,
480
//	.suspend = &rv515_suspend,
485
//	.suspend = &rv515_suspend,
481
//	.resume = &r520_resume,
486
//	.resume = &r520_resume,
482
//	.vga_set_state = &r100_vga_set_state,
487
//	.vga_set_state = &r100_vga_set_state,
483
	.asic_reset = &rs600_asic_reset,
488
	.asic_reset = &rs600_asic_reset,
484
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
489
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
485
	.gart_set_page = &rv370_pcie_gart_set_page,
490
	.gart_set_page = &rv370_pcie_gart_set_page,
486
	.cp_commit = &r100_cp_commit,
491
	.cp_commit = &r100_cp_commit,
487
	.ring_start = &rv515_ring_start,
492
	.ring_start = &rv515_ring_start,
488
	.ring_test = &r100_ring_test,
493
	.ring_test = &r100_ring_test,
489
	.ring_ib_execute = &r100_ring_ib_execute,
494
	.ring_ib_execute = &r100_ring_ib_execute,
490
	.irq_set = &rs600_irq_set,
495
	.irq_set = &rs600_irq_set,
491
	.irq_process = &rs600_irq_process,
496
	.irq_process = &rs600_irq_process,
492
//	.get_vblank_counter = &rs600_get_vblank_counter,
497
//	.get_vblank_counter = &rs600_get_vblank_counter,
493
	.fence_ring_emit = &r300_fence_ring_emit,
498
	.fence_ring_emit = &r300_fence_ring_emit,
494
//	.cs_parse = &r300_cs_parse,
499
//	.cs_parse = &r300_cs_parse,
495
	.copy_blit = &r100_copy_blit,
500
	.copy_blit = &r100_copy_blit,
496
	.copy_dma = &r200_copy_dma,
501
	.copy_dma = &r200_copy_dma,
497
	.copy = &r100_copy_blit,
502
	.copy = &r100_copy_blit,
498
	.get_engine_clock = &radeon_atom_get_engine_clock,
503
	.get_engine_clock = &radeon_atom_get_engine_clock,
499
	.set_engine_clock = &radeon_atom_set_engine_clock,
504
	.set_engine_clock = &radeon_atom_set_engine_clock,
500
	.get_memory_clock = &radeon_atom_get_memory_clock,
505
	.get_memory_clock = &radeon_atom_get_memory_clock,
501
	.set_memory_clock = &radeon_atom_set_memory_clock,
506
	.set_memory_clock = &radeon_atom_set_memory_clock,
502
	.get_pcie_lanes = &rv370_get_pcie_lanes,
507
	.get_pcie_lanes = &rv370_get_pcie_lanes,
503
	.set_pcie_lanes = &rv370_set_pcie_lanes,
508
	.set_pcie_lanes = &rv370_set_pcie_lanes,
504
	.set_clock_gating = &radeon_atom_set_clock_gating,
509
	.set_clock_gating = &radeon_atom_set_clock_gating,
505
	.set_surface_reg = r100_set_surface_reg,
510
	.set_surface_reg = r100_set_surface_reg,
506
	.clear_surface_reg = r100_clear_surface_reg,
511
	.clear_surface_reg = r100_clear_surface_reg,
507
	.bandwidth_update = &rv515_bandwidth_update,
512
	.bandwidth_update = &rv515_bandwidth_update,
508
	.hpd_init = &rs600_hpd_init,
513
	.hpd_init = &rs600_hpd_init,
509
	.hpd_fini = &rs600_hpd_fini,
514
	.hpd_fini = &rs600_hpd_fini,
510
	.hpd_sense = &rs600_hpd_sense,
515
	.hpd_sense = &rs600_hpd_sense,
511
	.hpd_set_polarity = &rs600_hpd_set_polarity,
516
	.hpd_set_polarity = &rs600_hpd_set_polarity,
512
	.ioctl_wait_idle = NULL,
517
	.ioctl_wait_idle = NULL,
-
 
518
	.gui_idle = &r100_gui_idle,
513
};
519
};
514
 
520
 
515
static struct radeon_asic r600_asic = {
521
static struct radeon_asic r600_asic = {
516
	.init = &r600_init,
522
	.init = &r600_init,
517
//	.fini = &r600_fini,
523
//	.fini = &r600_fini,
518
//	.suspend = &r600_suspend,
524
//	.suspend = &r600_suspend,
519
//	.resume = &r600_resume,
525
//	.resume = &r600_resume,
520
	.cp_commit = &r600_cp_commit,
526
	.cp_commit = &r600_cp_commit,
521
	.vga_set_state = &r600_vga_set_state,
527
	.vga_set_state = &r600_vga_set_state,
522
	.asic_reset = &r600_asic_reset,
528
	.asic_reset = &r600_asic_reset,
523
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
529
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
524
	.gart_set_page = &rs600_gart_set_page,
530
	.gart_set_page = &rs600_gart_set_page,
525
	.ring_test = &r600_ring_test,
531
	.ring_test = &r600_ring_test,
526
	.ring_ib_execute = &r600_ring_ib_execute,
532
	.ring_ib_execute = &r600_ring_ib_execute,
527
	.irq_set = &r600_irq_set,
533
	.irq_set = &r600_irq_set,
528
	.irq_process = &r600_irq_process,
534
	.irq_process = &r600_irq_process,
529
	.fence_ring_emit = &r600_fence_ring_emit,
535
	.fence_ring_emit = &r600_fence_ring_emit,
530
//	.cs_parse = &r600_cs_parse,
536
//	.cs_parse = &r600_cs_parse,
531
	.copy_blit = &r600_copy_blit,
537
	.copy_blit = &r600_copy_blit,
532
	.copy_dma = &r600_copy_blit,
538
	.copy_dma = NULL,
533
	.copy = &r600_copy_blit,
539
	.copy = &r600_copy_blit,
534
	.get_engine_clock = &radeon_atom_get_engine_clock,
540
	.get_engine_clock = &radeon_atom_get_engine_clock,
535
	.set_engine_clock = &radeon_atom_set_engine_clock,
541
	.set_engine_clock = &radeon_atom_set_engine_clock,
536
	.get_memory_clock = &radeon_atom_get_memory_clock,
542
	.get_memory_clock = &radeon_atom_get_memory_clock,
537
	.set_memory_clock = &radeon_atom_set_memory_clock,
543
	.set_memory_clock = &radeon_atom_set_memory_clock,
538
	.get_pcie_lanes = &r600_get_pcie_lanes,
544
	.get_pcie_lanes = &r600_get_pcie_lanes,
539
	.set_pcie_lanes = &r600_set_pcie_lanes,
545
	.set_pcie_lanes = &r600_set_pcie_lanes,
540
	.set_clock_gating = NULL,
546
	.set_clock_gating = NULL,
541
	.set_surface_reg = r600_set_surface_reg,
547
	.set_surface_reg = r600_set_surface_reg,
542
	.clear_surface_reg = r600_clear_surface_reg,
548
	.clear_surface_reg = r600_clear_surface_reg,
543
	.bandwidth_update = &rv515_bandwidth_update,
549
	.bandwidth_update = &rv515_bandwidth_update,
544
	.hpd_init = &r600_hpd_init,
550
	.hpd_init = &r600_hpd_init,
545
	.hpd_fini = &r600_hpd_fini,
551
	.hpd_fini = &r600_hpd_fini,
546
	.hpd_sense = &r600_hpd_sense,
552
	.hpd_sense = &r600_hpd_sense,
547
	.hpd_set_polarity = &r600_hpd_set_polarity,
553
	.hpd_set_polarity = &r600_hpd_set_polarity,
548
//	.ioctl_wait_idle = r600_ioctl_wait_idle,
554
//	.ioctl_wait_idle = r600_ioctl_wait_idle,
549
};
555
};
550
 
556
 
551
static struct radeon_asic rs780_asic = {
557
static struct radeon_asic rs780_asic = {
552
	.init = &r600_init,
558
	.init = &r600_init,
553
//	.fini = &r600_fini,
559
//	.fini = &r600_fini,
554
//	.suspend = &r600_suspend,
560
//	.suspend = &r600_suspend,
555
//	.resume = &r600_resume,
561
//	.resume = &r600_resume,
556
	.cp_commit = &r600_cp_commit,
562
	.cp_commit = &r600_cp_commit,
557
	.gpu_is_lockup = &r600_gpu_is_lockup,
563
	.gpu_is_lockup = &r600_gpu_is_lockup,
558
	.vga_set_state = &r600_vga_set_state,
564
	.vga_set_state = &r600_vga_set_state,
559
	.asic_reset = &r600_asic_reset,
565
	.asic_reset = &r600_asic_reset,
560
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
566
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
561
	.gart_set_page = &rs600_gart_set_page,
567
	.gart_set_page = &rs600_gart_set_page,
562
	.ring_test = &r600_ring_test,
568
	.ring_test = &r600_ring_test,
563
	.ring_ib_execute = &r600_ring_ib_execute,
569
	.ring_ib_execute = &r600_ring_ib_execute,
564
	.irq_set = &r600_irq_set,
570
	.irq_set = &r600_irq_set,
565
	.irq_process = &r600_irq_process,
571
	.irq_process = &r600_irq_process,
566
	.fence_ring_emit = &r600_fence_ring_emit,
572
	.fence_ring_emit = &r600_fence_ring_emit,
567
//	.cs_parse = &r600_cs_parse,
573
//	.cs_parse = &r600_cs_parse,
568
	.copy_blit = &r600_copy_blit,
574
	.copy_blit = &r600_copy_blit,
569
	.copy_dma = &r600_copy_blit,
575
	.copy_dma = NULL,
570
	.copy = &r600_copy_blit,
576
	.copy = &r600_copy_blit,
571
	.get_engine_clock = &radeon_atom_get_engine_clock,
577
	.get_engine_clock = &radeon_atom_get_engine_clock,
572
	.set_engine_clock = &radeon_atom_set_engine_clock,
578
	.set_engine_clock = &radeon_atom_set_engine_clock,
573
	.get_memory_clock = NULL,
579
	.get_memory_clock = NULL,
574
	.set_memory_clock = NULL,
580
	.set_memory_clock = NULL,
575
	.get_pcie_lanes = NULL,
581
	.get_pcie_lanes = NULL,
576
	.set_pcie_lanes = NULL,
582
	.set_pcie_lanes = NULL,
577
	.set_clock_gating = NULL,
583
	.set_clock_gating = NULL,
578
	.set_surface_reg = r600_set_surface_reg,
584
	.set_surface_reg = r600_set_surface_reg,
579
	.clear_surface_reg = r600_clear_surface_reg,
585
	.clear_surface_reg = r600_clear_surface_reg,
580
	.bandwidth_update = &rs690_bandwidth_update,
586
	.bandwidth_update = &rs690_bandwidth_update,
581
	.hpd_init = &r600_hpd_init,
587
	.hpd_init = &r600_hpd_init,
582
	.hpd_fini = &r600_hpd_fini,
588
	.hpd_fini = &r600_hpd_fini,
583
	.hpd_sense = &r600_hpd_sense,
589
	.hpd_sense = &r600_hpd_sense,
584
	.hpd_set_polarity = &r600_hpd_set_polarity,
590
	.hpd_set_polarity = &r600_hpd_set_polarity,
585
};
591
};
586
 
592
 
587
static struct radeon_asic rv770_asic = {
593
static struct radeon_asic rv770_asic = {
588
	.init = &rv770_init,
594
	.init = &rv770_init,
589
//	.fini = &rv770_fini,
595
//	.fini = &rv770_fini,
590
//	.suspend = &rv770_suspend,
596
//	.suspend = &rv770_suspend,
591
//	.resume = &rv770_resume,
597
//	.resume = &rv770_resume,
592
	.cp_commit = &r600_cp_commit,
598
	.cp_commit = &r600_cp_commit,
593
	.asic_reset = &r600_asic_reset,
599
	.asic_reset = &r600_asic_reset,
594
	.vga_set_state = &r600_vga_set_state,
600
	.vga_set_state = &r600_vga_set_state,
595
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
601
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
596
	.gart_set_page = &rs600_gart_set_page,
602
	.gart_set_page = &rs600_gart_set_page,
597
	.ring_test = &r600_ring_test,
603
	.ring_test = &r600_ring_test,
598
	.ring_ib_execute = &r600_ring_ib_execute,
604
	.ring_ib_execute = &r600_ring_ib_execute,
599
	.irq_set = &r600_irq_set,
605
	.irq_set = &r600_irq_set,
600
	.irq_process = &r600_irq_process,
606
	.irq_process = &r600_irq_process,
601
	.fence_ring_emit = &r600_fence_ring_emit,
607
	.fence_ring_emit = &r600_fence_ring_emit,
602
//	.cs_parse = &r600_cs_parse,
608
//	.cs_parse = &r600_cs_parse,
603
	.copy_blit = &r600_copy_blit,
609
	.copy_blit = &r600_copy_blit,
604
	.copy_dma = &r600_copy_blit,
610
	.copy_dma = NULL,
605
	.copy = &r600_copy_blit,
611
	.copy = &r600_copy_blit,
606
	.get_engine_clock = &radeon_atom_get_engine_clock,
612
	.get_engine_clock = &radeon_atom_get_engine_clock,
607
	.set_engine_clock = &radeon_atom_set_engine_clock,
613
	.set_engine_clock = &radeon_atom_set_engine_clock,
608
	.get_memory_clock = &radeon_atom_get_memory_clock,
614
	.get_memory_clock = &radeon_atom_get_memory_clock,
609
	.set_memory_clock = &radeon_atom_set_memory_clock,
615
	.set_memory_clock = &radeon_atom_set_memory_clock,
610
	.get_pcie_lanes = &r600_get_pcie_lanes,
616
	.get_pcie_lanes = &r600_get_pcie_lanes,
611
	.set_pcie_lanes = &r600_set_pcie_lanes,
617
	.set_pcie_lanes = &r600_set_pcie_lanes,
612
	.set_clock_gating = &radeon_atom_set_clock_gating,
618
	.set_clock_gating = &radeon_atom_set_clock_gating,
613
	.set_surface_reg = r600_set_surface_reg,
619
	.set_surface_reg = r600_set_surface_reg,
614
	.clear_surface_reg = r600_clear_surface_reg,
620
	.clear_surface_reg = r600_clear_surface_reg,
615
	.bandwidth_update = &rv515_bandwidth_update,
621
	.bandwidth_update = &rv515_bandwidth_update,
616
	.hpd_init = &r600_hpd_init,
622
	.hpd_init = &r600_hpd_init,
617
	.hpd_fini = &r600_hpd_fini,
623
	.hpd_fini = &r600_hpd_fini,
618
	.hpd_sense = &r600_hpd_sense,
624
	.hpd_sense = &r600_hpd_sense,
619
	.hpd_set_polarity = &r600_hpd_set_polarity,
625
	.hpd_set_polarity = &r600_hpd_set_polarity,
620
};
626
};
621
 
627
 
622
static struct radeon_asic evergreen_asic = {
628
static struct radeon_asic evergreen_asic = {
623
	.init = &evergreen_init,
629
	.init = &evergreen_init,
624
//	.fini = &evergreen_fini,
630
//	.fini = &evergreen_fini,
625
//	.suspend = &evergreen_suspend,
631
//	.suspend = &evergreen_suspend,
626
//	.resume = &evergreen_resume,
632
//	.resume = &evergreen_resume,
627
	.cp_commit = &r600_cp_commit,
633
	.cp_commit = &r600_cp_commit,
628
	.asic_reset = &evergreen_asic_reset,
634
	.asic_reset = &evergreen_asic_reset,
629
	.vga_set_state = &r600_vga_set_state,
635
	.vga_set_state = &r600_vga_set_state,
630
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
636
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
631
	.gart_set_page = &rs600_gart_set_page,
637
	.gart_set_page = &rs600_gart_set_page,
632
	.ring_test = &r600_ring_test,
638
	.ring_test = &r600_ring_test,
633
	.ring_ib_execute = &evergreen_ring_ib_execute,
639
	.ring_ib_execute = &evergreen_ring_ib_execute,
634
	.irq_set = &evergreen_irq_set,
640
	.irq_set = &evergreen_irq_set,
635
	.irq_process = &evergreen_irq_process,
641
	.irq_process = &evergreen_irq_process,
636
	.fence_ring_emit = &r600_fence_ring_emit,
642
	.fence_ring_emit = &r600_fence_ring_emit,
637
//	.cs_parse = &evergreen_cs_parse,
643
//	.cs_parse = &evergreen_cs_parse,
638
	.copy_blit = &evergreen_copy_blit,
644
	.copy_blit = &evergreen_copy_blit,
639
	.copy_dma = &evergreen_copy_blit,
645
	.copy_dma = NULL,
640
	.copy = &evergreen_copy_blit,
646
	.copy = &evergreen_copy_blit,
641
	.get_engine_clock = &radeon_atom_get_engine_clock,
647
	.get_engine_clock = &radeon_atom_get_engine_clock,
642
	.set_engine_clock = &radeon_atom_set_engine_clock,
648
	.set_engine_clock = &radeon_atom_set_engine_clock,
643
	.get_memory_clock = &radeon_atom_get_memory_clock,
649
	.get_memory_clock = &radeon_atom_get_memory_clock,
644
	.set_memory_clock = &radeon_atom_set_memory_clock,
650
	.set_memory_clock = &radeon_atom_set_memory_clock,
645
	.get_pcie_lanes = &r600_get_pcie_lanes,
651
	.get_pcie_lanes = &r600_get_pcie_lanes,
646
	.set_pcie_lanes = &r600_set_pcie_lanes,
652
	.set_pcie_lanes = &r600_set_pcie_lanes,
647
	.set_clock_gating = NULL,
653
	.set_clock_gating = NULL,
648
	.set_surface_reg = r600_set_surface_reg,
654
	.set_surface_reg = r600_set_surface_reg,
649
	.clear_surface_reg = r600_clear_surface_reg,
655
	.clear_surface_reg = r600_clear_surface_reg,
650
	.bandwidth_update = &evergreen_bandwidth_update,
656
	.bandwidth_update = &evergreen_bandwidth_update,
651
	.hpd_init = &evergreen_hpd_init,
657
	.hpd_init = &evergreen_hpd_init,
652
	.hpd_fini = &evergreen_hpd_fini,
658
	.hpd_fini = &evergreen_hpd_fini,
653
	.hpd_sense = &evergreen_hpd_sense,
659
	.hpd_sense = &evergreen_hpd_sense,
654
	.hpd_set_polarity = &evergreen_hpd_set_polarity,
660
	.hpd_set_polarity = &evergreen_hpd_set_polarity,
655
 
661
 
656
};
662
};
657
 
663
 
658
static struct radeon_asic sumo_asic = {
664
static struct radeon_asic sumo_asic = {
659
	.init = &evergreen_init,
665
	.init = &evergreen_init,
660
//	.fini = &evergreen_fini,
666
//	.fini = &evergreen_fini,
661
//	.suspend = &evergreen_suspend,
667
//	.suspend = &evergreen_suspend,
662
//	.resume = &evergreen_resume,
668
//	.resume = &evergreen_resume,
663
	.cp_commit = &r600_cp_commit,
669
	.cp_commit = &r600_cp_commit,
664
	.asic_reset = &evergreen_asic_reset,
670
	.asic_reset = &evergreen_asic_reset,
665
	.vga_set_state = &r600_vga_set_state,
671
	.vga_set_state = &r600_vga_set_state,
666
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
672
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
667
	.gart_set_page = &rs600_gart_set_page,
673
	.gart_set_page = &rs600_gart_set_page,
668
	.ring_test = &r600_ring_test,
674
	.ring_test = &r600_ring_test,
669
	.ring_ib_execute = &evergreen_ring_ib_execute,
675
	.ring_ib_execute = &evergreen_ring_ib_execute,
670
	.irq_set = &evergreen_irq_set,
676
	.irq_set = &evergreen_irq_set,
671
	.irq_process = &evergreen_irq_process,
677
	.irq_process = &evergreen_irq_process,
672
	.fence_ring_emit = &r600_fence_ring_emit,
678
	.fence_ring_emit = &r600_fence_ring_emit,
673
//	.cs_parse = &r600_cs_parse,
679
//	.cs_parse = &r600_cs_parse,
674
	.copy_blit = &evergreen_copy_blit,
680
	.copy_blit = &evergreen_copy_blit,
675
	.copy_dma = &evergreen_copy_blit,
681
	.copy_dma = NULL,
676
	.copy = &evergreen_copy_blit,
682
	.copy = &evergreen_copy_blit,
677
	.get_engine_clock = &radeon_atom_get_engine_clock,
683
	.get_engine_clock = &radeon_atom_get_engine_clock,
678
	.set_engine_clock = &radeon_atom_set_engine_clock,
684
	.set_engine_clock = &radeon_atom_set_engine_clock,
679
	.get_memory_clock = NULL,
685
	.get_memory_clock = NULL,
680
	.set_memory_clock = NULL,
686
	.set_memory_clock = NULL,
681
	.get_pcie_lanes = NULL,
687
	.get_pcie_lanes = NULL,
682
	.set_pcie_lanes = NULL,
688
	.set_pcie_lanes = NULL,
683
	.set_clock_gating = NULL,
689
	.set_clock_gating = NULL,
684
	.set_surface_reg = r600_set_surface_reg,
690
	.set_surface_reg = r600_set_surface_reg,
685
	.clear_surface_reg = r600_clear_surface_reg,
691
	.clear_surface_reg = r600_clear_surface_reg,
686
	.bandwidth_update = &evergreen_bandwidth_update,
692
	.bandwidth_update = &evergreen_bandwidth_update,
687
	.hpd_init = &evergreen_hpd_init,
693
	.hpd_init = &evergreen_hpd_init,
688
	.hpd_fini = &evergreen_hpd_fini,
694
	.hpd_fini = &evergreen_hpd_fini,
689
	.hpd_sense = &evergreen_hpd_sense,
695
	.hpd_sense = &evergreen_hpd_sense,
690
	.hpd_set_polarity = &evergreen_hpd_set_polarity,
696
	.hpd_set_polarity = &evergreen_hpd_set_polarity,
691
};
697
};
692
 
698
 
693
static struct radeon_asic btc_asic = {
699
static struct radeon_asic btc_asic = {
694
	.init = &evergreen_init,
700
	.init = &evergreen_init,
695
//	.fini = &evergreen_fini,
701
//	.fini = &evergreen_fini,
696
//	.suspend = &evergreen_suspend,
702
//	.suspend = &evergreen_suspend,
697
//	.resume = &evergreen_resume,
703
//	.resume = &evergreen_resume,
698
	.cp_commit = &r600_cp_commit,
704
	.cp_commit = &r600_cp_commit,
699
	.asic_reset = &evergreen_asic_reset,
705
	.asic_reset = &evergreen_asic_reset,
700
	.vga_set_state = &r600_vga_set_state,
706
	.vga_set_state = &r600_vga_set_state,
701
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
707
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
702
	.gart_set_page = &rs600_gart_set_page,
708
	.gart_set_page = &rs600_gart_set_page,
703
	.ring_test = &r600_ring_test,
709
	.ring_test = &r600_ring_test,
704
	.ring_ib_execute = &evergreen_ring_ib_execute,
710
	.ring_ib_execute = &evergreen_ring_ib_execute,
705
	.irq_set = &evergreen_irq_set,
711
	.irq_set = &evergreen_irq_set,
706
	.irq_process = &evergreen_irq_process,
712
	.irq_process = &evergreen_irq_process,
707
	.fence_ring_emit = &r600_fence_ring_emit,
713
	.fence_ring_emit = &r600_fence_ring_emit,
708
//	.cs_parse = &evergreen_cs_parse,
714
//	.cs_parse = &evergreen_cs_parse,
709
	.copy_blit = &evergreen_copy_blit,
715
	.copy_blit = &evergreen_copy_blit,
710
	.copy_dma = &evergreen_copy_blit,
716
	.copy_dma = NULL,
711
	.copy = &evergreen_copy_blit,
717
	.copy = &evergreen_copy_blit,
712
	.get_engine_clock = &radeon_atom_get_engine_clock,
718
	.get_engine_clock = &radeon_atom_get_engine_clock,
713
	.set_engine_clock = &radeon_atom_set_engine_clock,
719
	.set_engine_clock = &radeon_atom_set_engine_clock,
714
	.get_memory_clock = &radeon_atom_get_memory_clock,
720
	.get_memory_clock = &radeon_atom_get_memory_clock,
715
	.set_memory_clock = &radeon_atom_set_memory_clock,
721
	.set_memory_clock = &radeon_atom_set_memory_clock,
716
	.get_pcie_lanes = NULL,
722
	.get_pcie_lanes = NULL,
717
	.set_pcie_lanes = NULL,
723
	.set_pcie_lanes = NULL,
718
	.set_clock_gating = NULL,
724
	.set_clock_gating = NULL,
719
	.set_surface_reg = r600_set_surface_reg,
725
	.set_surface_reg = r600_set_surface_reg,
720
	.clear_surface_reg = r600_clear_surface_reg,
726
	.clear_surface_reg = r600_clear_surface_reg,
721
	.bandwidth_update = &evergreen_bandwidth_update,
727
	.bandwidth_update = &evergreen_bandwidth_update,
722
	.hpd_init = &evergreen_hpd_init,
728
	.hpd_init = &evergreen_hpd_init,
723
	.hpd_fini = &evergreen_hpd_fini,
729
	.hpd_fini = &evergreen_hpd_fini,
724
	.hpd_sense = &evergreen_hpd_sense,
730
	.hpd_sense = &evergreen_hpd_sense,
725
	.hpd_set_polarity = &evergreen_hpd_set_polarity,
731
	.hpd_set_polarity = &evergreen_hpd_set_polarity,
726
};
732
};
727
 
733
 
728
static struct radeon_asic cayman_asic = {
734
static struct radeon_asic cayman_asic = {
729
	.init = &cayman_init,
735
	.init = &cayman_init,
730
//	.fini = &evergreen_fini,
736
//	.fini = &evergreen_fini,
731
//	.suspend = &evergreen_suspend,
737
//	.suspend = &evergreen_suspend,
732
//	.resume = &evergreen_resume,
738
//	.resume = &evergreen_resume,
733
	.cp_commit = &r600_cp_commit,
739
	.cp_commit = &r600_cp_commit,
734
	.asic_reset = &cayman_asic_reset,
740
	.asic_reset = &cayman_asic_reset,
735
	.vga_set_state = &r600_vga_set_state,
741
	.vga_set_state = &r600_vga_set_state,
736
	.gart_tlb_flush = &cayman_pcie_gart_tlb_flush,
742
	.gart_tlb_flush = &cayman_pcie_gart_tlb_flush,
737
	.gart_set_page = &rs600_gart_set_page,
743
	.gart_set_page = &rs600_gart_set_page,
738
	.ring_test = &r600_ring_test,
744
	.ring_test = &r600_ring_test,
739
	.ring_ib_execute = &evergreen_ring_ib_execute,
745
	.ring_ib_execute = &evergreen_ring_ib_execute,
740
	.irq_set = &evergreen_irq_set,
746
	.irq_set = &evergreen_irq_set,
741
	.irq_process = &evergreen_irq_process,
747
	.irq_process = &evergreen_irq_process,
742
	.fence_ring_emit = &r600_fence_ring_emit,
748
	.fence_ring_emit = &r600_fence_ring_emit,
743
//	.cs_parse = &evergreen_cs_parse,
749
//	.cs_parse = &evergreen_cs_parse,
744
	.copy_blit = &evergreen_copy_blit,
750
	.copy_blit = &evergreen_copy_blit,
745
	.copy_dma = &evergreen_copy_blit,
751
	.copy_dma = NULL,
746
	.copy = &evergreen_copy_blit,
752
	.copy = &evergreen_copy_blit,
747
	.get_engine_clock = &radeon_atom_get_engine_clock,
753
	.get_engine_clock = &radeon_atom_get_engine_clock,
748
	.set_engine_clock = &radeon_atom_set_engine_clock,
754
	.set_engine_clock = &radeon_atom_set_engine_clock,
749
	.get_memory_clock = &radeon_atom_get_memory_clock,
755
	.get_memory_clock = &radeon_atom_get_memory_clock,
750
	.set_memory_clock = &radeon_atom_set_memory_clock,
756
	.set_memory_clock = &radeon_atom_set_memory_clock,
751
	.get_pcie_lanes = NULL,
757
	.get_pcie_lanes = NULL,
752
	.set_pcie_lanes = NULL,
758
	.set_pcie_lanes = NULL,
753
	.set_clock_gating = NULL,
759
	.set_clock_gating = NULL,
754
	.set_surface_reg = r600_set_surface_reg,
760
	.set_surface_reg = r600_set_surface_reg,
755
	.clear_surface_reg = r600_clear_surface_reg,
761
	.clear_surface_reg = r600_clear_surface_reg,
756
	.bandwidth_update = &evergreen_bandwidth_update,
762
	.bandwidth_update = &evergreen_bandwidth_update,
757
	.hpd_init = &evergreen_hpd_init,
763
	.hpd_init = &evergreen_hpd_init,
758
	.hpd_fini = &evergreen_hpd_fini,
764
	.hpd_fini = &evergreen_hpd_fini,
759
	.hpd_sense = &evergreen_hpd_sense,
765
	.hpd_sense = &evergreen_hpd_sense,
760
	.hpd_set_polarity = &evergreen_hpd_set_polarity,
766
	.hpd_set_polarity = &evergreen_hpd_set_polarity,
761
};
767
};
762
 
768
 
763
int radeon_asic_init(struct radeon_device *rdev)
769
int radeon_asic_init(struct radeon_device *rdev)
764
{
770
{
765
	radeon_register_accessor_init(rdev);
771
	radeon_register_accessor_init(rdev);
766
 
772
 
767
	/* set the number of crtcs */
773
	/* set the number of crtcs */
768
	if (rdev->flags & RADEON_SINGLE_CRTC)
774
	if (rdev->flags & RADEON_SINGLE_CRTC)
769
		rdev->num_crtc = 1;
775
		rdev->num_crtc = 1;
770
	else
776
	else
771
		rdev->num_crtc = 2;
777
		rdev->num_crtc = 2;
772
 
778
 
773
	switch (rdev->family) {
779
	switch (rdev->family) {
774
	case CHIP_R100:
780
	case CHIP_R100:
775
	case CHIP_RV100:
781
	case CHIP_RV100:
776
	case CHIP_RS100:
782
	case CHIP_RS100:
777
	case CHIP_RV200:
783
	case CHIP_RV200:
778
	case CHIP_RS200:
784
	case CHIP_RS200:
779
		rdev->asic = &r100_asic;
785
		rdev->asic = &r100_asic;
780
		break;
786
		break;
781
	case CHIP_R200:
787
	case CHIP_R200:
782
	case CHIP_RV250:
788
	case CHIP_RV250:
783
	case CHIP_RS300:
789
	case CHIP_RS300:
784
	case CHIP_RV280:
790
	case CHIP_RV280:
785
		rdev->asic = &r200_asic;
791
		rdev->asic = &r200_asic;
786
		break;
792
		break;
787
	case CHIP_R300:
793
	case CHIP_R300:
788
	case CHIP_R350:
794
	case CHIP_R350:
789
	case CHIP_RV350:
795
	case CHIP_RV350:
790
	case CHIP_RV380:
796
	case CHIP_RV380:
791
		if (rdev->flags & RADEON_IS_PCIE)
797
		if (rdev->flags & RADEON_IS_PCIE)
792
			rdev->asic = &r300_asic_pcie;
798
			rdev->asic = &r300_asic_pcie;
793
		else
799
		else
794
			rdev->asic = &r300_asic;
800
			rdev->asic = &r300_asic;
795
		break;
801
		break;
796
	case CHIP_R420:
802
	case CHIP_R420:
797
	case CHIP_R423:
803
	case CHIP_R423:
798
	case CHIP_RV410:
804
	case CHIP_RV410:
799
		rdev->asic = &r420_asic;
805
		rdev->asic = &r420_asic;
800
		/* handle macs */
806
		/* handle macs */
801
		if (rdev->bios == NULL) {
807
		if (rdev->bios == NULL) {
802
			rdev->asic->get_engine_clock = &radeon_legacy_get_engine_clock;
808
			rdev->asic->get_engine_clock = &radeon_legacy_get_engine_clock;
803
			rdev->asic->set_engine_clock = &radeon_legacy_set_engine_clock;
809
			rdev->asic->set_engine_clock = &radeon_legacy_set_engine_clock;
804
			rdev->asic->get_memory_clock = &radeon_legacy_get_memory_clock;
810
			rdev->asic->get_memory_clock = &radeon_legacy_get_memory_clock;
805
			rdev->asic->set_memory_clock = NULL;
811
			rdev->asic->set_memory_clock = NULL;
806
		}
812
		}
807
		break;
813
		break;
808
	case CHIP_RS400:
814
	case CHIP_RS400:
809
	case CHIP_RS480:
815
	case CHIP_RS480:
810
		rdev->asic = &rs400_asic;
816
		rdev->asic = &rs400_asic;
811
		break;
817
		break;
812
	case CHIP_RS600:
818
	case CHIP_RS600:
813
		rdev->asic = &rs600_asic;
819
		rdev->asic = &rs600_asic;
814
		break;
820
		break;
815
	case CHIP_RS690:
821
	case CHIP_RS690:
816
	case CHIP_RS740:
822
	case CHIP_RS740:
817
		rdev->asic = &rs690_asic;
823
		rdev->asic = &rs690_asic;
818
		break;
824
		break;
819
	case CHIP_RV515:
825
	case CHIP_RV515:
820
		rdev->asic = &rv515_asic;
826
		rdev->asic = &rv515_asic;
821
		break;
827
		break;
822
	case CHIP_R520:
828
	case CHIP_R520:
823
	case CHIP_RV530:
829
	case CHIP_RV530:
824
	case CHIP_RV560:
830
	case CHIP_RV560:
825
	case CHIP_RV570:
831
	case CHIP_RV570:
826
	case CHIP_R580:
832
	case CHIP_R580:
827
		rdev->asic = &r520_asic;
833
		rdev->asic = &r520_asic;
828
		break;
834
		break;
829
	case CHIP_R600:
835
	case CHIP_R600:
830
	case CHIP_RV610:
836
	case CHIP_RV610:
831
	case CHIP_RV630:
837
	case CHIP_RV630:
832
	case CHIP_RV620:
838
	case CHIP_RV620:
833
	case CHIP_RV635:
839
	case CHIP_RV635:
834
	case CHIP_RV670:
840
	case CHIP_RV670:
835
		rdev->asic = &r600_asic;
841
		rdev->asic = &r600_asic;
836
		break;
842
		break;
837
	case CHIP_RS780:
843
	case CHIP_RS780:
838
	case CHIP_RS880:
844
	case CHIP_RS880:
839
		rdev->asic = &rs780_asic;
845
		rdev->asic = &rs780_asic;
840
		break;
846
		break;
841
	case CHIP_RV770:
847
	case CHIP_RV770:
842
	case CHIP_RV730:
848
	case CHIP_RV730:
843
	case CHIP_RV710:
849
	case CHIP_RV710:
844
	case CHIP_RV740:
850
	case CHIP_RV740:
845
		rdev->asic = &rv770_asic;
851
		rdev->asic = &rv770_asic;
846
		break;
852
		break;
847
	case CHIP_CEDAR:
853
	case CHIP_CEDAR:
848
	case CHIP_REDWOOD:
854
	case CHIP_REDWOOD:
849
	case CHIP_JUNIPER:
855
	case CHIP_JUNIPER:
850
	case CHIP_CYPRESS:
856
	case CHIP_CYPRESS:
851
	case CHIP_HEMLOCK:
857
	case CHIP_HEMLOCK:
852
		/* set num crtcs */
858
		/* set num crtcs */
853
		if (rdev->family == CHIP_CEDAR)
859
		if (rdev->family == CHIP_CEDAR)
854
			rdev->num_crtc = 4;
860
			rdev->num_crtc = 4;
855
		else
861
		else
856
			rdev->num_crtc = 6;
862
			rdev->num_crtc = 6;
857
		rdev->asic = &evergreen_asic;
863
		rdev->asic = &evergreen_asic;
858
		break;
864
		break;
859
	case CHIP_PALM:
865
	case CHIP_PALM:
860
	case CHIP_SUMO:
866
	case CHIP_SUMO:
861
	case CHIP_SUMO2:
867
	case CHIP_SUMO2:
862
		rdev->asic = &sumo_asic;
868
		rdev->asic = &sumo_asic;
863
		break;
869
		break;
864
	case CHIP_BARTS:
870
	case CHIP_BARTS:
865
	case CHIP_TURKS:
871
	case CHIP_TURKS:
866
	case CHIP_CAICOS:
872
	case CHIP_CAICOS:
867
		/* set num crtcs */
873
		/* set num crtcs */
868
		if (rdev->family == CHIP_CAICOS)
874
		if (rdev->family == CHIP_CAICOS)
869
			rdev->num_crtc = 4;
875
			rdev->num_crtc = 4;
870
		else
876
		else
871
			rdev->num_crtc = 6;
877
			rdev->num_crtc = 6;
872
		rdev->asic = &btc_asic;
878
		rdev->asic = &btc_asic;
873
		break;
879
		break;
874
	case CHIP_CAYMAN:
880
	case CHIP_CAYMAN:
875
		rdev->asic = &cayman_asic;
881
		rdev->asic = &cayman_asic;
876
		/* set num crtcs */
882
		/* set num crtcs */
877
		rdev->num_crtc = 6;
883
		rdev->num_crtc = 6;
878
		break;
884
		break;
879
	default:
885
	default:
880
		/* FIXME: not supported yet */
886
		/* FIXME: not supported yet */
881
		return -EINVAL;
887
		return -EINVAL;
882
	}
888
	}
883
 
889
 
884
	if (rdev->flags & RADEON_IS_IGP) {
890
	if (rdev->flags & RADEON_IS_IGP) {
885
		rdev->asic->get_memory_clock = NULL;
891
		rdev->asic->get_memory_clock = NULL;
886
		rdev->asic->set_memory_clock = NULL;
892
		rdev->asic->set_memory_clock = NULL;
887
	}
893
	}
888
 
894
 
889
	return 0;
895
	return 0;
890
}
896
}