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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* -*- linux-c -*- */
  2. /* 
  3.  * Copyright (C) 2001 By Joachim Martillo, Telford Tools, Inc.
  4.  *
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License
  7.  * as published by the Free Software Foundation; either version
  8.  * 2 of the License, or (at your option) any later version.
  9.  *
  10.  **/
  11. #ifndef _8253XMCS_H_
  12. #define _8253XMCS_H_
  13. #include "8253xctl.h"
  14. /* structures for the multi channel server, the host card, GLINK and
  15.  * extensions cards.  This system uses the AMCC S5920 instead of the
  16.  * PLX 9050 */
  17. /* ------------------------------------------------------------------------- */
  18. /* Useful macros */
  19. /*
  20.  * NOTICE: pciat_identify: pci125c,102 unit 1
  21.  * NOTICE: pciat_probe: pci125c,102 unit 1
  22.  * NOTICE: pciat_attach: pci125c,102 instance 1
  23.  * NOTICE: Reg End Size     Pointer  AccHandle
  24.  * NOTICE:   0 --  00000000 5093a000 5033f160
  25.  * NOTICE:   0 be  00000000 5093c000 5033f128
  26.  * NOTICE:   0 le  00000000 50940000 5033f0f0
  27.  * NOTICE:   1 --  00000080 50942000 5033f0b8
  28.  * NOTICE:   1 be  00000080 50944000 5033f080
  29.  * NOTICE:   1 le  00000080 50946000 5033f048
  30.  * NOTICE:   2 --  00004000 50948000 5033f010
  31.  * NOTICE:   2 be  00004000 5094c000 5033efd8
  32.  * NOTICE:   2 le  00004000 50950000 5033efa0
  33.  * NOTICE:   3 --  00008000 50954000 5033ef68
  34.  * NOTICE:   3 be  00008000 5095c000 5033ef30
  35.  * NOTICE:   3 le  00008000 50964000 5033eef8
  36.  * NOTICE:   4 --  00000800 5096c000 5033eec0
  37.  * NOTICE:   4 be  00000800 5096e000 5033ee88
  38.  * NOTICE:   4 le  00000800 50970000 5033ee50
  39.  * NOTICE: pciat_attach: pci125c,102 1: PCI reg property
  40.  * NOTICE: Idx Bus Dev Fun Reg Spc        Addr              Size
  41.  * NOTICE:   0 000 004 000 000 CFG 00000000 00000000 00000000 00000000
  42.  * NOTICE:   1 000 004 000 010 MEM 00000000 00000000 00000000 00000080
  43.  * NOTICE:   2 000 004 000 014 MEM 00000000 00000000 00000000 00004000
  44.  * NOTICE:   3 000 004 000 018 MEM 00000000 00000000 00000000 00008000
  45.  * NOTICE:   4 000 004 000 01c MEM 00000000 00000000 00000000 00000800
  46.  * PCI-device: pci125c,102@4, pciat #1
  47.  */
  48. /*
  49.  * Serial EPROM information:
  50.  *
  51.  *  + chip speed grade [ one byte ]
  52.  *  + chip oscillator speed [ 4 bytes ]
  53.  *  + board revision [ ascii string ]
  54.  *  + date of manufacture [ ascii string ]
  55.  *  + location of manufacture [ ascii string ]
  56.  *  + serial number [ ascii string ]
  57.  *  + prototype/production flag [ one bit ]
  58.  *  + sync/async license [ one bit ]
  59.  *  + CIM type [ one byte ]
  60.  *  + assembly house [ ascii string ]
  61.  */
  62. /*
  63.  * Serial EPROM map.
  64.  */
  65. #define MCS_SEP_TYPE 0x00
  66. #define MCS_SEP_FLAGS 0x01
  67. #define MCS_SEP_SPDGRD 0x02
  68. #define MCS_SEP_MAGIC 0x03
  69. #define MCS_SEP_CLKSPD 0x04
  70. #define MCS_SEP_SN 0x10
  71. #define MCS_SEP_SNLEN 0x10
  72. #define MCS_SEP_REV 0x20
  73. #define MCS_SEP_REVLEN 0x10
  74. #define MCS_SEP_MFGLOC 0x30
  75. #define MCS_SEP_MFGLOCLEN 0x10
  76. #define MCS_SEP_MFGDATE 0x40
  77. #define MCS_SEP_MFGDATELEN 0x20
  78. #define MCS_SEP_MAGICVAL 0x65
  79. /* Host NVRAM DEFINES */
  80. #define AMCC_NVR_VENDEVID 0x10 /* offset in 32bit quantities */
  81. /*
  82.  * PCI spaces on the CIM.
  83.  */
  84. #if 0 /* Solaris driver stuff */
  85. #define AMCC_REG 1
  86. #define CIMCMD_REG 2
  87. #define MICCMD_REG 3
  88. #define FIFOCACHE_REG 4
  89. #else
  90. #define AMCC_REG virtbaseaddress0 /* bridge */
  91. #define CIMCMD_REG virtbaseaddress1
  92. #define MICCMD_REG virtbaseaddress2
  93. #define FIFOCACHE_REG virtbaseaddress3
  94. #endif
  95. /*
  96.  * AMCC registers:
  97.  */
  98. #define AMCC_OMB 0x0c /* 4 bytes */
  99. #define AMCC_IMB 0x1c /* 4 bytes */
  100. #define AMCC_MBEF 0x34 /* 4 bytes */
  101. #define AMCC_INTCSR 0x38 /* 4 bytes */
  102. #define AMCC_INTASSERT 0x00800000 /* RO */
  103. #define AMCC_AOINTPIN 0x00400000 /* RO */
  104. #define AMCC_IMINT 0x00020000 /* R/WC */
  105. #define AMCC_OMINT 0x00010000 /* R/WC */
  106. #define AMCC_AOINTPINENA 0x00002000 /* R/W */
  107. #define AMCC_RCR 0x3c /* 4 bytes */
  108. #define AMCC_NVRACCCTRLMASK 0xe0000000 /* nvRAM Acc. Ctrl */
  109. #define AMCC_NVRACCFAIL 0x10000000 /* RO */
  110. #define AMCC_NVRBUSY 0x80000000
  111. #define AMCC_NVRWRLA 0x80000000
  112. #define AMCC_NVRWRHA 0xa0000000
  113. #define AMCC_NVRRDDB 0xe0000000
  114. #define AMCC_NVROPPMASK 0x000f0000 /* R/W */
  115. #define AMCC_MBXFLGRESET 0x08000000 /* WO */
  116. #define AMCC_RDFIFORESET 0x02000000 /* WO */
  117. #define AMCC_AORESET 0x01000000 /* R/W */
  118. #define AMCC_PTCR 0x60 /* 4 bytes */
  119. #define AMCC_AMWTSTATEMASK 0x07
  120. #define AMCC_PREFETCHMASK 0x18
  121. #define AMCC_WRFIFODIS 0x20
  122. #define AMCC_ENDCONV 0x40
  123. #define AMCC_PTMODE 0x80
  124. #define AMCC_SIZE 0x80 /* space size, in bytes */
  125. #define AMCC_NVRAM_SIZE         0x40 /* in shorts just to be consistent with
  126.       * other eprom and nvram sizes*/
  127. /*
  128.  * CIM Command space 0x0000 - 0x3fff
  129.  */
  130. #define CIMCMD_CHANSHIFT 6 /* shift channel# to the left */
  131. #define CIMCMD_CHANMASK 0x3f /* 6 bits of mask */
  132. #define CIMCMD_CIMSHIFT 10 /* shift cim# to the left */
  133. #define CIMCMD_CIMMASK 0x3 /* 2 bits of mask */
  134. #define CIMCMD_CTRLSHIFT 1 /* shift control address to the left */
  135. #define CIMCMD_CTRLMASK 0x7 /* 3 bits of mask */
  136. #define CIMCMD_CHIPSHIFT 9
  137. #define CIMCMD_RESET 0x0000
  138. #define CIMCMD_RDINT 0x0002
  139. #define CIMCMD_RDINT_ESCCMASK 0x00ff
  140. #define CIMCMD_WRINT 0x0003
  141. #define CIMCMD_WRINTENA 0x0004
  142. #define CIMCMD_WRINTDIS 0x0006
  143. #define CIMCMD_RESETENA 0x0007 /* assert reset */
  144. #define CIMCMD_RESETDIS 0x0000 /* deassert the reset */
  145. #define CIMCMD_RDFIFOW 0x1000 /* add channel# */
  146. #define CIMCMD_WRFIFOB 0x2002 /* add channel# */
  147. #define CIMCMD_WRFIFOW 0x2000 /* add channel# */
  148. #define CIMCMD_RDREGB 0x1000 /* add channel# and reg# (>= 0x20) */
  149. #define CIMCMD_WRREGB 0x2000 /* add channel# and reg# (>= 0x20) */
  150. #define CIMCMD_RDSETUP 0x3200 /* add cim# and address (word acc) */
  151. #define CIMCMD_WRSETUP 0x3220 /* add cim# and address (word acc) */
  152. #define CIMCMD_RDCIMCSR 0x3000 /* add cim# */
  153. #define CIMCMD_CIMCSR_LED 0x01
  154. #define CIMCMD_CIMCSR_SWI 0x02
  155. #define CIMCMD_CIMCSR_SDA 0x04
  156. #define CIMCMD_CIMCSR_SCL 0x08
  157. #define CIMCMD_CIMCSR_TESTMASK 0xc0
  158. #define CIMCMD_WRCIMCSR 0x3020 /* add cim# */
  159. #define CIMCMD_SIZE 0x4000 /* space size, in bytes */
  160. /*
  161.  * MIC Command space 0x0000 - 0x5fc0
  162.  */
  163. #define MICCMD_CHANSHIFT 6 /* shift channel# to the left */
  164. #define MICCMD_CHANMASK 0x3f /* 6 bits of mask */
  165. #define MICCMD_MICCSR 0x0000 /* R/W (byte) */
  166. #define MICCMD_MICCSR_END 0x80
  167. #define MICCMD_MICCSR_ENL 0x40
  168. #define MICCMD_MICCSR_LPN 0x20
  169. #define MICCMD_MICCSR_DGM 0x10
  170. #define MICCMD_MICCSR_CPY 0x08
  171. #define MICCMD_MICCSR_GLE 0x04
  172. #define MICCMD_MICCSR_RXE 0x02
  173. #define MICCMD_MICCSR_IRQ 0x01
  174. #define MICCMD_REV 0x0001 /* RO (byte) */
  175. #define MICCMD_CACHETRIG 0x5000 /* WO (byte: #words-1) add channel# */
  176. #define MICCMD_SIZE 0x8000 /* space size, in bytes */
  177. /*
  178.  * FIFO Cache space 0x000 - 0x7ff
  179.  */
  180. #define FIFOCACHE_CHANSHIFT 5 /* shift channel# to the left */
  181. #define FIFOCACHE_CHANMASK 0x3f /* 6 bits of mask */
  182. #define FIFOCACHE_FIFOCACHE 0x000 /* add channel# and word offset */
  183. #define FIFOCACHE_SIZE 0x800 /* space size, in bytes */
  184. /*
  185.  * Other miscellaneous constants
  186.  */
  187. #define MAX_NCIMS 4 /* maximum of 4 CIMS */
  188. #define CIM_NPORTS 16 /* 16 ports per CIM */
  189. #define CIM_NCHIPS 2 /* 2 ESCC8s/CIM */
  190. #define CHIP_NPORTS 8 /* 8 ports per chip */
  191. #define WANMCS_CLKSPEED 7372800 /* 7.3728 MHz */
  192. /* PCR/PVR (Universal Port) */
  193. /*
  194.  * To summarize the use of the parallel port:
  195.  *                    RS-232
  196.  * Parallel port A -- TxClkdir control (output) ports 0 - 7
  197.  * Parallel port B -- DTR (output) ports 0 - 7
  198.  * Parallel port C -- DSR (input)  ports 0 - 7
  199.  * Parallel port D -- unused
  200.  */
  201. #define WANMCS_PCRAVAL 0x00 /* all output bits */
  202. #define WANMCS_PCRBVAL 0x00 /* all output bits */
  203. #define WANMCS_PCRCVAL 0xff /* all input bits */
  204. #define WANMCS_PCRDVAL 0x0f /* 4 input bits */
  205. #define WANMCS_PIMAVAL 0xff /* all interrupts off */
  206. #define WANMCS_PIMBVAL 0xff /* all interrupts off */
  207. #define WANMCS_PIMCVAL 0xff /* all interrupts off */
  208. #define WANMCS_PIMDVAL 0x0f /* all interrupts off */
  209. #define WANMCS_PVRAVAL 0xff /* all high */
  210. #define WANMCS_PVRBVAL 0xff /* all high */
  211. #define ANY_BITS_ARE_ON(x, b) (((x) & (b)) != 0)
  212. #define ANY_BITS_ARE_OFF(x, b) ((((x) & (b)) ^ (b)) != 0)
  213. #define ALL_BITS_ARE_ON(x, b) ((((x) & (b)) ^ (b)) == 0)
  214. /* ------------------------------------------------------------------------- */
  215. /* New types and type specific macros */
  216. typedef struct _mcs_sep 
  217. {
  218. #if 0
  219. ddi_acc_handle_t  s_handle; /* something from Solaris */
  220. #endif
  221. unsigned char *s_rdptr;
  222. unsigned char *s_wrptr;
  223. unsigned int  s_scl;
  224. unsigned int  s_sda;
  225. } mcs_sep_t;
  226. /*
  227.  * Per-line private information for wanmcs.
  228.  */
  229. typedef struct _wanmcspriv 
  230. {
  231. unsigned char  r_chipunit; /* [0, 1] or [0, 7] */
  232. /* these items are for accessing the ESCCx registers as bytes */
  233. #if 0
  234. ddi_acc_handle_t  r_reghandle; /* handle for access to ESCCx regs */
  235. #endif
  236. unsigned char *r_rdregbase; /* base for reading ESCCx registers */
  237. unsigned char *r_wrregbase; /* base for writing ESCCx registers */
  238. /* these items are for accessing the ESCCx FIFOs as bytes and words */
  239. #if 0
  240. ddi_acc_handle_t  r_fifohandle;
  241. #endif
  242. unsigned short *r_rdfifow; /* read FIFO word */
  243. unsigned char *r_wrfifob; /* write FIFO byte */
  244. unsigned short *r_wrfifow; /* write FIFO word */
  245. /* these items are for accessing the MIC command space */
  246. #if 0
  247. ddi_acc_handle_t  r_miccmdhandle;
  248. #endif
  249. unsigned char *r_wrcachetrig; /* the FIFO cache trigger */
  250. /* these itmes are for accessing the FIFO cache space */
  251. #if 0
  252. ddi_acc_handle_t r_fifocachehandle;
  253. #endif
  254. unsigned short *r_fifocachebase;    
  255. } wanmcspriv_t;
  256. #define AMCC_INT_OFF 0
  257. extern unsigned int 
  258. amcc_read_nvram(unsigned char* buffer, 
  259. unsigned length, 
  260. unsigned char *bridge_space);
  261. extern unsigned int mcs_ciminit(SAB_BOARD *bptr, AURA_CIM *cim);
  262. extern int wanmcs_reset(SAB_BOARD* bptr);
  263. #endif