Skip to content
Snippets Groups Projects
Select Git revision
  • 59460a9305458ac3e7f2415b602dbaa6cfcb8a3b
  • master default
  • android-container
  • nanopc-t4
  • for-kernelci
  • WIP-syscall
  • v4.16-rc5
  • v4.16-rc4
  • v4.16-rc3
  • v4.16-rc2
  • v4.16-rc1
  • v4.15
  • v4.15-rc9
  • v4.15-rc8
  • v4.15-rc7
  • v4.15-rc6
  • v4.15-rc5
  • v4.15-rc4
  • v4.15-rc3
  • v4.15-rc2
  • v4.15-rc1
  • v4.14
  • v4.14-rc8
  • v4.14-rc7
  • v4.14-rc6
  • v4.14-rc5
26 results

fpga-region.c

Blame
  • fpga-region.c 15.91 KiB
    /*
     * FPGA Region - Device Tree support for FPGA programming under Linux
     *
     *  Copyright (C) 2013-2016 Altera Corporation
     *
     * This program is free software; you can redistribute it and/or modify it
     * under the terms and conditions of the GNU General Public License,
     * version 2, as published by the Free Software Foundation.
     *
     * This program is distributed in the hope it will be useful, but WITHOUT
     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
     * more details.
     *
     * You should have received a copy of the GNU General Public License along with
     * this program.  If not, see <http://www.gnu.org/licenses/>.
     */
    
    #include <linux/fpga/fpga-bridge.h>
    #include <linux/fpga/fpga-mgr.h>
    #include <linux/fpga/fpga-region.h>
    #include <linux/idr.h>
    #include <linux/kernel.h>
    #include <linux/list.h>
    #include <linux/module.h>
    #include <linux/of_platform.h>
    #include <linux/slab.h>
    #include <linux/spinlock.h>
    
    static DEFINE_IDA(fpga_region_ida);
    static struct class *fpga_region_class;
    
    static const struct of_device_id fpga_region_of_match[] = {
    	{ .compatible = "fpga-region", },
    	{},
    };
    MODULE_DEVICE_TABLE(of, fpga_region_of_match);
    
    static int fpga_region_of_node_match(struct device *dev, const void *data)
    {
    	return dev->of_node == data;
    }
    
    /**
     * fpga_region_find - find FPGA region
     * @np: device node of FPGA Region
     * Caller will need to put_device(&region->dev) when done.
     * Returns FPGA Region struct or NULL
     */
    static struct fpga_region *fpga_region_find(struct device_node *np)
    {
    	struct device *dev;
    
    	dev = class_find_device(fpga_region_class, NULL, np,
    				fpga_region_of_node_match);
    	if (!dev)
    		return NULL;
    
    	return to_fpga_region(dev);
    }
    
    /**
     * fpga_region_get - get an exclusive reference to a fpga region
     * @region: FPGA Region struct
     *
     * Caller should call fpga_region_put() when done with region.
     *
     * Return fpga_region struct if successful.
     * Return -EBUSY if someone already has a reference to the region.
     * Return -ENODEV if @np is not a FPGA Region.