diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r600_cs.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r600_cs.c | 95 |
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 | **/ | ||
2341 | static 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 | |||
2352 | static 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 | |||
2364 | int 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 | |||
2419 | void r600_cs_legacy_init(void) | ||
2420 | { | ||
2421 | r600_nomm = 1; | ||
2422 | } | ||
2423 | |||
2424 | #endif | ||
2425 | |||
2426 | /* | 2331 | /* |
2427 | * DMA | 2332 | * DMA |
2428 | */ | 2333 | */ |