dualport.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:7k
源码类别:

VxWorks

开发平台:

C/C++

  1. /*
  2. **  File:       dualport.h
  3. **  Description: Contains definitions and data structure defs. 
  4. **               for NetROM dualport protocols
  5. **
  6. **      Copyright (c) 1996 Applied Microsystems Corp.
  7. **                          All Rights Reserved
  8. **
  9. ** Redistribution and use in source and binary forms are permitted 
  10. ** provided that the above copyright notice and this paragraph are 
  11. ** duplicated in all such forms and that any documentation,
  12. ** advertising materials, and other materials related to such
  13. ** distribution and use acknowledge that the software was developed 
  14. ** by Applied Microsystems Corp. (the Company).  The name of the 
  15. ** Company may not be used to endorse or promote products derived
  16. ** from this software without specific prior written permission. 
  17. ** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 
  18. ** IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  19. ** WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 
  20. **
  21. **  Modification History:
  22.    2/17/94 fdv add two out of band characters to readaddr protocol:
  23.                 RA_RESET and RA_RESYNC.
  24.                 RA_RESET lets the target trigger a tgtreset.
  25.                 RA_RESYNC lets the target trigger the netrom initialize
  26.                     the dualport.
  27.    4/15/94 fdv add one more out of band character to readaddr protocol:
  28. RA_MISC adds misc functions. The first being 
  29. receive interrupt acknowledge.
  30.    6/17/94 fdv add yet another oob char
  31. EMOFFONWRITE  misc subcommand - turn emulation off on ra_write
  32.    11/16/94 sch Add stuff for Virtual Ethernet
  33. */
  34. #ifndef _dualport_h
  35. #define _dualport_h
  36. /* general macros */
  37. #define READADDR_SIZE 256 /* # bytes in ra message area */
  38. #define DUALPORT_SIZE 2048 /* # byte in dualport ram */
  39. #define DP_DATA_SIZE 60 /* msg data size */
  40. #define DP_MAXCHANNELS 1 /* max number of channels */
  41. #define DPF_SERIAL 0 /* use serial port, not dp ram */
  42. #define DPF_READONLY_TGT 1 /* target can't write dp ram */
  43. #define DPF_ONECHANNEL 2 /* only one channel */
  44. #define DPACK_BASE 4 /* offset of ack bytes */
  45. #define DPACTIVE_BASE 8 /* offset of active bytes */
  46. /* Number of message buffers assigned for receive when target has read 
  47.  * and write access.  */
  48. #define RW_REC_MSGS 15
  49. /* Number of message buffers assigned for transmit when target has read 
  50.  * and write access.  */
  51. #define RW_TX_MSGS 16
  52. /* special characters for the read-address protocol; up to 8 can be defined */
  53. #define RA_MAX_INDEX 0x08 /* 8 characters can be defined */
  54. #define RA_PACK_INDEX 0x00 /* ack for transmit */
  55. #define RA_ESC_INDEX 0x01 /* add 0xF0 to the next character */
  56. #define RA_SET_INDEX 0x02 /* start of rom write request pkt */
  57. #define RA_STARTMSG_INDEX 0x03 /* start of a packet */
  58. #define RA_ENDMSG_INDEX 0x04 /* end of a packet */
  59. #define RA_RESET 0x05 /* tgtreset sequence */
  60. #define RA_RESYNC 0x06 /* tgt dualport init sequence */
  61. #define RA_MISC 0x07 /* tgt misc command sequence */
  62. #define RX_INTR_ACK 0x01 /* misc subcommand- receive interrupt ACK */
  63. #define EMOFFONWRITE 0x02 /* misc subcommand- turn emulation off on ra_write*/
  64. #define READADDR_CTLCHAR(cp, ch)  (((cp)->oobthresh + (ch)) * (cp)->numaccess)
  65. #define READADDR_DATACHAR(cp, ch) ((ch) * (cp)->numaccess)
  66. /* offsets of protocol stuff outside readaddr memory */
  67. #define RA_RI 0x100 /* netrom-ready byte */
  68. #define RA_ACK 0x101 /* character-ack byte */
  69. /* start of read-address messages */
  70. #define RA_MSGBASE 0x140 /* start of read-addr structures */
  71. /* read-write protocol addresses */
  72. #define RW_MRI 0 /* message-ready byte */
  73. #define RW_TX 8 /* transmit channel active */
  74. #define RW_RX 9 /* receive channel active */
  75. #define RW_MSGBASE 0x40 /* start of readwrite messages */
  76. /* message field offsets from the start of the message */
  77. #define DPM_FLAGS 0 /* offset of flags field */
  78. #define DPM_SIZE 2 /* offset of size field */
  79. #define DPM_DATA 4 /* offset of data field */
  80. #define DPM_DATASIZE DP_DATA_SIZE /* max bytes of data */
  81. #define DPM_MSGSIZE (DP_DATA_SIZE + 4) /* size of an entire message */
  82. /* return status codes from the getmsg() routines */
  83. #define GM_NODATA (-1) /* no data present */
  84. #define GM_MSGCOMPLETE 0 /* message end read */
  85. #define GM_NOTDONE 1 /* data present, but not all */
  86. #define GM_MSGOVERFLOW 2 /* data didn't fit in buffer */
  87. /* 
  88.  * Messages in dual-port ram have the following format:
  89.  *
  90.  * typedef volatile struct _dpMsgStruct {
  91.  *     uInt16 flags;
  92.  *     uInt16 size;
  93.  *     uChar data[DP_DATA_SIZE];
  94.  * } DpMsg;
  95.  *
  96.  * On multi-word targets, each byte of this structure must be read 
  97.  * individually.  For example, on a target with a 16-bit word size, both
  98.  * bytes of which are being emulated, the message will look like:
  99.  *     Pod 0 byte      Pod 1 byte
  100.  * Flags Hi ???
  101.  * Flags Lo ???
  102.  * Size Hi ???
  103.  * Size Lo ???
  104.  * Data 0 ???
  105.  * ... ...
  106.  * Data N ???
  107.  */
  108. /* size of a message structure */
  109. #define DP_MSGSTRUCT_SIZE (4 + DP_DATA_SIZE)
  110. #define DP_FLAGINDEX 0
  111. #define DP_SIZEINDEX 2
  112. #define DP_DATAINDEX 4
  113. /* structure used to manage character-at-a time i/o in a buffer */
  114. typedef struct _bufIoStruct {
  115.     uInt16 flags; /* buffer flags */
  116.     uInt16 bufsize; /* size of data in the buffer */
  117.     int index; /* i/o index */
  118.     uChar buf[DP_DATA_SIZE]; /* the buffer */
  119. } BufIo;
  120. #define DPMSG_READY 0x8000 /* ready to be processed */
  121. #define DPMSG_START 0x0001 /* start of message buffer chain */
  122. #define DPMSG_END 0x0002 /* end of message buffer chain */
  123. #define DPMSG_WRAP 0x0004 /* end of message buffers */
  124. /* Added for overflow buffers */
  125. #define DPMSG_NR_DONE   0x0008          /* NetROM is done reading or
  126.                                            writing pod memory */
  127. #define DPMSG_TARG_RDY  0x0010          /* Target is running in RAM -
  128.                                            NetROM can use pod memory */
  129. #define DPMSG_1K_BIT    0x0400 /* 1K bit of msg length */
  130. /* Overflow buffers are in pod memory just below dual port RAM.  There is
  131.    one for each msg structure and it contains the data that won't fit
  132.    in the msg structure (above 60 bytes). */
  133. #define MAX_MSG_SIZE 1536  /* a full Ethernet packet */
  134. #define MAX_OVF_MSG_SIZE (MAX_MSG_SIZE - DP_DATA_SIZE)
  135. /* structure of a communication channel */
  136. typedef struct _dpChannelStruct {
  137.     int chanflags; /* flags */
  138.     int numaccess; /* number of target accesses to rom */
  139.     int oobthresh; /* out-of-band data threshold */
  140.     int width; /* bytes in a rom word */
  141.     int index; /* index of pod 0 in the word */
  142.     uInt32  tx; /* transmit msg structures */
  143.     uInt32  txovf; /* transmit overflow buffer */
  144.     uInt32  txlim; /* oldest unacked tx msg structure */
  145.     uInt32  txbase; /* base of transmit msg structures */
  146.     uInt32  txovfbase; /* base of transmit overflow buffers */
  147.     void      (*wait_nr_done_ptr)();    /* ptr to RAM routine */
  148.     BufIo txbuf; /* transmit buffer structure */
  149.     uInt32 rx; /* receive msg structures */
  150.     uInt32 rxovf; /* receive overflow buffer */
  151.     uInt32 rxlim; /* next message location */
  152.     uInt32 rxbase; /* base of receive msg structures */
  153.     uInt32 rxovfbase; /* base of receive overflow buffers */
  154.     BufIo rxbuf; /* receive buffer structure */
  155.     uInt32 dpbase; /* base of dualport ram */
  156.     uChar rxackval; /* rx ack value to write in dp ram */
  157. } DpChannel;
  158. #define CF_TXVALID 0x0001 /* transmit size valid */
  159. #define CF_RXVALID 0x0002 /* receive side valid */
  160. #define CF_NOWAITIO 0x0004 /* don't wait for buffers to be ready */
  161. #endif /* _dualport_h */