pciba.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* 
  2.  * This file is subject to the terms and conditions of the GNU General
  3.  * Public License.  See the file "COPYING" in the main directory of
  4.  * this archive for more details.
  5.  *
  6.  * Copyright (C) 1997, 2001 Silicon Graphics, Inc. All rights reserved.
  7.  *
  8.  */
  9. #ifndef _ASM_SN_PCI_PCIBA_H
  10. #define _ASM_SN_PCI_PCIBA_H
  11. #include <linux/ioctl.h>
  12. #include <linux/types.h>
  13. #include <linux/pci.h>
  14. /* for application compatibility with IRIX (why do I bother?) */
  15. #ifndef __KERNEL__
  16. typedef u_int8_t uint8_t;
  17. typedef u_int16_t uint16_t;
  18. typedef u_int32_t uint32_t;
  19. #endif
  20. #define PCI_CFG_VENDOR_ID PCI_VENDOR_ID
  21. #define PCI_CFG_COMMAND PCI_COMMAND
  22. #define PCI_CFG_REV_ID PCI_REVISION_ID
  23. #define PCI_CFG_HEADER_TYPE PCI_HEADER_TYPE
  24. #define PCI_CFG_BASE_ADDR(n) PCI_BASE_ADDRESS_##n
  25. /* /hw/.../pci/[slot]/config accepts ioctls to read
  26.  * and write specific registers as follows:
  27.  *
  28.  * "t" is the native type (char, short, uint32, uint64)
  29.  * to read from CFG space; results will be arranged in
  30.  * byte significance (ie. first byte from PCI is lowest
  31.  * or last byte in result).
  32.  *
  33.  * "r" is the byte offset in PCI CFG space of the first
  34.  * byte of the register (it's least significant byte,
  35.  * in the little-endian PCI numbering). This can actually
  36.  * be as much as 16 bits wide, and is intended to match
  37.  * the layout of a "Type 1 Configuration Space" address:
  38.  * the register number in the low eight bits, then three
  39.  * bits for the function number and five bits for the
  40.  * slot number.
  41.  */
  42. #define PCIIOCCFGRD(t,r) _IOR(0,(r),t)
  43. #define PCIIOCCFGWR(t,r) _IOW(0,(r),t)
  44. /* Some common config register access commands.
  45.  * Use these as examples of how to construct
  46.  * values for other registers you want to access.
  47.  */
  48. /* PCIIOCGETID: arg is ptr to 32-bit int,
  49.  * returns the 32-bit ID value with VENDOR
  50.  * in the bottom 16 bits and DEVICE in the top.
  51.  */
  52. #define PCIIOCGETID PCIIOCCFGRD(uint32_t,PCI_CFG_VENDOR_ID)
  53. /* PCIIOCSETCMD: arg is ptr to a 16-bit short,
  54.  * which will be written to the CMD register.
  55.  */
  56. #define PCIIOCSETCMD PCIIOCCFGWR(uint16_t,PCI_CFG_COMMAND)
  57. /* PCIIOCGETREV: arg is ptr to an 8-bit char,
  58.  * which will get the 8-bit revision number.
  59.  */
  60. #define PCIIOCGETREV PCIIOCCFGRD(uint8_t,PCI_CFG_REV_ID)
  61. /* PCIIOCGETHTYPE: arg is ptr to an 8-bit char,
  62.  * which will get the 8-bit header type.
  63.  */
  64. #define PCIIOCGETHTYPE PCIIOCCFGRD(uint8_t,PCI_CFG_HEADER_TYPE)
  65. /* PCIIOCGETBASE(n): arg is ptr to a 32-bit int,
  66.  * which will get the value of the BASE<n> register.
  67.  */
  68. /* FIXME chadt: this doesn't tell me whether or not this will work
  69.    with non-constant 'n.'  */
  70. #define PCIIOCGETBASE(n) PCIIOCCFGRD(uint32_t,PCI_CFG_BASE_ADDR(n))
  71. /* /hw/.../pci/[slot]/dma accepts ioctls to allocate
  72.  * and free physical memory for use in user-triggered
  73.  * DMA operations.
  74.  */
  75. #define PCIIOCDMAALLOC _IOWR(0,1,uint64_t)
  76. #define PCIIOCDMAFREE _IOW(0,1,uint64_t)
  77. /* The parameter for PCIIOCDMAALLOC needs to contain
  78.  * both the size of the request and the flag values
  79.  * to be used in setting up the DMA.
  80.  *
  81. FIXME chadt: gonna have to revisit this: what flags would an IRIXer like to
  82.  have available?
  83.  * Any flags normally useful in pciio_dmamap
  84.  * or pciio_dmatrans function calls can6 be used here.  */
  85. #define PCIIOCDMAALLOC_REQUEST_PACK(flags,size)
  86. ((((uint64_t)(flags))<<32)|
  87.  (((uint64_t)(size))&0xFFFFFFFF))
  88. #ifdef __KERNEL__
  89. extern int pciba_init(void);
  90. #endif
  91. #endif /* _ASM_SN_PCI_PCIBA_H */