if_pn.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:9k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* if_pn.h -  proNET-80 driver header file  */
  2. /* @(#)if_pn.h 2.2 8/20/86 (c) 1986 Proteon, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,03sep88,gae  changed PNTIMEOUT from 10.
  7. 01a,06nov87,rdc  written.
  8. */
  9. #ifndef INCpnh
  10. #define INCpnh
  11. struct pn_header {
  12.     /* the first two fields are required by the hardware */
  13.     u_char  vh_dhost;  /* destination address */
  14.     u_char  vh_shost;  /* source address */
  15.     /* the next three fields are the local network header */
  16.     u_char  vh_version;    /* header version */
  17.     u_char  vh_type;       /* packer type => protocol number */
  18.     u_short vh_info;       /* protocol-specific information */
  19. };
  20. #define RING_VERSION 2 /* current version of v2lni header */
  21. /*
  22.  * Packet types (protocol numbers) in proNET protocol header
  23.  * Other types are defined, but are proprietary.
  24.  */
  25. #define RING_IP 1
  26. #define RING_IPTrailer 2 /* really, 3 = 512 bytes */
  27. /*         4 = 1024 bytes */
  28. /*         5 = 1536 bytes */
  29. /* it's really very messed-up! */
  30. #define RING_IPNTrailer 4 /* not a number, but a range */
  31. #define RING_ARP 3 /* the next three conflict with trailers */
  32. #define RING_HDLC 4
  33. #define RING_VAXDB 5
  34. #define RING_RINGWAY 6
  35. #define RING_RINGWAYM 8
  36. #define RING_NOVELL 10
  37. #define RING_PUP 12
  38. #define RING_XNS 14
  39. #define RING_DIAGNOSTICS 15 /* protocol type for testing */
  40. #define RING_ECHO 16
  41. #define PN_BROADCAST 0xFF /* hardware-defined broadcast address */
  42. #define PN_GRPOF(c) ((c >> 4) & 0xF) /* extract group number */
  43. #define PN_MBROF(c) (c & 0xF) /* extract member number */
  44. #define PN_GRPCAST(c) (!PN_MBROF(c)) /* is it a group broadcast */
  45. #define PN_REGOFF 0x4000 /* address offset into the registers */
  46. #define RCMD_CHAN 0
  47. #define RCV_CHAN 1
  48. #define XCMD_CHAN 2
  49. #define XMT_CHAN 3
  50. #define TBUFSIZE 0x400 /* in lwords */
  51. #define RBUFSIZE 0x4000 /* in bytes */
  52. #define RDMA 0x8000 /* DMA_INT bit 15 */
  53. #define TDMA 0x80 /* DMA_INT bit 7  */
  54. #define NXM 0x10 /* DMA_INT bit 4  */
  55. #define RSTRDMA 0x4000 /* DMA_INT bit 14 resets RDMA */
  56. #define RSTTDMA 0x40 /* DMA_INT bit 6 resets TDMA  */
  57. #define RSTNXM  0x10 /* DMA_INT bit 4 resets NXM   */
  58. /* the following structure is the 82258 register map
  59.  * address offset for these registers is 0x4000
  60.  * sizeof(dmac_regs) should be 0x100
  61.  * therefore sizeof(struct dmac_regs) should be 0x40
  62.  */
  63. struct dmac_regs { /* all dummy fields are place holders */
  64.     u_char  gcr; /* general command register */
  65.     u_char  dummy0;
  66.     u_char  scr; /* subchannel register */
  67.     u_char  dummy1;
  68.     u_short gsr; /* general status register */
  69.     u_short dummy2; /* missing in 82258 register map */
  70.     u_short gmr; /* general mode register */
  71.     u_char  gbr; /* general burst register */
  72.     u_char  dummy3;
  73.     u_char  gdr; /* general delay register */
  74.     u_char  dummy4;
  75.     u_short dummy5; /* missing in 82258 register map */
  76.     u_char  csr; /* channel[0-3] status registers */
  77.     u_char  dummy6;
  78.     u_short dar; /* channel[0-3] data assembly registers */
  79.     u_short maskr; /* channel[0-3] mask registers */
  80.     u_short cmpr; /* channel[0-3] compare registers */
  81.     u_char  mivr; /* multiplexer interrupt vector register */
  82.     u_char  dummy7;
  83.     u_char  lvr; /* last vector register */
  84.     u_char  dummy8;
  85.     u_short dummy9; /* missing in 82258 register map */
  86.     u_short dummy10; /* missing in 82258 register map */
  87.     u_short cprL; /* channel[0-3] command pointer registers */
  88.     u_char  cprH;
  89.     u_char  dummy11;
  90.     u_short sprL; /* channel[0-3] source pointer registers */
  91.     u_char  sprH;
  92.     u_char  dummy12;
  93.     u_short dprL; /* channel[0-3] dest pointer registers */
  94.     u_char  dprH;
  95.     u_char  dummy13;
  96.     u_short ttprL; /* channel[0-3] translate table pointer regs */
  97.     u_char  ttprH;
  98.     u_char  dummy14;
  99.     u_short lprL; /* channel[0-3] list pointer registers */
  100.     u_char  lprH;
  101.     u_char  dummy15;
  102.     u_short dummy16; /* missing in 82258 register map */
  103.     u_short dummy17; /* missing in 82258 register map */
  104.     u_short bcrL; /* channel[0-3] byte count registers */
  105.     u_char  bcrH;
  106.     u_char  dummy18;
  107.     u_short ccrL; /* channel[0-3] command registers */
  108.     u_char  ccrH;
  109.     u_char  dummy19;
  110. };
  111. /* these registers only appear once in the dmac_regs array */
  112. #define GCR_OF(c) ((c)->pn_dmac[0].gcr)
  113. #define SCR_OF(c) ((c)->pn_dmac[0].scr)
  114. #define GSR_OF(c) ((c)->pn_dmac[0].gsr)
  115. #define GMR_OF(c) ((c)->pn_dmac[0].gmr)
  116. #define GBR_OF(c) ((c)->pn_dmac[0].gbr)
  117. #define GDR_OF(c) ((c)->pn_dmac[0].gdr)
  118. #define MIVR_OF(c) ((c)->pn_dmac[3].mivr)
  119. #define LVR_OF(c) ((c)->pn_dmac[3].lvr)
  120. /* the following are interrupt vector, dma page, and csr registers
  121.  * address offset for this structure is 0x4000 + sizeof(dmac_regs)
  122.  */
  123. struct ctl_regs { /* all dummy fields are place holders */
  124.     u_short rdmaint; /* rcv dma interrupt vector */
  125.     u_short dummy0;
  126.     u_short tdmaint_nxm; /* xmt dma and nxm interrupt vector */
  127.     u_short dummy1;
  128.     u_short rcsrint; /* rcv done interrupt vector */
  129.     u_short dummy2;
  130.     u_short tcsrint; /* xmt done interrupt vector */
  131.     u_short dummy3;
  132.     u_short pronet_pg; /* high 8 bits for pronet page addr in DMA */
  133.     u_short dummy4;
  134.     u_short cmd_pg; /* high 8 bits for cmd page addr in DMA */
  135.     u_short dummy5;
  136.     u_short rcvdata_pg; /* high 8 bits for rcv data page addr in DMA */
  137.     u_short dummy6;
  138.     u_short xmtdata_pg; /* high 8 bits for xmt data page addr in DMA */
  139.     u_short dummy7;
  140.     u_short tcsr; /* xmt csr */
  141.     u_short dummy8;
  142.     u_short dummy9; /* tbufad can only be written to at 0x4126! */
  143.     u_short tbufad; /* xmt buffer addr reg */
  144.     u_short tbufda; /* xmt buffer data reg */
  145.     u_short rfsreg; /* refuse reg */
  146.     u_short dma_int; /* dma and interrupt control reg */
  147.     u_short dummy10;
  148.     u_short dummy11; /* rcsr can only be written to at 0x4132! */
  149.     u_short rcsr; /* rcv csr */
  150.     u_short rcntr; /* rcv count reg (R) */
  151.     u_short rcounter; /* rcv buffer input counter (W) */
  152.     u_short rstatr; /* rcv status reg (R) */
  153.     u_short rstcntr; /* reset rcntr reg (W) */
  154.     u_short rbufdmaptr; /* rcv buffer DMA pointer */
  155.     u_short dummy12;
  156. };
  157. #define PN_ORI 01 /* originate/xmt/send pkt */
  158. #define PN_CEN 01 /* enable copy of rcv pkt into RBUFFER */
  159. #define PN_JNR 02 /* enable relay in wire center for join ring */
  160. #define PN_MEN 04 /* enable CTL modem */
  161. #define PN_INI 020 /* create token on current ORIGR if RNOK */
  162. #define PN_RST   040 /* reset xmt/rcv to known state */
  163. #define PN_IEN 0100 /* IEN: ORIGC(CTL), OTIM(TCSR) or CNTR(RCSR) */
  164. #define PN_RDY 0200 /* xmt - TCSR or rcv - RCNTR & RSTATR ready */
  165. #define PN_REF 0400 /* last pkt sent wasn't accepted */
  166. #define PN_CSW 0400 /* valid count and status waiting to be xfer */
  167. #define PN_BDF 02000 /* last pkt sent had format error */
  168. #define PN_TMO 04000 /* timed out waiting for ORIGC(CTL) */
  169. #define PN_PER 04000 /* parity error detected */
  170. #define PN_JND 010000 /* CTL is acknowledging a JOINR(RCSR) cmd */
  171. #define PN_NOK 020000 /* NOTOKEN or NOFLAG timer has expired */
  172. #define PN_RTI 040000 /* reset xmt/rcv int */
  173. #define PN_IRQ 0100000 /* xmt/rcv csr int request */
  174. #define PN_TBITS 
  175.     "1020IRQ17RTI16NOK15JND14TMO13BDF11REF10RDY7IEN6RST5INI1ORI"
  176. #define PN_RBITS 
  177.     "1020IRQ17RTI16NOK15JND14PER11CSW10RDY7IEN6RST3MEN2JNR1CEN"
  178. #define PN_SBITS  "103PERR2RBDF1ROVR"
  179. #define PERR 04 /* parity error bit in RSTATR */
  180. #define RBDF 02 /* bad format error bit in RSTATR */
  181. #define ROVR 01 /* pkt length overflow error bit in RSTATR */
  182. struct pn_regs {
  183.     u_short pn_rbuffer[PN_REGOFF>>1]; /* rcv buffer */
  184.     struct dmac_regs pn_dmac[4]; /* 82258 reg map */
  185.     struct ctl_regs  pn_ctl; /* int vec, dma pg, and csrs reg map */
  186. };
  187. #define PNTERR (PN_TMO | PN_BDF | PN_REF) /* any xmt error */
  188. #define PNRERR (PERR | RBDF | ROVR) /* any rcv error */
  189. #define PNRETRY 10 /* xmt retry limit */
  190. #define PNIDENTRETRY 10 /* identify retry limit */
  191. #define PNIDENTSUCC  5 /* number of successful sends required */
  192. #define PNTIMEOUT 10 /* seconds before a xmt timeout */
  193. /* 82258 DMAC specific stuff */
  194. struct short_cmd {
  195.     u_short type1_cmd;
  196.     u_short sprL;
  197.     u_char  sprH;
  198.     u_char  dummy0;
  199.     u_short dprL;
  200.     u_char  dprH;
  201.     u_char  dummy1;
  202.     u_short bcrL;
  203.     u_char  bcrH;
  204.     u_char  dummy2;
  205.     u_short csr;
  206. };
  207. struct long_cmd {
  208.     struct short_cmd shcmd;
  209.     u_short ext_cmd;
  210.     u_short mask;
  211.     u_short cmpr;
  212.     u_short ttprL;
  213.     u_char  ttprH;
  214.     u_char  dummy0;
  215. };
  216. struct debug_cmd {
  217.     struct long_cmd cmdbl;
  218.     u_short updated_sprL;
  219.     u_char  updated_sprH;
  220.     u_char  dummy0;
  221.     u_short updated_dprL;
  222.     u_char  updated_dprH;
  223.     u_char  dummy1;
  224.     u_short updated_bcrL;
  225.     u_char  updated_bcrH;
  226.     u_char  dummy2;
  227. };
  228. #define gsr_of(chan,addr) ((addr)[0].gsr >> (chan))
  229. #endif INCpnh