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

嵌入式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_PIO_H
  11. #define _ASM_SN_PIO_H
  12. #include <linux/types.h>
  13. #include <asm/sn/sgi.h>
  14. #include <asm/sn/iobus.h>
  15. /*
  16.  * pioaddr_t - The kernel virtual address that a PIO can be done upon.
  17.  *   Should probably be (volatile void*) but EVEREST would do PIO
  18.  *   to long mostly, just cast for other sizes.
  19.  */
  20. typedef volatile ulong* pioaddr_t;
  21. /*
  22.  * iopaddr_t - the physical io space relative address (e.g. VME A16S 0x0800).
  23.  * iosapce_t - specifies the io address space to be mapped/accessed.
  24.  * piomap_t - the handle returned by pio_alloc() and used with all the pio
  25.  *   access functions.
  26.  */
  27. typedef struct piomap {
  28. uint pio_bus;
  29. uint pio_adap;
  30. #ifdef LATER
  31. iospace_t pio_iospace;
  32. #endif
  33. int pio_flag;
  34. int pio_reg;
  35. char pio_name[7]; /* to identify the mapped device */
  36. struct piomap *pio_next; /* dlist to link active piomap's */
  37. struct piomap *pio_prev; /* for debug and error reporting */
  38. #ifdef LATER
  39. void (*pio_errfunc)(); /* Pointer to an error function */
  40.   /* Used only for piomaps allocated
  41.    * in user level vme driver     */
  42. #endif
  43. iopaddr_t pio_iopmask; /* valid iop address bit mask */
  44. iobush_t pio_bushandle; /* bus-level handle */
  45. } piomap_t;
  46. #define pio_type pio_iospace.ios_type
  47. #define pio_iopaddr pio_iospace.ios_iopaddr
  48. #define pio_size pio_iospace.ios_size
  49. #define pio_vaddr pio_iospace.ios_vaddr
  50. /* Macro to get/set PIO error function */
  51. #define pio_seterrf(p,f) (p)->pio_errfunc = (f)
  52. #define pio_geterrf(p) (p)->pio_errfunc
  53. /*
  54.  * pio_mapalloc() - allocates a handle that specifies a mapping from kernel
  55.  *     virtual to io space. The returned handle piomap is used
  56.  *     with the access functions to make sure that the mapping
  57.  *     to the iospace exists.
  58.  * pio_mapfree()  - frees the mapping as specified in the piomap handle.
  59.  * pio_mapaddr()  - returns the kv address that maps to piomap'ed io address.
  60.  */
  61. #ifdef LATER
  62. extern piomap_t *pio_mapalloc(uint,uint,iospace_t*,int,char*);
  63. extern void  pio_mapfree(piomap_t*);
  64. extern caddr_t  pio_mapaddr(piomap_t*,iopaddr_t);
  65. extern piomap_t *pio_ioaddr(int, iobush_t, iopaddr_t, piomap_t *);
  66. /*
  67.  * PIO access functions.
  68.  */
  69. extern int  pio_badaddr(piomap_t*,iopaddr_t,int);
  70. extern int  pio_badaddr_val(piomap_t*,iopaddr_t,int,void*);
  71. extern int  pio_wbadaddr(piomap_t*,iopaddr_t,int);
  72. extern int  pio_wbadaddr_val(piomap_t*,iopaddr_t,int,int);
  73. extern int  pio_bcopyin(piomap_t*,iopaddr_t,void *,int, int, int);
  74. extern int  pio_bcopyout(piomap_t*,iopaddr_t,void *,int, int, int);
  75. /*
  76.  * PIO RMW functions using piomap.
  77.  */
  78. extern void pio_orb_rmw(piomap_t*, iopaddr_t, unsigned char);
  79. extern void pio_orh_rmw(piomap_t*, iopaddr_t, unsigned short);
  80. extern void pio_orw_rmw(piomap_t*, iopaddr_t, unsigned long);
  81. extern void pio_andb_rmw(piomap_t*, iopaddr_t, unsigned char);
  82. extern void pio_andh_rmw(piomap_t*, iopaddr_t, unsigned short); 
  83. extern void pio_andw_rmw(piomap_t*, iopaddr_t, unsigned long); 
  84. /*
  85.  * Old RMW function interface
  86.  */
  87. extern void orb_rmw(volatile void*, unsigned int);
  88. extern void orh_rmw(volatile void*, unsigned int);
  89. extern void orw_rmw(volatile void*, unsigned int);
  90. extern void andb_rmw(volatile void*, unsigned int);
  91. extern void andh_rmw(volatile void*, unsigned int);
  92. extern void andw_rmw(volatile void*, unsigned int);
  93. #endif /* LATER */
  94. /*
  95.  * piomap_t type defines
  96.  */
  97. #define PIOMAP_NTYPES 7
  98. #define PIOMAP_A16N VME_A16NP
  99. #define PIOMAP_A16S VME_A16S
  100. #define PIOMAP_A24N VME_A24NP
  101. #define PIOMAP_A24S VME_A24S
  102. #define PIOMAP_A32N VME_A32NP
  103. #define PIOMAP_A32S VME_A32S
  104. #define PIOMAP_A64 6
  105. #define PIOMAP_EISA_IO 0
  106. #define PIOMAP_EISA_MEM 1
  107. #define PIOMAP_PCI_IO 0
  108. #define PIOMAP_PCI_MEM 1
  109. #define PIOMAP_PCI_CFG 2
  110. #define PIOMAP_PCI_ID 3
  111. /* IBUS piomap types */
  112. #define PIOMAP_FCI 0
  113. /* dang gio piomap types */
  114. #define PIOMAP_GIO32 0
  115. #define PIOMAP_GIO64 1
  116. #define ET_MEM          0
  117. #define ET_IO           1
  118. #define LAN_RAM         2
  119. #define LAN_IO          3
  120. #define PIOREG_NULL -1
  121. /* standard flags values for pio_map routines,
  122.  * including {xtalk,pciio}_piomap calls.
  123.  * NOTE: try to keep these in step with DMAMAP flags.
  124.  */
  125. #define PIOMAP_UNFIXED 0x0
  126. #define PIOMAP_FIXED 0x1
  127. #define PIOMAP_NOSLEEP 0x2
  128. #define PIOMAP_INPLACE 0x4
  129. #define PIOMAP_FLAGS 0x7
  130. #endif /* _ASM_SN_PIO_H */