pnpio.h
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:8k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /*
  2.  *  ISA Plug & Play support
  3.  *  Copyright (c) by Jaroslav Kysela <perex@suse.cz>
  4.  *
  5.  *  Modified by Ed Okerson <eokerson@quicknet.net> to work with the 2.2.x
  6.  *  series of Linux kernels. 11/17/99
  7.  *
  8.  *   This program is free software; you can redistribute it and/or modify
  9.  *   it under the terms of the GNU General Public License as published by
  10.  *   the Free Software Foundation; either version 2 of the License, or
  11.  *   (at your option) any later version.
  12.  *
  13.  *   This program is distributed in the hope that it will be useful,
  14.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *   GNU General Public License for more details.
  17.  *      
  18.  *   You should have received a copy of the GNU General Public License
  19.  *   along with this program; if not, write to the Free Software
  20.  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  *
  22.  */
  23. /*
  24.  *  This file adds all the things that exist in Linux 2.3.28 that are used
  25.  *  by the isapnp code, but do not exist in Linux 2.2.x.  To avoid
  26.  *  trashing the 2.2.x pci_dev and pci_bus structs, I renamed them here to
  27.  *  pnp_dev and pnp_bus for the use of this code.  Drivers that use these
  28.  *  structs shoud use compiler conditionals to determine which name to use
  29.  *  based on the Linux kernel version the module is being built for.
  30.  *
  31.  */
  32. #define DEVICE_COUNT_COMPATIBLE   4
  33. #define DEVICE_COUNT_IRQ        2
  34. #define DEVICE_COUNT_DMA        2
  35. #define DEVICE_COUNT_RESOURCE   12
  36. struct resource {
  37. const char *name;
  38. unsigned long start, end;
  39. unsigned long flags;
  40. struct resource *parent, *sibling, *child;
  41. };
  42. /*
  43.  * IO resources have these defined flags.
  44.  */
  45. #define IORESOURCE_BITS 0x000000ff /* Bus-specific bits */
  46. #define IORESOURCE_IO 0x00000100 /* Resource type */
  47. #define IORESOURCE_MEM 0x00000200
  48. #define IORESOURCE_IRQ 0x00000400
  49. #define IORESOURCE_DMA 0x00000800
  50. #define IORESOURCE_PREFETCH 0x00001000 /* No side effects */
  51. #define IORESOURCE_READONLY 0x00002000
  52. #define IORESOURCE_CACHEABLE 0x00004000
  53. #define IORESOURCE_RANGELENGTH 0x00008000
  54. #define IORESOURCE_SHADOWABLE 0x00010000
  55. #define IORESOURCE_UNSET 0x20000000
  56. #define IORESOURCE_AUTO 0x40000000
  57. #define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */
  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. /* ISA PnP DMA specific bits (IORESOURCE_BITS) */
  64. #define IORESOURCE_DMA_TYPE_MASK (3<<0)
  65. #define IORESOURCE_DMA_8BIT (0<<0)
  66. #define IORESOURCE_DMA_8AND16BIT (1<<0)
  67. #define IORESOURCE_DMA_16BIT (2<<0)
  68. #define IORESOURCE_DMA_MASTER (1<<2)
  69. #define IORESOURCE_DMA_BYTE (1<<3)
  70. #define IORESOURCE_DMA_WORD (1<<4)
  71. #define IORESOURCE_DMA_SPEED_MASK (3<<6)
  72. #define IORESOURCE_DMA_COMPATIBLE (0<<6)
  73. #define IORESOURCE_DMA_TYPEA (1<<6)
  74. #define IORESOURCE_DMA_TYPEB (2<<6)
  75. #define IORESOURCE_DMA_TYPEF (3<<6)
  76. /* ISA PnP memory I/O specific bits (IORESOURCE_BITS) */
  77. #define IORESOURCE_MEM_WRITEABLE (1<<0) /* dup: IORESOURCE_READONLY */
  78. #define IORESOURCE_MEM_CACHEABLE (1<<1) /* dup: IORESOURCE_CACHEABLE */
  79. #define IORESOURCE_MEM_RANGELENGTH (1<<2) /* dup: IORESOURCE_RANGELENGTH */
  80. #define IORESOURCE_MEM_TYPE_MASK (3<<3)
  81. #define IORESOURCE_MEM_8BIT (0<<3)
  82. #define IORESOURCE_MEM_16BIT (1<<3)
  83. #define IORESOURCE_MEM_8AND16BIT (2<<3)
  84. #define IORESOURCE_MEM_SHADOWABLE (1<<5) /* dup: IORESOURCE_SHADOWABLE */
  85. #define IORESOURCE_MEM_EXPANSIONROM (1<<6)
  86. /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
  87. extern struct resource ioport_resource;
  88. extern struct resource iomem_resource;
  89. extern int get_resource_list(struct resource *, char *buf, int size);
  90. extern int request_resource(struct resource *root, struct resource *new);
  91. extern int release_resource(struct resource *new);
  92. extern int allocate_resource(struct resource *root, struct resource *new,
  93.      unsigned long size,
  94.      unsigned long min, unsigned long max,
  95.      unsigned long align);
  96. /* Convenience shorthand with allocation */
  97. //#define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name))
  98. #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
  99. extern struct resource * __request_region(struct resource *, unsigned long start, unsigned long n, const char *name);
  100. /*
  101.  * This is actually the new pci_dev structure, but we can't use that name
  102.  * without stomping on the old one the kernel still uses.
  103.  */
  104. struct pnp_dev {
  105.   int active;                     /* device is active */
  106.   int ro;                         /* Read/Only */
  107.   struct pnp_bus  *bus;           /* bus this device is on */
  108.   struct pnp_dev  *sibling;       /* next device on this bus */
  109.   struct pnp_dev  *next;          /* chain of all devices */
  110.    
  111.   void            *sysdata;       /* hook for sys-specific extension */   
  112.   struct proc_dir_entry *procent; /* device entry in /proc/bus/pci */
  113.   unsigned int    devfn;          /* encoded device & function index */
  114.   unsigned short  vendor;
  115.   unsigned short  device;
  116.   unsigned short  subsystem_vendor;
  117.   unsigned short  subsystem_device;
  118.   unsigned int    class;          /* 3 bytes: (base,sub,prog-if) */
  119.   u8    hdr_type;       /* PCI header type (`multi' flag masked out) */
  120.   u8    rom_base_reg;   /* Which config register controls the ROM */
  121.            
  122.   unsigned short  regs;
  123.         
  124.   /* device is compatible with these IDs */
  125.   unsigned short vendor_compatible[DEVICE_COUNT_COMPATIBLE];
  126.   unsigned short device_compatible[DEVICE_COUNT_COMPATIBLE];
  127.         
  128.  /*
  129.   * Instead of touching interrupt line and base address registers
  130.   * directly, use the values stored here. They might be different!
  131.   */
  132.   unsigned int    irq;   
  133.   struct resource resource[DEVICE_COUNT_RESOURCE];  /* I/O and memory 
  134.                                                   regions + expansion ROMs */
  135.   struct resource dma_resource[DEVICE_COUNT_DMA];
  136.   struct resource irq_resource[DEVICE_COUNT_IRQ];
  137.         
  138.   char            name[48];       /* Device name */
  139.   char            slot_name[8];   /* Slot name */
  140.         
  141.   int (*prepare)(struct pnp_dev *dev); 
  142.   int (*activate)(struct pnp_dev *dev);  
  143.   int (*deactivate)(struct pnp_dev *dev);
  144. };      
  145. /*
  146.  * This is actually the new pci_bus structure, but we can't use that name
  147.  * without stomping on the old one the kernel still uses.
  148.  */
  149. struct pnp_bus {
  150.   struct pnp_bus  *parent;        /* parent bus this bridge is on */
  151.   struct pnp_bus  *children;      /* chain of P2P bridges on this bus */
  152.   struct pnp_bus  *next;          /* chain of all PCI buses */
  153.   struct pci_ops  *ops;           /* configuration access functions */
  154.   struct pnp_dev  *self;          /* bridge device as seen by parent */
  155.   struct pnp_dev  *devices;       /* devices behind this bridge */
  156.   struct resource *resource[4];   /* address space routed to this bus */  
  157.  
  158.   void            *sysdata;       /* hook for sys-specific extension */
  159.   struct proc_dir_entry *procdir; /* directory entry in /proc/bus/pci */
  160.         
  161.   unsigned char   number;         /* bus number */
  162.   unsigned char   primary;        /* number of primary bridge */
  163.   unsigned char   secondary;      /* number of secondary bridge */
  164.   unsigned char   subordinate;    /* max number of subordinate buses */
  165.   char            name[48];
  166.   unsigned short  vendor;
  167.   unsigned short  device;
  168.   unsigned int    serial;         /* serial number */
  169.   unsigned char   pnpver;         /* Plug & Play version */
  170.   unsigned char   productver;     /* product version */
  171.   unsigned char   checksum;       /* if zero - checksum passed */ 
  172.   unsigned char   pad1;
  173. };
  174.         
  175. extern struct pnp_bus   *pnp_root;      /* root bus */
  176. extern struct pnp_dev   *pnp_devices;   /* list of all devices */