pciba.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id$
  2.  *
  3.  * This file is subject to the terms and conditions of the GNU General Public
  4.  * License.  See the file "COPYING" in the main directory of this archive
  5.  * for more details.
  6.  *
  7.  * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc.
  8.  * Copyright (C) 2000 by Colin Ngam
  9.  */
  10. #ifndef _ASM_SN_PCI_PCIBA_H
  11. #define _ASM_SN_PCI_PCIBA_H
  12. /*
  13.  * These are all the HACKS from ioccom.h ..
  14.  */
  15. #define IOCPARM_MASK    0xff            /* parameters must be < 256 bytes */
  16. #define IOC_VOID        0x20000000      /* no parameters */
  17. /*
  18.  * The above needs to be modified and follow LINUX ...
  19.  */
  20. /* /hw/.../pci/[slot]/config accepts ioctls to read
  21.  * and write specific registers as follows:
  22.  *
  23.  * "t" is the native type (char, short, uint32, uint64)
  24.  * to read from CFG space; results will be arranged in
  25.  * byte significance (ie. first byte from PCI is lowest
  26.  * or last byte in result).
  27.  *
  28.  * "r" is the byte offset in PCI CFG space of the first
  29.  * byte of the register (it's least significant byte,
  30.  * in the little-endian PCI numbering). This can actually
  31.  * be as much as 16 bits wide, and is intended to match
  32.  * the layout of a "Type 1 Configuration Space" address:
  33.  * the register number in the low eight bits, then three
  34.  * bits for the function number and five bits for the
  35.  * slot number.
  36.  */
  37. #define PCIIOCCFGRD(t,r) _IOR(0,(r),t)
  38. #define PCIIOCCFGWR(t,r) _IOW(0,(r),t)
  39. /* Some common config register access commands.
  40.  * Use these as examples of how to construct
  41.  * values for other registers you want to access.
  42.  */
  43. /* PCIIOCGETID: arg is ptr to 32-bit int,
  44.  * returns the 32-bit ID value with VENDOR
  45.  * in the bottom 16 bits and DEVICE in the top.
  46.  */
  47. #define PCIIOCGETID PCIIOCCFGRD(uint32_t,PCI_CFG_VENDOR_ID)
  48. /* PCIIOCSETCMD: arg is ptr to a 16-bit short,
  49.  * which will be written to the CMD register.
  50.  */
  51. #define PCIIOCSETCMD PCIIOCCFGWR(uint16_t,PCI_CFG_COMMAND)
  52. /* PCIIOCGETREV: arg is ptr to an 8-bit char,
  53.  * which will get the 8-bit revision number.
  54.  */
  55. #define PCIIOCGETREV PCIIOCCFGRD(uint8_t,PCI_CFG_REV_ID)
  56. /* PCIIOCGETHTYPE: arg is ptr to an 8-bit char,
  57.  * which will get the 8-bit header type.
  58.  */
  59. #define PCIIOCGETHTYPE PCIIOCCFGRD(uint8_t,PCI_CFG_HEADER_TYPE)
  60. /* PCIIOCGETBASE(n): arg is ptr to a 32-bit int,
  61.  * which will get the value of the BASE<n> register.
  62.  */
  63. #define PCIIOCGETBASE(n) PCIIOCCFGRD(uint32_t,PCI_CFG_BASE_ADDR(n))
  64. /* /hw/.../pci/[slot]/intr accepts an ioctl to
  65.  * set up user level interrupt handling as follows:
  66.  *
  67.  * "n" is a bitmap of which of the four PCI interrupt
  68.  * lines are of interest, using PCIIO_INTR_LINE_[ABCD].
  69.  */
  70. #define PCIIOCSETULI(n) _IOWR(1,n,struct uliargs)
  71. #if _KERNEL
  72. #define PCIIOCSETULI32(n) _IOWR(1,n,struct uliargs32)
  73. #endif
  74. /* /hw/.../pci/[slot]/dma accepts ioctls to allocate
  75.  * and free physical memory for use in user-triggered
  76.  * DMA operations.
  77.  */
  78. #define PCIIOCDMAALLOC _IOWR(0,1,uint64_t)
  79. #define PCIIOCDMAFREE _IOW(0,1,uint64_t)
  80. /* The parameter for PCIIOCDMAALLOC needs to contain
  81.  * both the size of the request and the flag values
  82.  * to be used in setting up the DMA.
  83.  *
  84.  * Any flags normally useful in pciio_dmamap
  85.  * or pciio_dmatrans function calls can6 be used here.
  86.  */
  87. #define PCIIOCDMAALLOC_REQUEST_PACK(flags,size)
  88. ((((uint64_t)(flags))<<32)|
  89.  (((uint64_t)(size))&0xFFFFFFFF))
  90. #endif /* _ASM_SN_PCI_PCIBA_H */