home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lxapi32.zip / Include / Linux / ioport.h < prev    next >
C/C++ Source or Header  |  2002-04-26  |  7KB  |  164 lines

  1. /* $Id: ioport.h,v 1.2 2002/04/26 23:09:07 smilcke Exp $ */
  2.  
  3. /*
  4.  * ioport.h    Definitions of routines for detecting, reserving and
  5.  *        allocating system resources.
  6.  *
  7.  * Authors:    Linus Torvalds
  8.  */
  9.  
  10. #ifndef _LINUX_IOPORT_H
  11. #define _LINUX_IOPORT_H
  12.  
  13. #ifdef TARGET_OS2
  14. struct lxrm_resource;
  15. #endif
  16.  
  17. /*
  18.  * Resources are tree-like, allowing
  19.  * nesting etc..
  20.  */
  21. struct resource {
  22.     const char *name;
  23.     unsigned long start, end;
  24.     unsigned long flags;
  25.     struct resource *parent, *sibling, *child;
  26. #ifdef TARGET_OS2
  27.    struct lxrm_resource *rm_resource;
  28. #endif
  29. };
  30.  
  31. struct resource_list {
  32.     struct resource_list *next;
  33.     struct resource *res;
  34.     struct pci_dev *dev;
  35. };
  36.  
  37. /*
  38.  * IO resources have these defined flags.
  39.  */
  40. #define IORESOURCE_BITS        0x000000ff    /* Bus-specific bits */
  41.  
  42. #define IORESOURCE_IO        0x00000100    /* Resource type */
  43. #define IORESOURCE_MEM        0x00000200
  44. #define IORESOURCE_IRQ        0x00000400
  45. #define IORESOURCE_DMA        0x00000800
  46.  
  47. #define IORESOURCE_PREFETCH    0x00001000    /* No side effects */
  48. #define IORESOURCE_READONLY    0x00002000
  49. #define IORESOURCE_CACHEABLE    0x00004000
  50. #define IORESOURCE_RANGELENGTH    0x00008000
  51. #define IORESOURCE_SHADOWABLE    0x00010000
  52. #define IORESOURCE_BUS_HAS_VGA    0x00080000
  53.  
  54. #define IORESOURCE_UNSET    0x20000000
  55. #define IORESOURCE_AUTO        0x40000000
  56. #define IORESOURCE_BUSY        0x80000000    /* Driver has marked this resource busy */
  57.  
  58. /* ISA PnP IRQ specific bits (IORESOURCE_BITS) */
  59. #define IORESOURCE_IRQ_HIGHEDGE        (1<<0)
  60. #define IORESOURCE_IRQ_LOWEDGE        (1<<1)
  61. #define IORESOURCE_IRQ_HIGHLEVEL    (1<<2)
  62. #define IORESOURCE_IRQ_LOWLEVEL        (1<<3)
  63.  
  64. /* ISA PnP DMA specific bits (IORESOURCE_BITS) */
  65. #define IORESOURCE_DMA_TYPE_MASK    (3<<0)
  66. #define IORESOURCE_DMA_8BIT        (0<<0)
  67. #define IORESOURCE_DMA_8AND16BIT    (1<<0)
  68. #define IORESOURCE_DMA_16BIT        (2<<0)
  69.  
  70. #define IORESOURCE_DMA_MASTER        (1<<2)
  71. #define IORESOURCE_DMA_BYTE        (1<<3)
  72. #define IORESOURCE_DMA_WORD        (1<<4)
  73.  
  74. #define IORESOURCE_DMA_SPEED_MASK    (3<<6)
  75. #define IORESOURCE_DMA_COMPATIBLE    (0<<6)
  76. #define IORESOURCE_DMA_TYPEA        (1<<6)
  77. #define IORESOURCE_DMA_TYPEB        (2<<6)
  78. #define IORESOURCE_DMA_TYPEF        (3<<6)
  79.  
  80. /* ISA PnP memory I/O specific bits (IORESOURCE_BITS) */
  81. #define IORESOURCE_MEM_WRITEABLE    (1<<0)    /* dup: IORESOURCE_READONLY */
  82. #define IORESOURCE_MEM_CACHEABLE    (1<<1)    /* dup: IORESOURCE_CACHEABLE */
  83. #define IORESOURCE_MEM_RANGELENGTH    (1<<2)    /* dup: IORESOURCE_RANGELENGTH */
  84. #define IORESOURCE_MEM_TYPE_MASK    (3<<3)
  85. #define IORESOURCE_MEM_8BIT        (0<<3)
  86. #define IORESOURCE_MEM_16BIT        (1<<3)
  87. #define IORESOURCE_MEM_8AND16BIT    (2<<3)
  88. #define IORESOURCE_MEM_SHADOWABLE    (1<<5)    /* dup: IORESOURCE_SHADOWABLE */
  89. #define IORESOURCE_MEM_EXPANSIONROM    (1<<6)
  90.  
  91. /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
  92. #if (defined(TARGET_OS2) && !defined(NOOS2LXAPI))
  93. extern struct resource *__ioport_resource;
  94. extern struct resource *__iomem_resource;
  95. #define ioport_resource (*__ioport_resource)
  96. #define iomem_resource (*__iomem_resource)
  97. #else
  98. extern struct resource ioport_resource;
  99. extern struct resource iomem_resource;
  100. #endif
  101.  
  102. extern int get_resource_list(struct resource *, char *buf, int size);
  103.  
  104. extern int check_resource(struct resource *root, unsigned long, unsigned long);
  105. #if (defined(TARGET_OS2) && !defined(NOOS2LXAPI))
  106. extern int (*request_resource)(struct resource *root,struct resource *newr);
  107. extern int (*release_resource)(struct resource *old);
  108. extern int (*allocate_resource)(struct resource *root,struct resource *newr,unsigned long size,unsigned long min,unsigned long max,unsigned long align,void (*alignf)(void *,struct resource*,unsigned long),void *alignf_data);
  109. #else
  110. extern int request_resource(struct resource *root, struct resource *neww);
  111. extern int release_resource(struct resource *neww);
  112. extern int allocate_resource(struct resource *root, struct resource *neww,
  113.                  unsigned long size,
  114.                  unsigned long min, unsigned long max,
  115.                  unsigned long align,
  116.                  void (*alignf)(void *, struct resource *, unsigned long),
  117.                  void *alignf_data);
  118. #endif
  119.  
  120. /* Convenience shorthand with allocation */
  121. #ifdef TARGET_OS2
  122. #define request_region(start,n,name,rm_resource) __request_region(&ioport_resource, (start), (n), (name), (rm_resource))
  123. #define request_mem_region(start,n,name,rm_resource) __request_region(&iomem_resource, (start), (n), (name), (rm_resource))
  124. #else
  125. #define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name))
  126. #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
  127. #endif
  128.  
  129. #if (defined(TARGET_OS2) && !defined(NOOS2LXAPI))
  130. extern struct resource * (*__request_region)(struct resource *, unsigned long start, unsigned long n, const char *name,struct lxrm_resource *rm_resource);
  131. #else
  132. extern struct resource * __request_region(struct resource *, unsigned long start, unsigned long n, const char *name,struct lxrm_resource *rm_resource);
  133. #endif
  134.  
  135. /* Compatibility cruft */
  136. #ifdef TARGET_OS2
  137. #define check_region(start,n)    __check_region(&ioport_resource, (start), (n))
  138. #define release_region(start,n,rm_resource)    __release_region(&ioport_resource, (start), (n), (rm_resource))
  139. #define check_mem_region(start,n)    __check_region(&iomem_resource, (start), (n))
  140. #define release_mem_region(start,n,rm_resource)    __release_region(&iomem_resource, (start), (n), (rm_resource))
  141. #else
  142. #define check_region(start,n)    __check_region(&ioport_resource, (start), (n))
  143. #define release_region(start,n)    __release_region(&ioport_resource, (start), (n))
  144. #define check_mem_region(start,n)    __check_region(&iomem_resource, (start), (n))
  145. #define release_mem_region(start,n)    __release_region(&iomem_resource, (start), (n))
  146. #endif
  147.  
  148. #if (defined(TARGET_OS2) && !defined(NOOS2LXAPI))
  149. extern int (*__check_region)(struct resource *, unsigned long, unsigned long);
  150. extern void (*__release_region)(struct resource *, unsigned long, unsigned long,struct lxrm_resource *rm_resource);
  151. #else
  152. extern int __check_region(struct resource *, unsigned long, unsigned long);
  153. extern void __release_region(struct resource *, unsigned long, unsigned long,struct lxrm_resource *rm_resource);
  154. #endif
  155.  
  156. #define get_ioport_list(buf)    get_resource_list(&ioport_resource, buf, PAGE_SIZE)
  157. #define get_mem_list(buf)    get_resource_list(&iomem_resource, buf, PAGE_SIZE)
  158.  
  159. #define HAVE_AUTOIRQ
  160. extern void autoirq_setup(int waittime);
  161. extern int autoirq_report(int waittime);
  162.  
  163. #endif    /* _LINUX_IOPORT_H */
  164.