root/arch/arc/kernel/arc_hostlink.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. arc_hl_mmap
  2. arc_hl_ioctl
  3. arc_hl_init

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * arc_hostlink.c: Pseudo-driver for Metaware provided "hostlink" facility
   4  *
   5  * Allows Linux userland access to host in absence of any peripherals.
   6  *
   7  * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
   8  */
   9 
  10 #include <linux/fs.h>           /* file_operations */
  11 #include <linux/miscdevice.h>
  12 #include <linux/mm.h>           /* VM_IO */
  13 #include <linux/module.h>
  14 #include <linux/uaccess.h>
  15 
  16 static unsigned char __HOSTLINK__[4 * PAGE_SIZE] __aligned(PAGE_SIZE);
  17 
  18 static int arc_hl_mmap(struct file *fp, struct vm_area_struct *vma)
  19 {
  20         vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
  21 
  22         if (io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
  23                                vma->vm_end - vma->vm_start,
  24                                vma->vm_page_prot)) {
  25                 pr_warn("Hostlink buffer mmap ERROR\n");
  26                 return -EAGAIN;
  27         }
  28         return 0;
  29 }
  30 
  31 static long arc_hl_ioctl(struct file *file, unsigned int cmd,
  32                         unsigned long arg)
  33 {
  34         /* we only support, returning the physical addr to mmap in user space */
  35         put_user((unsigned int)__HOSTLINK__, (int __user *)arg);
  36         return 0;
  37 }
  38 
  39 static const struct file_operations arc_hl_fops = {
  40         .unlocked_ioctl = arc_hl_ioctl,
  41         .mmap           = arc_hl_mmap,
  42 };
  43 
  44 static struct miscdevice arc_hl_dev = {
  45         .minor  = MISC_DYNAMIC_MINOR,
  46         .name   = "hostlink",
  47         .fops   = &arc_hl_fops
  48 };
  49 
  50 static int __init arc_hl_init(void)
  51 {
  52         pr_info("ARC Hostlink driver mmap at 0x%p\n", __HOSTLINK__);
  53         return misc_register(&arc_hl_dev);
  54 }
  55 module_init(arc_hl_init);

/* [<][>][^][v][top][bottom][index][help] */