Lines Matching refs:c
391 static void _dma_dump_chunk (const struct dma_chunk* c, const char* func, in _dma_dump_chunk() argument
395 c->region->dev->bus_id, c->region->dev->dev_id); in _dma_dump_chunk()
396 DBG("%s:%d: r.bus_addr %lxh\n", func, line, c->region->bus_addr); in _dma_dump_chunk()
397 DBG("%s:%d: r.page_size %u\n", func, line, c->region->page_size); in _dma_dump_chunk()
398 DBG("%s:%d: r.len %lxh\n", func, line, c->region->len); in _dma_dump_chunk()
399 DBG("%s:%d: r.offset %lxh\n", func, line, c->region->offset); in _dma_dump_chunk()
400 DBG("%s:%d: c.lpar_addr %lxh\n", func, line, c->lpar_addr); in _dma_dump_chunk()
401 DBG("%s:%d: c.bus_addr %lxh\n", func, line, c->bus_addr); in _dma_dump_chunk()
402 DBG("%s:%d: c.len %lxh\n", func, line, c->len); in _dma_dump_chunk()
408 struct dma_chunk *c; in dma_find_chunk() local
413 list_for_each_entry(c, &r->chunk_list.head, link) { in dma_find_chunk()
415 if (aligned_bus >= c->bus_addr && in dma_find_chunk()
416 aligned_bus + aligned_len <= c->bus_addr + c->len) in dma_find_chunk()
417 return c; in dma_find_chunk()
420 if (aligned_bus + aligned_len <= c->bus_addr) in dma_find_chunk()
424 if (aligned_bus >= c->bus_addr + c->len) in dma_find_chunk()
428 dma_dump_chunk(c); in dma_find_chunk()
437 struct dma_chunk *c; in dma_find_chunk_lpar() local
442 list_for_each_entry(c, &r->chunk_list.head, link) { in dma_find_chunk_lpar()
444 if (c->lpar_addr <= aligned_lpar && in dma_find_chunk_lpar()
445 aligned_lpar < c->lpar_addr + c->len) { in dma_find_chunk_lpar()
446 if (aligned_lpar + aligned_len <= c->lpar_addr + c->len) in dma_find_chunk_lpar()
447 return c; in dma_find_chunk_lpar()
449 dma_dump_chunk(c); in dma_find_chunk_lpar()
454 if (aligned_lpar + aligned_len <= c->lpar_addr) { in dma_find_chunk_lpar()
458 if (c->lpar_addr + c->len <= aligned_lpar) { in dma_find_chunk_lpar()
465 static int dma_sb_free_chunk(struct dma_chunk *c) in dma_sb_free_chunk() argument
469 if (c->bus_addr) { in dma_sb_free_chunk()
470 result = lv1_unmap_device_dma_region(c->region->dev->bus_id, in dma_sb_free_chunk()
471 c->region->dev->dev_id, c->bus_addr, c->len); in dma_sb_free_chunk()
475 kfree(c); in dma_sb_free_chunk()
479 static int dma_ioc0_free_chunk(struct dma_chunk *c) in dma_ioc0_free_chunk() argument
484 struct ps3_dma_region *r = c->region; in dma_ioc0_free_chunk()
487 for (iopage = 0; iopage < (c->len >> r->page_size); iopage++) { in dma_ioc0_free_chunk()
491 c->bus_addr + offset, in dma_ioc0_free_chunk()
492 c->lpar_addr + offset, in dma_ioc0_free_chunk()
496 c->bus_addr + offset, in dma_ioc0_free_chunk()
497 c->lpar_addr + offset, in dma_ioc0_free_chunk()
505 kfree(c); in dma_ioc0_free_chunk()
525 struct dma_chunk *c; in dma_sb_map_pages() local
527 c = kzalloc(sizeof(struct dma_chunk), GFP_ATOMIC); in dma_sb_map_pages()
529 if (!c) { in dma_sb_map_pages()
534 c->region = r; in dma_sb_map_pages()
535 c->lpar_addr = ps3_mm_phys_to_lpar(phys_addr); in dma_sb_map_pages()
536 c->bus_addr = dma_sb_lpar_to_bus(r, c->lpar_addr); in dma_sb_map_pages()
537 c->len = len; in dma_sb_map_pages()
540 result = lv1_map_device_dma_region(c->region->dev->bus_id, in dma_sb_map_pages()
541 c->region->dev->dev_id, c->lpar_addr, in dma_sb_map_pages()
542 c->bus_addr, c->len, iopte_flag); in dma_sb_map_pages()
549 list_add(&c->link, &r->chunk_list.head); in dma_sb_map_pages()
551 *c_out = c; in dma_sb_map_pages()
555 kfree(c); in dma_sb_map_pages()
567 struct dma_chunk *c, *last; in dma_ioc0_map_pages() local
573 c = kzalloc(sizeof(struct dma_chunk), GFP_ATOMIC); in dma_ioc0_map_pages()
575 if (!c) { in dma_ioc0_map_pages()
580 c->region = r; in dma_ioc0_map_pages()
581 c->len = len; in dma_ioc0_map_pages()
582 c->lpar_addr = ps3_mm_phys_to_lpar(phys_addr); in dma_ioc0_map_pages()
586 c->bus_addr = r->bus_addr; in dma_ioc0_map_pages()
591 c->bus_addr = last->bus_addr + last->len; in dma_ioc0_map_pages()
605 c->bus_addr + offset, in dma_ioc0_map_pages()
606 c->lpar_addr + offset, in dma_ioc0_map_pages()
615 iopage, c->bus_addr + offset, c->lpar_addr + offset, in dma_ioc0_map_pages()
620 list_add(&c->link, &r->chunk_list.head); in dma_ioc0_map_pages()
622 *c_out = c; in dma_ioc0_map_pages()
629 c->bus_addr + offset, in dma_ioc0_map_pages()
630 c->lpar_addr + offset, in dma_ioc0_map_pages()
634 kfree(c); in dma_ioc0_map_pages()
721 struct dma_chunk *c; in dma_sb_region_free() local
732 list_for_each_entry_safe(c, tmp, &r->chunk_list.head, link) { in dma_sb_region_free()
733 list_del(&c->link); in dma_sb_region_free()
734 dma_sb_free_chunk(c); in dma_sb_region_free()
752 struct dma_chunk *c, *n; in dma_ioc0_region_free() local
755 list_for_each_entry_safe(c, n, &r->chunk_list.head, link) { in dma_ioc0_region_free()
756 list_del(&c->link); in dma_ioc0_region_free()
757 dma_ioc0_free_chunk(c); in dma_ioc0_region_free()
789 struct dma_chunk *c; in dma_sb_map_area() local
812 c = dma_find_chunk(r, *bus_addr, len); in dma_sb_map_area()
814 if (c) { in dma_sb_map_area()
816 dma_dump_chunk(c); in dma_sb_map_area()
817 c->usage_count++; in dma_sb_map_area()
822 result = dma_sb_map_pages(r, aligned_phys, aligned_len, &c, iopte_flag); in dma_sb_map_area()
832 c->usage_count = 1; in dma_sb_map_area()
844 struct dma_chunk *c; in dma_ioc0_map_area() local
857 c = dma_find_chunk_lpar(r, ps3_mm_phys_to_lpar(phys_addr), len); in dma_ioc0_map_area()
859 if (c) { in dma_ioc0_map_area()
862 *bus_addr = c->bus_addr + phys_addr - aligned_phys; in dma_ioc0_map_area()
863 c->usage_count++; in dma_ioc0_map_area()
868 result = dma_ioc0_map_pages(r, aligned_phys, aligned_len, &c, in dma_ioc0_map_area()
878 *bus_addr = c->bus_addr + phys_addr - aligned_phys; in dma_ioc0_map_area()
881 c->usage_count = 1; in dma_ioc0_map_area()
900 struct dma_chunk *c; in dma_sb_unmap_area() local
903 c = dma_find_chunk(r, bus_addr, len); in dma_sb_unmap_area()
905 if (!c) { in dma_sb_unmap_area()
921 c->usage_count--; in dma_sb_unmap_area()
923 if (!c->usage_count) { in dma_sb_unmap_area()
924 list_del(&c->link); in dma_sb_unmap_area()
925 dma_sb_free_chunk(c); in dma_sb_unmap_area()
936 struct dma_chunk *c; in dma_ioc0_unmap_area() local
940 c = dma_find_chunk(r, bus_addr, len); in dma_ioc0_unmap_area()
942 if (!c) { in dma_ioc0_unmap_area()
959 c->usage_count--; in dma_ioc0_unmap_area()
961 if (!c->usage_count) { in dma_ioc0_unmap_area()
962 list_del(&c->link); in dma_ioc0_unmap_area()
963 dma_ioc0_free_chunk(c); in dma_ioc0_unmap_area()