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

VxWorks

开发平台:

C/C++

  1. /*
  2. **  File:     dualport.h
  3. **  Version:  1.0.1
  4. **
  5. **  Description: dualport defines and structs common to NR-F/w & tgt
  6. **
  7. **      Copyright (c) 1996 Applied Microsystems Corp.
  8. **                          All Rights Reserved
  9. **
  10. **
  11. **  Modification History:
  12. **        10/11/96...MPH...Modified NR4xx v1.3.1 dualport.h to NR5xx
  13. **        01/20/97...MPH...Modified DpChannel struct to use Int16's 
  14. */
  15. #ifndef _dualport_h
  16. #define _dualport_h
  17. /* general macros */
  18. #define DUALPORT_SIZE 8192 /* # byte in dualport ram */
  19. #define DP_CHAN_SIZE            2048    /* # bytes in one dualport chan */
  20. #define DUALPORT_BASE           POD_0_ADDR
  21. #define DP_DATA_SIZE 60 /* msg data size */
  22. #define DP_MAXCHANNELS 1 /* max number of channels */
  23. #define DPF_SERIAL              0       /* use serial port, not dp ram */
  24. #define DPF_READONLY_TGT        1       /* target can't write dp ram */
  25. #define DPF_ONECHANNEL          2       /* only one channel */
  26. #define DPF_TWOCHANNEL          4       /* channel 2 */
  27. #define DPF_THREECHANNEL        8       /* channel 3 */
  28. /* Number of message buffers assigned for receive */
  29. #define DP_REC_MSGS 15 
  30. /* Number of message buffers assigned for transmit */
  31. #define DP_TX_MSGS 16
  32. /* Dualport protocol addresses */
  33. #define DP_MRI 0x00 /* message-ready byte */
  34. #define DP_TX 0x08 /* transmit channel active */
  35. #define DP_RX 0x09 /* receive channel active */
  36. #define DP_NR_DONE      0x20            /* NR finished w/ PodMem write */
  37. #define DP_OOBFLAG      0x21            /* Currently, only for resync */
  38. #define DP_MSGBASE 0x40 /* start of readwrite messages */
  39.  
  40. /* "Special" out-of-band flag, used for resync */
  41. #define OOBFLAG_RESYNC  0x01            /* Write to DP_OOBFLAG to resync */
  42. /* Note: vether protocol uses bytes 0x0A through 0x0F */
  43. /* Read-read protocol on/off switches */
  44. /* There are four versions of each RR const for speed--see dptartget.h   */
  45. #define RR_ENABLE_ADR   0x10              /* RR protocol enable */
  46. #define RR_DISABLE_ADR  0x18              /* RR protocol enable */
  47. /* Message field offsets from the start of the message */
  48. #define DPM_FLAGS 0x00 /* offset of flags field */
  49. #define DPM_SIZE 0x02 /* offset of size field */
  50. #define DPM_OOB_CMD 0x04 /* offset of OOB command field */
  51. #define DPM_DATA 0x04 /* offset of data field */
  52. #define DPM_DATASIZE DP_DATA_SIZE /* max bytes of data */
  53. #define DPM_MSGSIZE (DP_DATA_SIZE + 4) /* size of an entire message */
  54. #define DPM_OOBDATA     0x06            /* offset of data in OOB msgs */
  55. /* read-write protocol addresses */
  56. #define RW_MRI 0 /* message-ready byte */
  57. #define RW_TX 8 /* transmit channel active */
  58. #define RW_RX 9 /* receive channel active */
  59. #define RW_NR_DONE      0x20            /* Netrom Done OOB action */
  60. #define RW_OOBFLAG      0x21            /* Currently, only for resync */
  61. /* Number of message buffers assigned for receive when target has read 
  62.  * and write access.  */
  63. #define RW_REC_MSGS 15
  64. /* Number of message buffers assigned for transmit when target has read 
  65.  * and write access.  */
  66. #define RW_TX_MSGS 16
  67. /* "Special" out-of-band flag, used for resync */
  68. #define OOBFLAG_RESYNC  0x01            /* Write to DP_OOBFLAG to resync */
  69. #define DPM_DATASIZE DP_DATA_SIZE /* max bytes of data */
  70. #define DPM_MSGSIZE (DP_DATA_SIZE + 4) /* size of an entire message */
  71. /* Message flags */
  72. #define DPMSG_READY 0x8000 /* ready to be processed */
  73. #define DPMSG_START 0x0001 /* start of message buffer chain */
  74. #define DPMSG_END 0x0002 /* end of message buffer chain */
  75. #define DPMSG_WRAP 0x0004 /* end of message buffers */
  76. #define DPMSG_OOB 0x0020 /* Out-of-band message */
  77. #define CF_TXVALID 0x0001 /* transmit size valid */
  78. #define CF_RXVALID 0x0002 /* receive side valid */
  79. #define CF_NOWAITIO 0x0004 /* don't wait for bufs to be ready */
  80. /* Out-of-band command numbers */
  81. #define DP_OOB_RESYNC         0x0000
  82. #define DP_OOB_SETMEM         0x0001    /* NetROM sets PodMem for tgt */
  83. #define DP_OOB_RESET          0x0002    /* NetROM does tgtreset */
  84. #define DP_OOB_CPUTS          0x0003    /* Print buf on NR console */
  85. #define DP_OOB_EMOFFONWRITE   0x0004    /* Set emulation off, then setmem */
  86. #define DP_OOB_INTACK         0x0005    /* Tgt acks previous interrupt */
  87. #define DP_OOB_MAXCMD         0x0005    /* Same val as previous command */
  88. #define DP_OOB_RESYNC_ALL     0x0005
  89. #define DP_OOB_CMD            0x0006
  90. #define DP_OOB_ESC            0xFFFF    /* Not used; placeholder */
  91. /* return status codes from nr_GetMsg() */
  92. #define GM_NODATA (-1) /* no data present */
  93. #define GM_MSGCOMPLETE 0 /* message end read */
  94. #define GM_NOTDONE 1 /* data present, but not all */
  95. #define GM_MSGOVERFLOW 2 /* data didn't fit in buffer */
  96. /* size of a message structure */
  97. #define DP_MSGSTRUCT_SIZE (4 + DP_DATA_SIZE)
  98. #define DP_FLAGINDEX 0
  99. #define DP_SIZEINDEX 2
  100. #define DP_DATAINDEX     4
  101. /* Added for overflow buffers */
  102. #define DPMSG_NR_DONE   0x0008          /* NR done Read/Write pod mem */
  103. #define DPMSG_TARG_RDY  0x0010          /* Tgt running in RAM -
  104.                                            NetROM can use pod memory */
  105. #define DPMSG_1K_BIT    0x0400 /* 1K bit of msg length */
  106. /* Overflow buffers are in pod memory just below dual port RAM.  There is
  107.    one for each msg structure and it contains the data that will not fit
  108.    in the msg structure (above 60 bytes). */
  109. #define MAX_MSG_SIZE 1536  /* a full Ethernet packet */
  110. #define MAX_OVF_MSG_SIZE (MAX_MSG_SIZE - DP_DATA_SIZE)
  111. /* 
  112.  * Messages in dual-port ram have the following format:
  113.  *
  114.  * typedef volatile struct _dpMsgStruct {
  115.  *     uInt16 flags;
  116.  *     uInt16 size;
  117.  *     uChar data[DP_DATA_SIZE];
  118.  * } DpMsg;
  119.  *
  120.  * On multi-word targets, each byte of this structure must be read 
  121.  * individually.  For example, on a target with a 16-bit word size, both
  122.  * bytes of which are being emulated, the message will look like:
  123.  *     Pod 0 byte      Pod 1 byte
  124.  * Flags Hi ???
  125.  * Flags Lo ???
  126.  * Size Hi ???
  127.  * Size Lo ???
  128.  * Data 0 ???
  129.  * ... ...
  130.  * Data N ???
  131.  */
  132. /* Structure used to manage character-at-a time i/o in a buffer */
  133. typedef struct _bufIoStruct {
  134.     uInt16 flags; /* buffer flags */
  135.     uInt16 bufsize; /* size of data in the buffer */
  136.     int         index; /* i/o index */
  137.     uChar buf[DP_DATA_SIZE]; /* the buffer */
  138. } BufIo;
  139. /* Structure of a communication channel */
  140. typedef struct _dpChannelStruct {
  141.     int chanflags;       /* flags */
  142.     int numaccess;       /* number of target accesses to rom */
  143.     int oobthresh;       /* out-of-band data threshold */
  144.     int width;       /* bytes in a rom word */
  145.     int index;       /* index of pod 0 in the word */
  146.     Int16  tx;       /* transmit msg structures */
  147.     uInt16  txovf;       /* transmit overflow buffer */
  148.     Int16  txlim;       /* oldest unacked tx msg structure */
  149.     uInt16  txbase;       /* base of transmit msg structures */
  150.     uInt16  txovfbase;       /* base of transmit overflow buffers */
  151.     void      (*wait_nr_done_ptr)();  /* ptr to RAM routine */
  152.     BufIo txbuf;       /* transmit buffer structure */
  153.     Int16 rx;       /* receive msg structures */
  154.     uInt16 rxovf;       /* receive overflow buffer */
  155.     Int16 rxlim;       /* next message location */
  156.     uInt16 rxbase;       /* base of receive msg structures */
  157.     uInt16 rxovfbase;       /* base of receive overflow buffers */
  158.     BufIo rxbuf;       /* receive buffer structure */
  159.     uInt32 dpbase;       /* base of dualport ram */
  160.     uChar rxackval;       /* rx ack value to write in dp ram */
  161.     uInt32      dpbase_plus_index;    /* added to speed up pod READ/WRITE */
  162.     uInt32      rr_enable;            /* read-read enable for this chan */
  163.     uInt32      rr_disable;           /* read-read disable for this chan */
  164. } DpChannel;
  165. #endif /* _dualport_h */