/alps/pcitool

To get this branch, use:
bzr branch http://suren.me/webbzr/alps/pcitool

« back to all changes in this revision

Viewing changes to pcilib/kmem.c

  • Committer: Suren A. Chilingaryan
  • Date: 2015-11-20 17:52:51 UTC
  • Revision ID: csa@suren.me-20151120175251-l431odptssvzxelb
Fix reading non DMA-able kernel pages using pcitool

Show diffs side-by-side

added added

removed removed

Lines of Context:
276
276
        memcpy(&kbuf->buf.addr, &kbuf->buf.blocks[0], sizeof(pcilib_kmem_addr_t));
277
277
    }
278
278
 
 
279
    kbuf->buf.type = type;
 
280
    kbuf->buf.use = use;
279
281
    kbuf->buf.reused = reused|(persistent?PCILIB_KMEM_REUSE_PERSISTENT:0)|(hardware?PCILIB_KMEM_REUSE_HARDWARE:0);
280
282
 
281
283
    kbuf->prev = NULL;
331
333
    kmem_sync_t ks;
332
334
    pcilib_kmem_list_t *kbuf = (pcilib_kmem_list_t*)k;
333
335
 
334
 
    ks.dir = dir;
335
 
    ks.handle.handle_id = kbuf->buf.blocks[block].handle_id;
336
 
    ks.handle.pa = kbuf->buf.blocks[block].pa;
337
 
    ret = ioctl(ctx->handle, PCIDRIVER_IOC_KMEM_SYNC, &ks);
338
 
    if (ret) {
339
 
        pcilib_error("PCIDRIVER_IOC_KMEM_SYNC ioctl have failed");
340
 
        return PCILIB_ERROR_FAILED;
 
336
    switch (kbuf->buf.type) {
 
337
      case PCILIB_KMEM_TYPE_DMA_S2C_PAGE:
 
338
      case PCILIB_KMEM_TYPE_DMA_C2S_PAGE:
 
339
      case PCILIB_KMEM_TYPE_REGION_S2C:
 
340
      case PCILIB_KMEM_TYPE_REGION_C2S:
 
341
        ks.dir = dir;
 
342
        ks.handle.handle_id = kbuf->buf.blocks[block].handle_id;
 
343
        ks.handle.pa = kbuf->buf.blocks[block].pa;
 
344
        
 
345
        ret = ioctl(ctx->handle, PCIDRIVER_IOC_KMEM_SYNC, &ks);
 
346
        if (ret) {
 
347
            pcilib_error("PCIDRIVER_IOC_KMEM_SYNC ioctl have failed");
 
348
            return PCILIB_ERROR_FAILED;
 
349
        }
 
350
        break;
 
351
      default:
 
352
        ;
341
353
    }
342
 
    
 
354
 
343
355
    return 0;
344
356
}
345
357