aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r600_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/r600_cs.c')
-rw-r--r--drivers/gpu/drm/radeon/r600_cs.c95
1 files changed, 0 insertions, 95 deletions
diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
index acc1f99c84d9..2f36fa1576e0 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -2328,101 +2328,6 @@ int r600_cs_parse(struct radeon_cs_parser *p)
2328 return 0; 2328 return 0;
2329} 2329}
2330 2330
2331#ifdef CONFIG_DRM_RADEON_UMS
2332
2333/**
2334 * cs_parser_fini() - clean parser states
2335 * @parser: parser structure holding parsing context.
2336 * @error: error number
2337 *
2338 * If error is set than unvalidate buffer, otherwise just free memory
2339 * used by parsing context.
2340 **/
2341static void r600_cs_parser_fini(struct radeon_cs_parser *parser, int error)
2342{
2343 unsigned i;
2344
2345 kfree(parser->relocs);
2346 for (i = 0; i < parser->nchunks; i++)
2347 drm_free_large(parser->chunks[i].kdata);
2348 kfree(parser->chunks);
2349 kfree(parser->chunks_array);
2350}
2351
2352static int r600_cs_parser_relocs_legacy(struct radeon_cs_parser *p)
2353{
2354 if (p->chunk_relocs == NULL) {
2355 return 0;
2356 }
2357 p->relocs = kzalloc(sizeof(struct radeon_bo_list), GFP_KERNEL);
2358 if (p->relocs == NULL) {
2359 return -ENOMEM;
2360 }
2361 return 0;
2362}
2363
2364int r600_cs_legacy(struct drm_device *dev, void *data, struct drm_file *filp,
2365 unsigned family, u32 *ib, int *l)
2366{
2367 struct radeon_cs_parser parser;
2368 struct radeon_cs_chunk *ib_chunk;
2369 struct r600_cs_track *track;
2370 int r;
2371
2372 /* initialize tracker */
2373 track = kzalloc(sizeof(*track), GFP_KERNEL);
2374 if (track == NULL)
2375 return -ENOMEM;
2376 r600_cs_track_init(track);
2377 r600_cs_legacy_get_tiling_conf(dev, &track->npipes, &track->nbanks, &track->group_size);
2378 /* initialize parser */
2379 memset(&parser, 0, sizeof(struct radeon_cs_parser));
2380 parser.filp = filp;
2381 parser.dev = &dev->pdev->dev;
2382 parser.rdev = NULL;
2383 parser.family = family;
2384 parser.track = track;
2385 parser.ib.ptr = ib;
2386 r = radeon_cs_parser_init(&parser, data);
2387 if (r) {
2388 DRM_ERROR("Failed to initialize parser !\n");
2389 r600_cs_parser_fini(&parser, r);
2390 return r;
2391 }
2392 r = r600_cs_parser_relocs_legacy(&parser);
2393 if (r) {
2394 DRM_ERROR("Failed to parse relocation !\n");
2395 r600_cs_parser_fini(&parser, r);
2396 return r;
2397 }
2398 /* Copy the packet into the IB, the parser will read from the
2399 * input memory (cached) and write to the IB (which can be
2400 * uncached). */
2401 ib_chunk = parser.chunk_ib;
2402 parser.ib.length_dw = ib_chunk->length_dw;
2403 *l = parser.ib.length_dw;
2404 if (copy_from_user(ib, ib_chunk->user_ptr, ib_chunk->length_dw * 4)) {
2405 r = -EFAULT;
2406 r600_cs_parser_fini(&parser, r);
2407 return r;
2408 }
2409 r = r600_cs_parse(&parser);
2410 if (r) {
2411 DRM_ERROR("Invalid command stream !\n");
2412 r600_cs_parser_fini(&parser, r);
2413 return r;
2414 }
2415 r600_cs_parser_fini(&parser, r);
2416 return r;
2417}
2418
2419void r600_cs_legacy_init(void)
2420{
2421 r600_nomm = 1;
2422}
2423
2424#endif
2425
2426/* 2331/*
2427 * DMA 2332 * DMA
2428 */ 2333 */