Revision 5c4cbcf2 hw/spapr_iommu.c

b/hw/spapr_iommu.c
216 216
}
217 217

  
218 218
int spapr_dma_dt(void *fdt, int node_off, const char *propname,
219
                 DMAContext *dma)
219
                 uint32_t liobn, uint64_t window, uint32_t size)
220 220
{
221
    if (dma) {
222
        sPAPRTCETable *tcet = DO_UPCAST(sPAPRTCETable, dma, dma);
223
        uint32_t dma_prop[] = {cpu_to_be32(tcet->liobn),
224
                               0, 0,
225
                               0, cpu_to_be32(tcet->window_size)};
226
        int ret;
227

  
228
        ret = fdt_setprop_cell(fdt, node_off, "ibm,#dma-address-cells", 2);
229
        if (ret < 0) {
230
            return ret;
231
        }
221
    uint32_t dma_prop[5];
222
    int ret;
223

  
224
    dma_prop[0] = cpu_to_be32(liobn);
225
    dma_prop[1] = cpu_to_be32(window >> 32);
226
    dma_prop[2] = cpu_to_be32(window & 0xFFFFFFFF);
227
    dma_prop[3] = 0; /* window size is 32 bits */
228
    dma_prop[4] = cpu_to_be32(size);
229

  
230
    ret = fdt_setprop_cell(fdt, node_off, "ibm,#dma-address-cells", 2);
231
    if (ret < 0) {
232
        return ret;
233
    }
232 234

  
233
        ret = fdt_setprop_cell(fdt, node_off, "ibm,#dma-size-cells", 2);
234
        if (ret < 0) {
235
            return ret;
236
        }
235
    ret = fdt_setprop_cell(fdt, node_off, "ibm,#dma-size-cells", 2);
236
    if (ret < 0) {
237
        return ret;
238
    }
237 239

  
238
        ret = fdt_setprop(fdt, node_off, propname, dma_prop,
239
                          sizeof(dma_prop));
240
        if (ret < 0) {
241
            return ret;
242
        }
240
    ret = fdt_setprop(fdt, node_off, propname, dma_prop, sizeof(dma_prop));
241
    if (ret < 0) {
242
        return ret;
243 243
    }
244 244

  
245 245
    return 0;
246 246
}
247

  
248
int spapr_tcet_dma_dt(void *fdt, int node_off, const char *propname,
249
                      DMAContext *iommu)
250
{
251
    if (!iommu) {
252
        return 0;
253
    }
254

  
255
    if (iommu->translate == spapr_tce_translate) {
256
        sPAPRTCETable *tcet = DO_UPCAST(sPAPRTCETable, dma, iommu);
257
        return spapr_dma_dt(fdt, node_off, propname,
258
                tcet->liobn, 0, tcet->window_size);
259
    }
260

  
261
    return -1;
262
}

Also available in: Unified diff