- if (obj)
- obj->release();
- return (mapper);
-}
-
-ppnum_t IOMapper::iovmAllocDMACommand(IODMACommand * command, IOItemCount pageCount)
-{
- return (0);
-}
-
-void IOMapper::iovmFreeDMACommand(IODMACommand * command,
- ppnum_t addr, IOItemCount pageCount)
-{
-}
-
-ppnum_t IOMapper::iovmMapMemory(
- OSObject * memory, // dma command or iomd
- ppnum_t offsetPage,
- ppnum_t pageCount,
- uint32_t options,
- upl_page_info_t * pageList,
- const IODMAMapSpecification * mapSpecification)
-{
- return (0);
-}
-
-void IOMapper::iovmInsert(ppnum_t addr, IOItemCount offset,
- ppnum_t *pageList, IOItemCount pageCount)
-{
- while (pageCount--)
- iovmInsert(addr, offset++, *pageList++);
-}
-
-void IOMapper::iovmInsert(ppnum_t addr, IOItemCount offset,
- upl_page_info_t *pageList, IOItemCount pageCount)
-{
- for (IOItemCount i = 0; i < pageCount; i++)
- iovmInsert(addr, offset + i, pageList[i].phys_addr);
-}
-
-OSData * IOMapper::
-NewARTTable(IOByteCount size, void ** virtAddrP, ppnum_t *physAddrP)
-{
- if (!virtAddrP || !physAddrP)
- return 0;
-
- kern_return_t kr;
- vm_address_t address;
-
- size = round_page(size);
- kr = kmem_alloc_contig(kernel_map, &address, size, PAGE_MASK, 0 /*max_pnum*/, 0 /*pnum_mask*/, false);
- if (kr)
- return 0;
-
- ppnum_t pagenum = pmap_find_phys(kernel_pmap, (addr64_t) address);
- if (pagenum)
- *physAddrP = pagenum;
- else {
- FreeARTTable((OSData *) address, size);
- address = 0;
- }
-
- *virtAddrP = (void *) address;
-
- return (OSData *) address;
-}
-
-void IOMapper::FreeARTTable(OSData *artHandle, IOByteCount size)
-{
- vm_address_t address = (vm_address_t) artHandle;
-
- size = round_page(size);
- kmem_free(kernel_map, address, size); // Just panic if address is 0
-}
-
-bool IOMapper::getBypassMask(addr64_t *maskP) const
-{
- return false;
+ if (obj) {
+ obj->release();
+ }
+found:
+ if (mapper) {
+ if (!mapper->fAllocName) {
+ char name[MACH_ZONE_NAME_MAX_LEN];
+ char kmodname[KMOD_MAX_NAME];
+ vm_tag_t tag;
+ uint32_t kmodid;
+
+ tag = IOMemoryTag(kernel_map);
+ if (!(kmodid = vm_tag_get_kext(tag, &kmodname[0], KMOD_MAX_NAME))) {
+ snprintf(kmodname, sizeof(kmodname), "%d", tag);
+ }
+ snprintf(name, sizeof(name), "%s.DMA.%s", kmodname, device->getName());
+ mapper->fAllocName = kern_allocation_name_allocate(name, 16);
+ }
+ }
+
+ return mapper;