lkml.org 
[lkml]   [2002]   [Oct]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subjectmmap driver entry point
    iam using this driver to fetch me some memory in
    my user space application by calling mmap with the
    file descriptor got by opening the device file for
    this driver.
    mmap(0, length, flags, flags, fd, offset)

    and the mmap entry point in the driver is implemented
    as below:

    In the implementation, it tries to write an index into
    the first four bytes, which i use to store in my
    internal structures( to later reference it through the
    index), before zeroing out the buffer. But the index
    is always -1.

    I dont understand the part where its getting the
    physical address to map.
    whats the high_memory and whats the PAGE_OFFSET.
    Can you help me in understanding what exactly is the
    mmap() doing here and
    if its doing it right.


    himem_buf_allocated = 0;

    int xxx_mmap(struct file *filp,
    struct vm_area_struct *vma)
    {
    unsigned long size;
    char * virt_addr;
    int index;

    size = vma->vm_end - vma->vm_start;
    if ((size % PAGE_SIZE) != 0){
    size = (size / PAGE_SIZE) * PAGE_SIZE + PAGE_SIZE;
    }

    /* himem_buf_size is 0x80000000 */
    if (size + himem_buf_allocated >= himem_buf_size){

    return -ENOMEM;
    }

    /* himem_buf is calculated as high_memory -
    PAGE_OFFSET */
    umem_addr = himem_buf + himem_buf_allocated;
    if (umem_addr == 0){
    return -ENOMEM;
    }
    himem_buf_allocated += size;


    virt_addr = ioremap((unsigned long)umem_addr,
    PAGE_SIZE);
    if (virt_addr == 0){
    return -ENOMEM;
    }
    /* write the index into the first 4 bytes */
    writel(index, (uint32_t *)virt_addr);

    /* the values of index and *(virt_addr) do not
    match. *(virt_addr) is always -1 .
    Is something wrong here */
    dbg_printf(0,"index is %d, *(virt_addr) is %d\n",
    index,(int)readl(virt_addr));
    iounmap(virt_addr);



    remap_page_range(vma->vm_start, (ulong)umem_addr,
    vma->vm_end - vma->vm_start, vma->vm_page_prot);

    return 0;
    }


    __________________________________________________
    Do you Yahoo!?
    Faith Hill - Exclusive Performances, Videos & More
    http://faith.yahoo.com
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:29    [W:0.052 / U:3.800 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site