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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2. ** -----------------------------------------------------------------------------
  3. **
  4. **  Perle Specialix driver for Linux
  5. **  Ported from existing RIO Driver for SCO sources.
  6.  *
  7.  *  (C) 1990 - 1998 Specialix International Ltd., Byfleet, Surrey, UK.
  8.  *
  9.  *      This program is free software; you can redistribute it and/or modify
  10.  *      it under the terms of the GNU General Public License as published by
  11.  *      the Free Software Foundation; either version 2 of the License, or
  12.  *      (at your option) any later version.
  13.  *
  14.  *      This program is distributed in the hope that it will be useful,
  15.  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  *      GNU General Public License for more details.
  18.  *
  19.  *      You should have received a copy of the GNU General Public License
  20.  *      along with this program; if not, write to the Free Software
  21.  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22. **
  23. ** Module : rio.h
  24. ** SID : 1.3
  25. ** Last Modified : 11/6/98 11:34:13
  26. ** Retrieved : 11/6/98 11:34:22
  27. **
  28. **  ident @(#)rio.h 1.3
  29. **
  30. ** -----------------------------------------------------------------------------
  31. */
  32. #ifndef __rio_rio_h__
  33. #define __rio_rio_h__
  34. #ifdef SCCS_LABELS
  35. static char *_rio_h_sccs_ = "@(#)rio.h 1.3";
  36. #endif
  37. /*
  38. ** 30.09.1998 ARG -
  39. ** Introduced driver version and host card type strings
  40. */
  41. #define RIO_DRV_STR "Specialix RIO Driver"
  42. #define RIO_AT_HOST_STR "ISA"
  43. #define RIO_PCI_HOST_STR "PCI"
  44. /*
  45. ** rio_info_store() commands (arbitary values) :
  46. */
  47. #define RIO_INFO_PUT 0xA4B3C2D1
  48. #define RIO_INFO_GET 0xF1E2D3C4
  49. /*
  50. ** anything that I couldn't cram in somewhere else
  51. */
  52. /*
  53. #ifndef RIODEBUG
  54. #define debug
  55. #else
  56. #define debug rioprint
  57. #endif
  58. */
  59. /*
  60. ** Maximum numbers of things
  61. */
  62. #define RIO_SLOTS 4 /* number of configuration slots */
  63. #define RIO_HOSTS 4 /* number of hosts that can be found */
  64. #define PORTS_PER_HOST 128 /* number of ports per host */
  65. #define LINKS_PER_UNIT 4 /* number of links from a host */
  66. #define RIO_PORTS (PORTS_PER_HOST * RIO_HOSTS) /* max. no. of ports */
  67. #define RTAS_PER_HOST (MAX_RUP) /* number of RTAs per host */
  68. #define PORTS_PER_RTA (PORTS_PER_HOST/RTAS_PER_HOST) /* ports on a rta */
  69. #define PORTS_PER_MODULE 4 /* number of ports on a plug-in module */
  70. /* number of modules on an RTA */
  71. #define MODULES_PER_RTA  (PORTS_PER_RTA/PORTS_PER_MODULE)
  72. #define MAX_PRODUCT 16 /* numbr of different product codes */
  73. #define MAX_MODULE_TYPES 16 /* number of different types of module */
  74. #define RIO_CONTROL_DEV 128 /* minor number of host/control device */
  75. #define RIO_INVALID_MAJOR 0 /* test first host card's major no for validity */
  76. /*
  77. ** number of RTAs that can be bound to a master
  78. */
  79. #define MAX_RTA_BINDINGS (MAX_RUP * RIO_HOSTS)
  80. /*
  81. ** Unit types
  82. */
  83. #define PC_RTA16 0x90000000
  84. #define PC_RTA8 0xe0000000
  85. #define TYPE_HOST 0
  86. #define TYPE_RTA8 1
  87. #define TYPE_RTA16 2
  88. /*
  89. ** Flag values returned by functions
  90. */
  91. #define RIO_FAIL -1
  92. #define RIO_SUCCESS 0
  93. #define COPYFAIL -1 /* copy[in|out] failed */
  94. /*
  95. ** SysPort value for something that hasn't any ports
  96. */
  97. #define NO_PORT 0xFFFFFFFF
  98. /*
  99. ** Unit ID Of all hosts
  100. */
  101. #define HOST_ID 0
  102. /*
  103. ** Break bytes into nybles
  104. */
  105. #define LONYBLE(X) ((X) & 0xF)
  106. #define HINYBLE(X) (((X)>>4) & 0xF)
  107. /*
  108. ** Flag values passed into some functions
  109. */
  110. #define DONT_SLEEP 0
  111. #define OK_TO_SLEEP 1
  112. #define DONT_PRINT 1
  113. #define DO_PRINT 0
  114. #define PRINT_TO_LOG_CONS 0
  115. #define PRINT_TO_CONS 1
  116. #define PRINT_TO_LOG 2
  117. /*
  118. ** Timeout has trouble with times of less than 3 ticks...
  119. */
  120. #define MIN_TIMEOUT 3
  121. /*
  122. ** Generally useful constants
  123. */
  124. #define HALF_A_SECOND ((HZ)>>1)
  125. #define A_SECOND (HZ)
  126. #define HUNDRED_HZ ((HZ/100)?(HZ/100):1)
  127. #define FIFTY_HZ ((HZ/50)?(HZ/50):1)
  128. #define TWENTY_HZ ((HZ/20)?(HZ/20):1)
  129. #define TEN_HZ ((HZ/10)?(HZ/10):1)
  130. #define FIVE_HZ ((HZ/5)?(HZ/5):1)
  131. #define HUNDRED_MS TEN_HZ
  132. #define FIFTY_MS TWENTY_HZ
  133. #define TWENTY_MS FIFTY_HZ
  134. #define TEN_MS HUNDRED_HZ
  135. #define TWO_SECONDS ((A_SECOND)*2)
  136. #define FIVE_SECONDS ((A_SECOND)*5)
  137. #define TEN_SECONDS ((A_SECOND)*10)
  138. #define FIFTEEN_SECONDS ((A_SECOND)*15)
  139. #define TWENTY_SECONDS ((A_SECOND)*20)
  140. #define HALF_A_MINUTE (A_MINUTE>>1)
  141. #define A_MINUTE (A_SECOND*60)
  142. #define FIVE_MINUTES (A_MINUTE*5)
  143. #define QUARTER_HOUR (A_MINUTE*15)
  144. #define HALF_HOUR (A_MINUTE*30)
  145. #define HOUR (A_MINUTE*60)
  146. #define SIXTEEN_MEG 0x1000000
  147. #define ONE_MEG 0x100000
  148. #define SIXTY_FOUR_K 0x10000
  149. #define RIO_AT_MEM_SIZE SIXTY_FOUR_K
  150. #define RIO_EISA_MEM_SIZE SIXTY_FOUR_K
  151. #define RIO_MCA_MEM_SIZE SIXTY_FOUR_K
  152. #define POLL_VECTOR 0x100
  153. #define COOK_WELL 0
  154. #define COOK_MEDIUM 1
  155. #define COOK_RAW 2
  156. /*
  157. ** Pointer manipulation stuff
  158. ** RIO_PTR takes hostp->Caddr and the offset into the DP RAM area
  159. ** and produces a UNIX caddr_t (pointer) to the object
  160. ** RIO_OBJ takes hostp->Caddr and a UNIX pointer to an object and
  161. ** returns the offset into the DP RAM area.
  162. */
  163. #define RIO_PTR(C,O) (((caddr_t)(C))+(0xFFFF&(O)))
  164. #define RIO_OFF(C,O) ((int)(O)-(int)(C))
  165. /*
  166. ** How to convert from various different device number formats:
  167. ** DEV is a dev number, as passed to open, close etc - NOT a minor
  168. ** number!
  169. **
  170. ** Note: LynxOS only gives us 8 bits for the device minor number,
  171. ** so all this crap here to deal with 'modem' bits etc. is
  172. ** just a load of irrelevant old bunkum!
  173. ** This however does not stop us needing to define a value
  174. ** for RIO_MODEMOFFSET which is required by the 'riomkdev'
  175. ** utility in the New Config Utilities suite.
  176. */
  177. /* 0-511: direct 512-1023: modem */
  178. #define RIO_MODEMOFFSET 0x200 /* doesn't mean anything */
  179. #define RIO_MODEM_MASK 0x1FF
  180. #define RIO_MODEM_BIT 0x200
  181. #define RIO_UNMODEM(DEV) (minor(DEV) & RIO_MODEM_MASK)
  182. #define RIO_ISMODEM(DEV) (minor(DEV) & RIO_MODEM_BIT)
  183. #define RIO_PORT(DEV,FIRST_MAJ) ( (major(DEV) - FIRST_MAJ) * PORTS_PER_HOST) 
  184. + minor(DEV)
  185. #define splrio spltty
  186. #define RIO_IPL 5
  187. #define RIO_PRI (PZERO+10)
  188. #define RIO_CLOSE_PRI PZERO-1 /* uninterruptible sleeps for close */
  189. typedef struct DbInf
  190. {
  191. uint Flag;
  192. char Name[8];
  193. } DbInf;
  194. #ifndef TRUE
  195. #define TRUE (1==1)
  196. #endif
  197. #ifndef FALSE
  198. #define FALSE (!TRUE)
  199. #endif
  200. #define CSUM(pkt_ptr)  (((ushort *)(pkt_ptr))[0] + ((ushort *)(pkt_ptr))[1] + 
  201. ((ushort *)(pkt_ptr))[2] + ((ushort *)(pkt_ptr))[3] + 
  202. ((ushort *)(pkt_ptr))[4] + ((ushort *)(pkt_ptr))[5] + 
  203. ((ushort *)(pkt_ptr))[6] + ((ushort *)(pkt_ptr))[7] + 
  204. ((ushort *)(pkt_ptr))[8] + ((ushort *)(pkt_ptr))[9] )
  205. /*
  206. ** This happy little macro copies SIZE bytes of data from FROM to TO
  207. ** quite well. SIZE must be a constant.
  208. */
  209. #define CCOPY( FROM, TO, SIZE ) { *(struct s { char data[SIZE]; } *)(TO) = *(struct s *)(FROM); }
  210. /*
  211. ** increment a buffer pointer modulo the size of the buffer...
  212. */
  213. #define BUMP( P, I ) ((P) = (((P)+(I)) & RIOBufferMask))
  214. #define INIT_PACKET( PK, PP ) 
  215. *((uint *)PK)    = PP->PacketInfo; 
  216. }
  217. #define RIO_LINK_ENABLE 0x80FF /* FF is a hack, mainly for Mips, to        */
  218.        /* prevent a really stupid race condition.  */
  219. #define NOT_INITIALISED 0
  220. #define INITIALISED 1
  221. #define NOT_POLLING 0
  222. #define POLLING 1
  223. #define NOT_CHANGED 0
  224. #define CHANGED 1
  225. #define NOT_INUSE 0
  226. #define DISCONNECT 0
  227. #define CONNECT 1
  228. /*
  229. ** Machine types - these must NOT overlap with product codes 0-15
  230. */
  231. #define RIO_MIPS_R3230 31
  232. #define RIO_MIPS_R4030 32
  233. #define RIO_IO_UNKNOWN -2
  234. #undef MODERN
  235. #define ERROR( E ) do { u.u_error = E; return OPENFAIL } while ( 0 )
  236. /* Defines for MPX line discipline routines */
  237. #define DIST_LINESW_OPEN 0x01
  238. #define DIST_LINESW_CLOSE 0x02
  239. #define DIST_LINESW_READ 0x04
  240. #define DIST_LINESW_WRITE 0x08
  241. #define DIST_LINESW_IOCTL 0x10
  242. #define DIST_LINESW_INPUT 0x20
  243. #define DIST_LINESW_OUTPUT 0x40
  244. #define DIST_LINESW_MDMINT 0x80
  245. #endif /* __rio_h__ */