home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.2 (Developer) / NS_dev_3.2.iso / NextDeveloper / Headers / driverkit / IODevice.h < prev    next >
Text File  |  1993-08-14  |  6KB  |  205 lines

  1. /*     Copyright (c) 1991 NeXT Computer, Inc.  All rights reserved. 
  2.  *
  3.  * IODevice.h - Interface for generic I/O device class.
  4.  *
  5.  * HISTORY
  6.  * 28-Jan-91    Doug Mitchell at NeXT
  7.  *      Created. 
  8.  */
  9.  
  10. #import <driverkit/return.h>
  11. #import <driverkit/driverTypes.h>
  12. #import <objc/Object.h>
  13. #ifdef    KERNEL
  14. #import <mach/mach_user_internal.h>
  15. #endif    KERNEL
  16. #import <driverkit/IODeviceDescription.h>
  17. #import <driverkit/devsw.h>
  18.  
  19. #define IO_DRIVERKIT_VERSION    320
  20.  
  21. @interface IODevice: Object
  22. {
  23. @private
  24.     int        _unit;            // like a minor number. Use
  25.                         // is unique per device.
  26.     IOString    _deviceName;        // E.g., "sd0a". Obtained
  27.                         //   via -name.
  28.     IOString    _location;        // E.g., "0xf7f04000"
  29.     IOString    _deviceKind;        // E.g., "SCSIDisk"
  30.     int        _IODevice_reserved[4];
  31. }
  32.  
  33. /*
  34.  * Probe method used by direct, indirect, and pseudo devices. 
  35.  * Implemented by most (not all) subclasses.
  36.  * 
  37.  * Create an instance of subclass to be associated with specified 
  38.  * deviceDescription. Returns YES if any devices were instantiated.
  39.  */
  40. + (BOOL)probe : (id)deviceDescription;
  41.  
  42. /*
  43.  * Report basic style of driver (direct, indirect, or pseudo). Must be 
  44.  * implemented by subclass.
  45.  */
  46. + (IODeviceStyle)deviceStyle;
  47.  
  48. /*
  49.  * Report protocols needed. Kernel-level indirect devices must implement
  50.  * this.
  51.  */
  52. + (Protocol **)requiredProtocols;
  53.  
  54. /*
  55.  * Must be called from leaf subclass's +initialize method if 
  56.  * [super initialize] is not called there. 
  57.  */
  58. + (void)registerClass : classId;
  59.  
  60. /*
  61.  * Called if/when a class is being removed from an executable's address
  62.  * space.
  63.  */
  64. + (void)unregisterClass : classId;
  65.  
  66. /*
  67.  * Called to get/set a class's major numbers for block and
  68.  * character devices.  If the major number is not set,
  69.  * it defaults to -1.
  70.  */
  71. + (void)setBlockMajor        : (int)bmajor;
  72. + (int)blockMajor;
  73. + (void)setCharacterMajor    : (int)cmajor;
  74. + (int)characterMajor;
  75.  
  76. /*
  77.  * Add functions for this class to the cdevsw/bdevsw tables.
  78.  * The major number to use is taken from the class' config table
  79.  * in the keys "Character Major" and "Device Major" if present.
  80.  * If the keys are not present, the first available major number
  81.  * will be used.  If there is no room in the devsw table, returns FALSE.
  82.  * The class' +characterMajor and +blockMajor methods can be used
  83.  * to find the major numbers assigned to the class.
  84.  */
  85. + (BOOL)addToCdevswFromDescription: (id) deviceDescription
  86.     open:    (IOSwitchFunc) openFunc
  87.     close:    (IOSwitchFunc) closeFunc
  88.     read:    (IOSwitchFunc) readFunc
  89.     write:    (IOSwitchFunc) writeFunc
  90.     ioctl:    (IOSwitchFunc) ioctlFunc
  91.     stop:    (IOSwitchFunc) stopFunc
  92.     reset:    (IOSwitchFunc) resetFunc
  93.     select:    (IOSwitchFunc) selectFunc
  94.     mmap:    (IOSwitchFunc) mmapFunc
  95.     getc:    (IOSwitchFunc) getcFunc
  96.     putc:    (IOSwitchFunc) putcFunc;
  97. + (BOOL) addToBdevswFromDescription: (id) deviceDescription
  98.     open:    (IOSwitchFunc) openFunc
  99.     close:    (IOSwitchFunc) closeFunc
  100.     strategy:    (IOSwitchFunc) strategyFunc
  101.     dump:    (IOSwitchFunc) dumpFunc
  102.     psize:    (IOSwitchFunc) psizeFunc
  103.     isTape:    (BOOL) isTape;
  104. + (BOOL)removeFromCdevsw;
  105. + (BOOL)removeFromBdevsw;
  106.  
  107. /*
  108.  * +driverKitVersion returns the version number of the currently
  109.  * running DriverKit objects.
  110.  * +driverKitVersionForDriverNamed: returns the version number of
  111.  * DriverKit that the specified driver was compiled under.
  112.  */
  113.  
  114. + (int) driverKitVersion;
  115. + (int) driverKitVersionForDriverNamed:(char *)driverName;
  116.  
  117. /*
  118.  * Initialize common instance variables. Typically invoked
  119.  * via [super init:] in subclass's init: method.
  120.  */
  121. - init;
  122.  
  123. /* 
  124.  * Initialize per specified deviceDescription. Returns nil on error. 
  125.  * This is actually a nop at the IODevice level; subclasses may do with it 
  126.  * as they see fit.
  127.  */
  128. - initFromDeviceDescription : deviceDescription;
  129.  
  130. /*
  131.  * Free up resources used by this device; invoke Object's free. Instance 
  132.  * will be "gone" upon return. Typically invoked by subclass; each subclass
  133.  * should implement this method to free up resources particular to that 
  134.  * subclass.
  135.  */
  136. - free;
  137.  
  138. /*
  139.  * Register/unregister instance with current name space.  
  140.  * Device must be completely initialized and ready for I/O at the 
  141.  * time -registerDevice is called.
  142.  */
  143. - registerDevice;        // nil return means failure
  144. - (void)unregisterDevice;
  145.  
  146. /*
  147.  * Get/Set instance variables. 
  148.  */
  149. - (void)setName            : (const char *)name;    
  150. - (const char *)name;    
  151. - (void)setDeviceKind        : (const char *)type;    
  152. - (const char *)deviceKind;    
  153. - (void)setLocation        : (const char *)location;    
  154. - (const char *)location;    
  155. - (void)setUnit            : (unsigned)unit;
  156. - (unsigned)unit;
  157.  
  158. /*
  159.  * Obtain device parameters.
  160.  */
  161. - (IOReturn)getIntValues        : (unsigned *)parameterArray
  162.                forParameter : (IOParameterName)parameterName
  163.                       count : (unsigned *)count;    // in/out
  164.  
  165. - (IOReturn)getCharValues        : (unsigned char *)parameterArray
  166.                forParameter : (IOParameterName)parameterName
  167.                       count : (unsigned *)count;    // in/out
  168.             
  169. - (IOReturn)setIntValues        : (unsigned *)parameterArray
  170.                forParameter : (IOParameterName)parameterName
  171.                       count : (unsigned)count;
  172.  
  173. - (IOReturn)setCharValues        : (unsigned char *)parameterArray
  174.                forParameter : (IOParameterName)parameterName
  175.                       count : (unsigned)count;
  176.       
  177. /*
  178.  * Get/Set parameter equivalents of common methods. Used for RPC
  179.  * interface. Each is used in getCharValues except IO_UNIT, which returns
  180.  * one int in getIntValues.
  181.  */
  182. #define    IO_CLASS_NAME        "IOClassName"        /* +name */
  183. #define IO_DEVICE_NAME        "IODeviceName"        /* -name */
  184. #define IO_DEVICE_KIND        "IODeviceKind"        /* -deviceKind */
  185. #define IO_UNIT            "IOUnit"        /* -unit */
  186. #define IO_BLOCK_MAJOR        "IOBlockMajor"        /* -blockMajor */
  187. #define IO_CHARACTER_MAJOR    "IOCharacterMajor"    /* -characterMajor */
  188.  
  189. /*
  190.  * Convert an IOReturn to text. Subclasses which add additional
  191.  * IOReturn's should override this method and call [super stringFromReturn] 
  192.  * if the desired value is not found.
  193.  */
  194. - (const char *)stringFromReturn : (IOReturn)rtn;
  195. + (const char *)stringFromReturn : (IOReturn)rtn;
  196.  
  197. /*
  198.  * Convert an IOReturn to a Unix errno.
  199.  */
  200. - (int)errnoFromReturn : (IOReturn)rtn;
  201.  
  202. @end        /* IODevice */
  203.  
  204.  
  205.