diff for duplicates of <20041207184258.071bf401.toch@dfpost.ru> diff --git a/a/1.txt b/N1/1.txt index 2f2ee7d..e49c242 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -2,93 +2,3 @@ Hi! I try to write small driver to make access to pci device resource from userland using mmap. Code below didnt work. :( -From I module in debug I make some testes - I can read from device registers -but after mmap from userspace I reading just part of memory. :( -Some cache? - -CPU - au1500 - -..... - -static unsigned long *offset; - -static int mdrv_mmap(struct file * file, struct vm_area_struct *vma) -{ - - int ret; - struct inode *inode; - inode = file->f_dentry->d_inode; - - ret = -EINVAL; - unsigned long start = vma->vm_start; - unsigned long size = (vma->vm_end-vma->vm_start); - - offset = ioremap(0x40000000,0x40); - - printk("0x%p\n",__pa(offset)); - - - printk("lb 0x%X\n",offset[ 0x3C>>2 ] ); - - vma->vm_flags |= VM_LOCKED; - - printk("+++++0x%X 0x%X\n",start,size); - - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - - ret = remap_page_range( start, 0x40000000, size, vma->vm_page_prot ); //0x40000000 is first iomem range of pci device - - return ret; -} - -struct file_operations mdrv_fops = { - .open = mdrv_open, - .release = mdrv_close, - .read = mdrv_read, - .write = mdrv_write, - .mmap = mdrv_mmap -}; - -.... - - -Here is userland -#include "mdrv.h" -#include <sys/mman.h> -#include <stdio.h> -#include <string.h> -#include <fcntl.h> -#include <linux/kernel.h> -#include <string.h> - -int fd,fd2; - -int -main () -{ - - fd = open("/dev/mboard0",O_RDWR); - - unsigned long *x; - x = mmap(NULL,64,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); - - printf("mmap return: 0x%X",x); - - if(x == MAP_FAILED) - { - printf(" it is very bad! :(\n"); - perror("mmap:"); - return -1; - } - - printf(" its ok!\n"); - - int i; - for(i=0;i<16;i++) - { - printf(" %d = 0x%X\n",i,x[i]); - } - munmap(x,64); - - return 0; -} diff --git a/a/content_digest b/N1/content_digest index d91a204..6eba1fb 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -7,96 +7,6 @@ "Hi!\n" "I try to write small driver to make access to pci device resource from \n" "userland using mmap.\n" - "Code below didnt work. :(\n" - "From I module in debug I make some testes - I can read from device registers\n" - "but after mmap from userspace I reading just part of memory. :(\n" - "Some cache?\n" - "\n" - "CPU - au1500\n" - "\n" - ".....\n" - "\n" - "static unsigned long *offset;\n" - "\n" - "static int mdrv_mmap(struct file * file, struct vm_area_struct *vma) \n" - "{ \n" - " \n" - " int ret; \n" - " struct inode *inode; \n" - " inode = file->f_dentry->d_inode; \n" - " \n" - " ret = -EINVAL; \n" - " unsigned long start = vma->vm_start; \n" - " unsigned long size = (vma->vm_end-vma->vm_start); \n" - " \n" - " offset = ioremap(0x40000000,0x40);\n" - " \n" - " printk(\"0x%p\\n\",__pa(offset));\n" - "\n" - "\n" - " printk(\"lb 0x%X\\n\",offset[ 0x3C>>2 ] );\n" - "\n" - " vma->vm_flags |= VM_LOCKED;\n" - "\n" - " printk(\"+++++0x%X 0x%X\\n\",start,size);\n" - "\n" - " vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);\n" - " \n" - " ret = remap_page_range( start, 0x40000000, size, vma->vm_page_prot ); //0x40000000 is first iomem range of pci device\n" - "\n" - " return ret; \n" - "}\n" - "\n" - "struct file_operations mdrv_fops = {\n" - " .open = mdrv_open,\n" - " .release = mdrv_close,\n" - " .read = mdrv_read,\n" - " .write = mdrv_write,\n" - " .mmap = mdrv_mmap\n" - "};\n" - "\n" - "....\n" - "\n" - "\n" - "Here is userland \n" - "#include \"mdrv.h\"\n" - "#include <sys/mman.h>\n" - "#include <stdio.h>\n" - "#include <string.h>\n" - "#include <fcntl.h>\n" - "#include <linux/kernel.h>\n" - "#include <string.h>\n" - "\n" - "int fd,fd2;\n" - "\n" - "int\n" - "main ()\n" - "{\n" - "\n" - " fd = open(\"/dev/mboard0\",O_RDWR);\n" - " \n" - " unsigned long *x;\n" - " x = mmap(NULL,64,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);\n" - "\n" - " printf(\"mmap return: 0x%X\",x);\n" - "\n" - " if(x == MAP_FAILED)\n" - " {\n" - " printf(\" it is very bad! :(\\n\");\n" - " perror(\"mmap:\");\n" - " return -1;\n" - " }\n" - " \n" - " printf(\" its ok!\\n\");\n" - "\n" - " int i;\n" - " for(i=0;i<16;i++)\n" - " {\n" - " printf(\" %d = 0x%X\\n\",i,x[i]);\n" - " }\n" - " munmap(x,64);\n" - " \n" - " return 0;\n" - } + Code below didnt work. :( -ad21899effa24acae07437f077fe237363b0e38a87ad8c2fd215d78c226138ce +d8ac32b8e104262e0fcd2f67650713bff278f94c07b5c249dec0d7ba499028f7
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.