}
 EXPORT_SYMBOL_GPL(dcr_map);
 
-void dcr_unmap(dcr_host_t host, unsigned int dcr_n, unsigned int dcr_c)
+void dcr_unmap(dcr_host_t host, unsigned int dcr_c)
 {
        dcr_host_t h = host;
 
        if (h.token == NULL)
                return;
-       h.token += dcr_n * h.stride;
+       h.token += host.base * h.stride;
        iounmap(h.token);
        h.token = NULL;
 }
 
  fail2:
        dma_free_coherent(&ofdev->dev, bd_size, mal->bd_virt, mal->bd_dma);
  fail_unmap:
-       dcr_unmap(mal->dcr_host, dcr_base, 0x100);
+       dcr_unmap(mal->dcr_host, 0x100);
  fail:
        kfree(mal);
 
 
 
 extern dcr_host_t dcr_map(struct device_node *dev, unsigned int dcr_n,
                          unsigned int dcr_c);
-extern void dcr_unmap(dcr_host_t host, unsigned int dcr_n, unsigned int dcr_c);
+extern void dcr_unmap(dcr_host_t host, unsigned int dcr_c);
 
 static inline u32 dcr_read(dcr_host_t host, unsigned int dcr_n)
 {
 
 #define DCR_MAP_OK(host)       (1)
 
 #define dcr_map(dev, dcr_n, dcr_c)     ((dcr_host_t){ .base = (dcr_n) })
-#define dcr_unmap(host, dcr_n, dcr_c)  do {} while (0)
+#define dcr_unmap(host, dcr_c)         do {} while (0)
 #define dcr_read(host, dcr_n)          mfdcr(dcr_n + host.base)
 #define dcr_write(host, dcr_n, value)  mtdcr(dcr_n + host.base, value)