}
 
 int fsl_map_inb_mem(struct rio_mport *mport, dma_addr_t lstart,
-       u64 rstart, u32 size, u32 flags)
+       u64 rstart, u64 size, u32 flags)
 {
        struct rio_priv *priv = mport->priv;
        u32 base_size;
        u32 riwar;
        int i;
 
-       if ((size & (size - 1)) != 0)
+       if ((size & (size - 1)) != 0 || size > 0x400000000ULL)
                return -EINVAL;
 
        base_size_log = ilog2(size);
 
  * from rstart to lstart.
  */
 static int tsi721_rio_map_inb_mem(struct rio_mport *mport, dma_addr_t lstart,
-               u64 rstart, u32 size, u32 flags)
+               u64 rstart, u64 size, u32 flags)
 {
        struct tsi721_device *priv = mport->priv;
        int i, avail = -1;
        struct tsi721_ib_win_mapping *map = NULL;
        int ret = -EBUSY;
 
+       /* Max IBW size supported by HW is 16GB */
+       if (size > 0x400000000UL)
+               return -EINVAL;
+
        if (direct) {
                /* Calculate minimal acceptable window size and base address */
 
                ibw_start = lstart & ~(ibw_size - 1);
 
                tsi_debug(IBW, &priv->pdev->dev,
-                       "Direct (RIO_0x%llx -> PCIe_%pad), size=0x%x, ibw_start = 0x%llx",
+                       "Direct (RIO_0x%llx -> PCIe_%pad), size=0x%llx, ibw_start = 0x%llx",
                        rstart, &lstart, size, ibw_start);
 
                while ((lstart + size) > (ibw_start + ibw_size)) {
                        ibw_size *= 2;
                        ibw_start = lstart & ~(ibw_size - 1);
-                       if (ibw_size > 0x80000000) { /* Limit max size to 2GB */
+                       /* Check for crossing IBW max size 16GB */
+                       if (ibw_size > 0x400000000UL)
                                return -EBUSY;
-                       }
                }
 
                loc_start = ibw_start;
 
        } else {
                tsi_debug(IBW, &priv->pdev->dev,
-                       "Translated (RIO_0x%llx -> PCIe_%pad), size=0x%x",
+                       "Translated (RIO_0x%llx -> PCIe_%pad), size=0x%llx",
                        rstart, &lstart, size);
 
                if (!is_power_of_2(size) || size < 0x1000 ||
 
        int (*add_inb_buffer)(struct rio_mport *mport, int mbox, void *buf);
        void *(*get_inb_message)(struct rio_mport *mport, int mbox);
        int (*map_inb)(struct rio_mport *mport, dma_addr_t lstart,
-                       u64 rstart, u32 size, u32 flags);
+                       u64 rstart, u64 size, u32 flags);
        void (*unmap_inb)(struct rio_mport *mport, dma_addr_t lstart);
        int (*query_mport)(struct rio_mport *mport,
                           struct rio_mport_attr *attr);