home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_03_04 / 3n04012a < prev    next >
Text File  |  1992-02-20  |  3KB  |  128 lines

  1. typedef unsigned char BYTE;
  2. typedef unsigned int  USHORT;
  3. typedef unsigned long ULONG;
  4.  
  5. #define LOBYTE(w)    ((BYTE)(w))
  6. #define HIBYTE(w)    ((BYTE)(((USHORT)(w) >> 8) & 0xff))
  7. #define LOUSHORT(l)    ((USHORT)(l))
  8. #define HIUSHORT(l)    ((USHORT)(((ULONG)(l) >> 16) & 0xffff))
  9. #define MAKEULONG(l, h) ((ULONG)(((USHORT)(l)) | ((ULONG)((USHORT)(h))) << 16))
  10.  
  11. #define VDS_SERVICES             0x81
  12. #define VDS_LOCK                 0x03
  13. #define VDS_UNLOCK               0x04
  14. #define VDS_ENABLE_TRANSLATION   0x0B
  15. #define VDS_DISABLE_TRANSLATION  0x0C
  16. #define VDS_FLAGS_COPY           0x02 
  17. #define VDS_FLAGS_ALIGN64K       0x10 
  18. #define VDS_FLAGS_ALIGN128K      0x20 
  19.  
  20. // DMA controller addresses and commands
  21. #define DMA_type_write  0x04
  22. #define DMA_type_read   0x08
  23. #define Transfer_Data    0x04
  24. #define Write_Mem          0x08
  25.  
  26. // Base address of DMA controllers
  27. #define DMA_CONTROLLER_0_3 0x00
  28. #define DMA_CONTROLLER_4_7 0xC0
  29.  
  30. // Offset from base of specific DMA controller registers
  31. #define DMA_OFFSET_ADDRESS 0x00
  32. #define DMA_OFFSET_COUNT   0x01
  33. #define DMA_OFFSET_STATUS  0x08
  34. #define DMA_OFFSET_MASK    0x0A
  35. #define DMA_OFFSET_MODE    0x0B
  36. #define DMA_OFFSET_CLEAR   0x0C
  37.  
  38. // Address of page registers for each channel
  39. #define DMA_PAGE_0      0x87
  40. #define DMA_PAGE_1      0x83
  41. #define DMA_PAGE_2      0x81
  42. #define DMA_PAGE_3      0x82
  43. #define DMA_PAGE_4      0x8F
  44. #define DMA_PAGE_5      0x8B
  45. #define DMA_PAGE_6      0x89
  46. #define DMA_PAGE_7      0x8A
  47.  
  48. //  MicroChannel specific ports
  49. #define DMA_XFN           0x18
  50. #define DMA_EXE           0x1A
  51.  
  52. // MicroChannel extended commands
  53. #define Set_IO_Adr        0x00
  54. #define Set_Mem_Adr        0x20
  55. #define Get_Mem_Adr        0x30
  56. #define Set_Count           0x40
  57. #define Get_Count           0x50
  58. #define Get_Status        0x60
  59. #define Set_Mode           0x70
  60. #define Set_Arbus           0x80
  61. #define Set_Chn_Mask        0x90
  62. #define Reset_Chn_Mask    0xA0
  63. #define Master_Clear       0xD0
  64.  
  65. #define BUS_MICROCHANNEL   01
  66. #define BUS_AT_ISA         02
  67.  
  68. #ifdef DOS
  69. #define GET_PHYS_ADDR( pchar, dmastruc, bufstruc ) \
  70.    Dos_GetPhysAddr( pchar, dmastruc )
  71. #endif
  72. #ifdef WIN3
  73. #define GET_PHYS_ADDR( pchar, dmastruc, bufstruc ) \
  74.    Win3_GetPhysAddr( pchar, dmastruc )
  75. #endif
  76. #ifdef OS2
  77. #define GET_PHYS_ADDR( pchar, dmastruc, bufstruc ) \
  78.    OS2_GetPhysAddr( pchar, dmastruc, bufstruc )
  79. #endif
  80.  
  81. typedef enum
  82. {
  83.   TRANSFER_READ_FROM_MEM,
  84.   TRANSFER_WRITE_TO_MEM
  85. } TRANSFER_TYPE;
  86.  
  87. typedef struct
  88. {
  89.    ULONG    Size;
  90.    ULONG    Linear;
  91.    USHORT   Selector;
  92.    USHORT   BufferID;
  93.    ULONG    Physical;
  94. } DMA_DESCRIPTOR;
  95.  
  96. typedef struct 
  97. {
  98.    ULONG    PhysAddr;      // used only by OS/2 drivers
  99.    char     *pStart;       // first byte in buffer
  100.    char     *pEnd;         // last byte in buffer 
  101.    char     *pIn;          // next byte to be added
  102.    char     *pOut;         // next byte to be removed
  103.    USHORT   Size;          // total size of buffer  
  104. } BUF_INFO;
  105.  
  106. typedef struct 
  107. {
  108.    BUF_INFO RxBuf;      
  109.    BUF_INFO TxBuf; 
  110.    BYTE     BusType;             
  111.    BYTE     Channel;
  112.    TRANSFER_TYPE TransferType;   // read or write
  113.    ULONG    TransferPhys;        // physical address of buffer for DMA transfer
  114.    USHORT   TransferCount;       // number of bytes for DMA transfer
  115.    char **far *pVDSInfo;   
  116. } DMA_INFO;
  117.  
  118. typedef struct
  119. {
  120.   unsigned int   DeviceRdyToTx:1;  
  121.   unsigned int   DeviceRdyToRx:1;  
  122.   unsigned int   DmaComplete:1;
  123.   unsigned int   DmaAbort:1;
  124. } INTERRUPT_TYPE;
  125.  
  126.  
  127.  
  128.