LCOV - code coverage report
Current view: top level - include/linux - ioport.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 2 100.0 %
Date: 2017-01-25 Functions: 0 0 -

          Line data    Source code
       1             : /*
       2             :  * ioport.h     Definitions of routines for detecting, reserving and
       3             :  *              allocating system resources.
       4             :  *
       5             :  * Authors:     Linus Torvalds
       6             :  */
       7             : 
       8             : #ifndef _LINUX_IOPORT_H
       9             : #define _LINUX_IOPORT_H
      10             : 
      11             : #ifndef __ASSEMBLY__
      12             : #include <linux/compiler.h>
      13             : #include <linux/types.h>
      14             : /*
      15             :  * Resources are tree-like, allowing
      16             :  * nesting etc..
      17             :  */
      18             : struct resource {
      19             :         resource_size_t start;
      20             :         resource_size_t end;
      21             :         const char *name;
      22             :         unsigned long flags;
      23             :         struct resource *parent, *sibling, *child;
      24             : };
      25             : 
      26             : struct resource_list {
      27             :         struct resource_list *next;
      28             :         struct resource *res;
      29             :         struct pci_dev *dev;
      30             : };
      31             : 
      32             : /*
      33             :  * IO resources have these defined flags.
      34             :  */
      35             : #define IORESOURCE_BITS         0x000000ff      /* Bus-specific bits */
      36             : 
      37             : #define IORESOURCE_TYPE_BITS    0x00000f00      /* Resource type */
      38             : #define IORESOURCE_IO           0x00000100
      39             : #define IORESOURCE_MEM          0x00000200
      40             : #define IORESOURCE_IRQ          0x00000400
      41             : #define IORESOURCE_DMA          0x00000800
      42             : 
      43             : #define IORESOURCE_PREFETCH     0x00001000      /* No side effects */
      44             : #define IORESOURCE_READONLY     0x00002000
      45             : #define IORESOURCE_CACHEABLE    0x00004000
      46             : #define IORESOURCE_RANGELENGTH  0x00008000
      47             : #define IORESOURCE_SHADOWABLE   0x00010000
      48             : 
      49             : #define IORESOURCE_SIZEALIGN    0x00020000      /* size indicates alignment */
      50             : #define IORESOURCE_STARTALIGN   0x00040000      /* start field is alignment */
      51             : 
      52             : #define IORESOURCE_MEM_64       0x00100000
      53             : 
      54             : #define IORESOURCE_EXCLUSIVE    0x08000000      /* Userland may not map this resource */
      55             : #define IORESOURCE_DISABLED     0x10000000
      56             : #define IORESOURCE_UNSET        0x20000000
      57             : #define IORESOURCE_AUTO         0x40000000
      58             : #define IORESOURCE_BUSY         0x80000000      /* Driver has marked this resource busy */
      59             : 
      60             : /* PnP IRQ specific bits (IORESOURCE_BITS) */
      61             : #define IORESOURCE_IRQ_HIGHEDGE         (1<<0)
      62             : #define IORESOURCE_IRQ_LOWEDGE          (1<<1)
      63             : #define IORESOURCE_IRQ_HIGHLEVEL        (1<<2)
      64             : #define IORESOURCE_IRQ_LOWLEVEL         (1<<3)
      65             : #define IORESOURCE_IRQ_SHAREABLE        (1<<4)
      66             : #define IORESOURCE_IRQ_OPTIONAL         (1<<5)
      67             : 
      68             : /* PnP DMA specific bits (IORESOURCE_BITS) */
      69             : #define IORESOURCE_DMA_TYPE_MASK        (3<<0)
      70             : #define IORESOURCE_DMA_8BIT             (0<<0)
      71             : #define IORESOURCE_DMA_8AND16BIT        (1<<0)
      72             : #define IORESOURCE_DMA_16BIT            (2<<0)
      73             : 
      74             : #define IORESOURCE_DMA_MASTER           (1<<2)
      75             : #define IORESOURCE_DMA_BYTE             (1<<3)
      76             : #define IORESOURCE_DMA_WORD             (1<<4)
      77             : 
      78             : #define IORESOURCE_DMA_SPEED_MASK       (3<<6)
      79             : #define IORESOURCE_DMA_COMPATIBLE       (0<<6)
      80             : #define IORESOURCE_DMA_TYPEA            (1<<6)
      81             : #define IORESOURCE_DMA_TYPEB            (2<<6)
      82             : #define IORESOURCE_DMA_TYPEF            (3<<6)
      83             : 
      84             : /* PnP memory I/O specific bits (IORESOURCE_BITS) */
      85             : #define IORESOURCE_MEM_WRITEABLE        (1<<0)    /* dup: IORESOURCE_READONLY */
      86             : #define IORESOURCE_MEM_CACHEABLE        (1<<1)    /* dup: IORESOURCE_CACHEABLE */
      87             : #define IORESOURCE_MEM_RANGELENGTH      (1<<2)    /* dup: IORESOURCE_RANGELENGTH */
      88             : #define IORESOURCE_MEM_TYPE_MASK        (3<<3)
      89             : #define IORESOURCE_MEM_8BIT             (0<<3)
      90             : #define IORESOURCE_MEM_16BIT            (1<<3)
      91             : #define IORESOURCE_MEM_8AND16BIT        (2<<3)
      92             : #define IORESOURCE_MEM_32BIT            (3<<3)
      93             : #define IORESOURCE_MEM_SHADOWABLE       (1<<5)    /* dup: IORESOURCE_SHADOWABLE */
      94             : #define IORESOURCE_MEM_EXPANSIONROM     (1<<6)
      95             : 
      96             : /* PnP I/O specific bits (IORESOURCE_BITS) */
      97             : #define IORESOURCE_IO_16BIT_ADDR        (1<<0)
      98             : #define IORESOURCE_IO_FIXED             (1<<1)
      99             : 
     100             : /* PCI ROM control bits (IORESOURCE_BITS) */
     101             : #define IORESOURCE_ROM_ENABLE           (1<<0)    /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */
     102             : #define IORESOURCE_ROM_SHADOW           (1<<1)    /* ROM is copy at C000:0 */
     103             : #define IORESOURCE_ROM_COPY             (1<<2)    /* ROM is alloc'd copy, resource field overlaid */
     104             : #define IORESOURCE_ROM_BIOS_COPY        (1<<3)    /* ROM is BIOS copy, resource field overlaid */
     105             : 
     106             : /* PCI control bits.  Shares IORESOURCE_BITS with above PCI ROM.  */
     107             : #define IORESOURCE_PCI_FIXED            (1<<4)    /* Do not move resource */
     108             : 
     109             : /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
     110             : extern struct resource ioport_resource;
     111             : extern struct resource iomem_resource;
     112             : 
     113             : extern int request_resource(struct resource *root, struct resource *new);
     114             : extern int release_resource(struct resource *new);
     115             : extern void reserve_region_with_split(struct resource *root,
     116             :                              resource_size_t start, resource_size_t end,
     117             :                              const char *name);
     118             : extern int insert_resource(struct resource *parent, struct resource *new);
     119             : extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new);
     120             : extern int allocate_resource(struct resource *root, struct resource *new,
     121             :                              resource_size_t size, resource_size_t min,
     122             :                              resource_size_t max, resource_size_t align,
     123             :                              void (*alignf)(void *, struct resource *,
     124             :                                             resource_size_t, resource_size_t),
     125             :                              void *alignf_data);
     126             : int adjust_resource(struct resource *res, resource_size_t start,
     127             :                     resource_size_t size);
     128             : resource_size_t resource_alignment(struct resource *res);
     129             : static inline resource_size_t resource_size(const struct resource *res)
     130             : {
     131             :         return res->end - res->start + 1;
     132             : }
     133             : static inline unsigned long resource_type(const struct resource *res)
     134             : {
     135             :         return res->flags & IORESOURCE_TYPE_BITS;
     136             : }
     137             : 
     138             : /* Convenience shorthand with allocation */
     139             : #define request_region(start,n,name)    __request_region(&ioport_resource, (start), (n), (name), 0)
     140             : #define __request_mem_region(start,n,name, excl) __request_region(&iomem_resource, (start), (n), (name), excl)
     141             : #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name), 0)
     142             : #define request_mem_region_exclusive(start,n,name) \
     143             :         __request_region(&iomem_resource, (start), (n), (name), IORESOURCE_EXCLUSIVE)
     144             : #define rename_region(region, newname) do { (region)->name = (newname); } while (0)
     145             : 
     146             : extern struct resource * __request_region(struct resource *,
     147             :                                         resource_size_t start,
     148             :                                         resource_size_t n,
     149             :                                         const char *name, int flags);
     150             : 
     151             : /* Compatibility cruft */
     152             : #define release_region(start,n) __release_region(&ioport_resource, (start), (n))
     153             : #define check_mem_region(start,n)       __check_region(&iomem_resource, (start), (n))
     154             : #define release_mem_region(start,n)     __release_region(&iomem_resource, (start), (n))
     155             : 
     156             : extern int __check_region(struct resource *, resource_size_t, resource_size_t);
     157             : extern void __release_region(struct resource *, resource_size_t,
     158             :                                 resource_size_t);
     159             : 
     160             : static inline int __deprecated check_region(resource_size_t s,
     161             :                                                 resource_size_t n)
     162             : {
     163             :         return __check_region(&ioport_resource, s, n);
     164             : }
     165             : 
     166             : /* Wrappers for managed devices */
     167             : struct device;
     168             : #define devm_request_region(dev,start,n,name) \
     169             :         __devm_request_region(dev, &ioport_resource, (start), (n), (name))
     170             : #define devm_request_mem_region(dev,start,n,name) \
     171             :         __devm_request_region(dev, &iomem_resource, (start), (n), (name))
     172             : 
     173             : extern struct resource * __devm_request_region(struct device *dev,
     174             :                                 struct resource *parent, resource_size_t start,
     175             :                                 resource_size_t n, const char *name);
     176             : 
     177             : #define devm_release_region(dev, start, n) \
     178             :         __devm_release_region(dev, &ioport_resource, (start), (n))
     179             : #define devm_release_mem_region(dev, start, n) \
     180             :         __devm_release_region(dev, &iomem_resource, (start), (n))
     181             : 
     182             : extern void __devm_release_region(struct device *dev, struct resource *parent,
     183             :                                   resource_size_t start, resource_size_t n);
     184             : extern int iomem_map_sanity_check(resource_size_t addr, unsigned long size);
     185             : extern int iomem_is_exclusive(u64 addr);
     186             : 
     187             : extern int
     188             : walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
     189           1 :                 void *arg, int (*func)(unsigned long, unsigned long, void *));
     190           1 : 
     191             : #endif /* __ASSEMBLY__ */
     192             : #endif  /* _LINUX_IOPORT_H */

Generated by: LCOV version 1.10