home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Headers / driverkit / i386 / directDevice.h next >
Text File  |  1994-08-09  |  5KB  |  185 lines

  1. /*
  2.  * Copyright (c) 1993 NeXT Computer, Inc.
  3.  *
  4.  * ISA/EISA direct device interface.
  5.  *
  6.  * HISTORY
  7.  *
  8.  * 10Jan93 Brian Pinkerton at NeXT
  9.  *    Created.
  10.  *
  11.  */
  12. #import <driverkit/IODirectDevice.h>
  13. #import <driverkit/i386/IOEISADeviceDescription.h>
  14. #import <driverkit/i386/driverTypes.h>
  15.  
  16.  
  17. @interface IODirectDevice(IOEISADirectDevice)
  18.  
  19.  
  20. /*
  21.  * Determine whether localChannel's DMA is complete.
  22.  */
  23. - (BOOL) isDMADone:(unsigned int) localChannel;
  24.  
  25. /*
  26.  *  Methods to reserve and enable DMA channels.  Also, methods to obtain
  27.  *  buffers for DMA, and do DMA using those buffers.
  28.  */
  29. - (IOReturn) enableChannel    : (unsigned int) localChannel;
  30. - (void) disableChannel        : (unsigned int) localChannel;
  31.  
  32. /*
  33.  * Specify basic DMA transfer mode.
  34.  */
  35. typedef enum {
  36.     IO_Demand,
  37.     IO_Single,
  38.     IO_Block,
  39.     IO_Cascade,
  40. } IODMATransferMode;
  41.  
  42. - (IOReturn) setTransferMode    : (IODMATransferMode) mode 
  43.              forChannel : (unsigned int) localChannel;
  44.  
  45. /*
  46.  * Enable/disable autoinitialize DMA mode. Default is 
  47.  * disabled.
  48.  */
  49. - (IOReturn)setAutoinitialize      : (BOOL)flag
  50.                     forChannel     : (unsigned)localChannel;
  51.  
  52. /*
  53.  * Set DMA address increment/decrement mode.
  54.  * Default is IO_Increment.
  55.  */
  56. typedef enum {
  57.     IO_Increment,
  58.     IO_Decrement,
  59. } IOIncrementMode;
  60.  
  61. - (IOReturn)setIncrementMode       : (IOIncrementMode)mode
  62.                     forChannel     : (unsigned)localChannel;
  63.  
  64. /*
  65.  *  Returns a DMA buffer for the contents of physical memory starting at
  66.  *  addr and continuing for length bytes.  If the physical address changed
  67.  *  to accommodate the ISA bus, the new physical address is returned in
  68.  *  place.  The IOEISADMABuffer is an opaque type.
  69.  */
  70. - (IOEISADMABuffer) createDMABufferFor:(unsigned int *) physAddr
  71.              length    : (unsigned int) length
  72.                read : (BOOL) isRead
  73.          needsLowMemory : (BOOL) lowerMem
  74.               limitSize : (BOOL) limitSize;
  75.  
  76. /*
  77.  *  Complete DMA on, and free, the given DMABuffer.  If the DMA was a read,
  78.  *  and the buffer relocated the original physical memory, then the relocated
  79.  *  memory is copied to the source in this step.
  80.  */
  81. - (void) freeDMABuffer        : (IOEISADMABuffer) buffer;
  82.  
  83. /*
  84.  *  Like -freeDMABuffer, except it doesn't copy the memory.
  85.  */
  86. - (void) abortDMABuffer        : (IOEISADMABuffer) buffer;
  87.  
  88. /*
  89.  *  Perform host-master DMA using the given DMABuffer on the given DMA channel.
  90.  */
  91. - (IOReturn) startDMAForBuffer    : (IOEISADMABuffer) buffer
  92.             channel : (unsigned int) localChannel;
  93.  
  94. /*
  95.  * Return localChannel's current address and count.
  96.  */
  97. - (unsigned)currentAddressForChannel : (unsigned)localChannel; 
  98. - (unsigned)currentCountForChannel   : (unsigned)localChannel;
  99.  
  100. /*
  101.  *  Methods to reserve resources.  You don't normally need to call these, as
  102.  *  they're called automatically when IOEISADirectDevice is initialized with
  103.  *  the -initFromDeviceDescription method.
  104.  */
  105. - (IOReturn) reservePortRange    : (unsigned int) localPortRange;
  106. - (void) releasePortRange    : (unsigned int) localPortRange;
  107.  
  108. - (IOReturn) reserveInterrupt    : (unsigned int)localInterrupt;
  109. - (void) releaseInterrupt    : (unsigned int) localInterrupt;
  110.  
  111. - (IOReturn) reserveChannel    : (unsigned int) localChannel;
  112. - (void) releaseChannel        : (unsigned int) localChannel;
  113.  
  114. /*
  115.  * Reserve and release exclusive DMA lock. Use is optional; provides
  116.  * exclusion between mutually incompatible DMA devices.
  117.  */
  118. - (void)reserveDMALock;
  119. - (void)releaseDMALock;
  120.  
  121. /*
  122.  * Determine whether or not the associated device is connected to an EISA 
  123.  * bus. Returns YES if so, else returns NO.
  124.  */
  125. - (BOOL)isEISAPresent;
  126.  
  127. /*
  128.  * Get the EISA id for the specified slot.
  129.  * Returns YES if slot is valid, else returns NO.
  130.  */
  131. - (BOOL)getEISAId: (unsigned int *) _id  forSlot: (int) slot;
  132.  
  133. /*
  134.  * Support for the extended mode register (EISA only).
  135.  */
  136.  
  137. /*
  138.  * Select transfer width. Default is IO_8Bit.
  139.  */
  140. typedef enum {
  141.     IO_8Bit,            // 8  bit I/O, count by bytes
  142.     IO_16BitWordCount,        // 16 bit I/O, count by words
  143.                     //   (not currently supported)
  144.     IO_16BitByteCount,        // 16 bit I/O, count by bytes
  145.     IO_32Bit,            // 32 bit I/O, count by bytes
  146. } IOEISADMATransferWidth;
  147.  
  148.  
  149. - (IOReturn)setDMATransferWidth    : (IOEISADMATransferWidth)width
  150.                      forChannel : (unsigned)localChannel;
  151. - (IOReturn)getDMATransferWidth    : (IOEISADMATransferWidth *)width_p
  152.                      forChannel : (unsigned)localChannel;
  153.  
  154. /*
  155.  * Select DMA Timing. Default is IO_Compatible. 
  156.  */
  157. typedef enum {
  158.     IO_Compatible,    
  159.     IO_TypeA,
  160.     IO_TypeB,
  161.     IO_Burst,    
  162. } IOEISADMATiming;
  163.  
  164. - (IOReturn)setDMATiming    : (IOEISADMATiming)timing
  165.                      forChannel : (unsigned)localChannel;
  166.  
  167. /*
  168.  * Select whether EOP pin is output (default) or input.
  169.  */
  170. - (IOReturn)setEOPAsOutput    : (BOOL)flag
  171.                      forChannel    : (unsigned)localChannel;
  172.  
  173. /*
  174.  * Enable Stop register. Default is disabled.
  175.  */
  176. typedef enum {
  177.     IO_StopRegisterEnable,
  178.     IO_StopRegisterDisable,
  179. } IOEISAStopRegisterMode;
  180.  
  181. - (IOReturn)setStopRegisterMode : (IOEISAStopRegisterMode)mode
  182.                     forChannel     : (unsigned)localChannel;
  183.  
  184. @end
  185.