home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.2 (Developer)
/
NS_dev_3.2.iso
/
NextDeveloper
/
Headers
/
driverkit
/
IODevice.h
< prev
next >
Wrap
Text File
|
1993-08-14
|
6KB
|
205 lines
/* Copyright (c) 1991 NeXT Computer, Inc. All rights reserved.
*
* IODevice.h - Interface for generic I/O device class.
*
* HISTORY
* 28-Jan-91 Doug Mitchell at NeXT
* Created.
*/
#import <driverkit/return.h>
#import <driverkit/driverTypes.h>
#import <objc/Object.h>
#ifdef KERNEL
#import <mach/mach_user_internal.h>
#endif KERNEL
#import <driverkit/IODeviceDescription.h>
#import <driverkit/devsw.h>
#define IO_DRIVERKIT_VERSION 320
@interface IODevice: Object
{
@private
int _unit; // like a minor number. Use
// is unique per device.
IOString _deviceName; // E.g., "sd0a". Obtained
// via -name.
IOString _location; // E.g., "0xf7f04000"
IOString _deviceKind; // E.g., "SCSIDisk"
int _IODevice_reserved[4];
}
/*
* Probe method used by direct, indirect, and pseudo devices.
* Implemented by most (not all) subclasses.
*
* Create an instance of subclass to be associated with specified
* deviceDescription. Returns YES if any devices were instantiated.
*/
+ (BOOL)probe : (id)deviceDescription;
/*
* Report basic style of driver (direct, indirect, or pseudo). Must be
* implemented by subclass.
*/
+ (IODeviceStyle)deviceStyle;
/*
* Report protocols needed. Kernel-level indirect devices must implement
* this.
*/
+ (Protocol **)requiredProtocols;
/*
* Must be called from leaf subclass's +initialize method if
* [super initialize] is not called there.
*/
+ (void)registerClass : classId;
/*
* Called if/when a class is being removed from an executable's address
* space.
*/
+ (void)unregisterClass : classId;
/*
* Called to get/set a class's major numbers for block and
* character devices. If the major number is not set,
* it defaults to -1.
*/
+ (void)setBlockMajor : (int)bmajor;
+ (int)blockMajor;
+ (void)setCharacterMajor : (int)cmajor;
+ (int)characterMajor;
/*
* Add functions for this class to the cdevsw/bdevsw tables.
* The major number to use is taken from the class' config table
* in the keys "Character Major" and "Device Major" if present.
* If the keys are not present, the first available major number
* will be used. If there is no room in the devsw table, returns FALSE.
* The class' +characterMajor and +blockMajor methods can be used
* to find the major numbers assigned to the class.
*/
+ (BOOL)addToCdevswFromDescription: (id) deviceDescription
open: (IOSwitchFunc) openFunc
close: (IOSwitchFunc) closeFunc
read: (IOSwitchFunc) readFunc
write: (IOSwitchFunc) writeFunc
ioctl: (IOSwitchFunc) ioctlFunc
stop: (IOSwitchFunc) stopFunc
reset: (IOSwitchFunc) resetFunc
select: (IOSwitchFunc) selectFunc
mmap: (IOSwitchFunc) mmapFunc
getc: (IOSwitchFunc) getcFunc
putc: (IOSwitchFunc) putcFunc;
+ (BOOL) addToBdevswFromDescription: (id) deviceDescription
open: (IOSwitchFunc) openFunc
close: (IOSwitchFunc) closeFunc
strategy: (IOSwitchFunc) strategyFunc
dump: (IOSwitchFunc) dumpFunc
psize: (IOSwitchFunc) psizeFunc
isTape: (BOOL) isTape;
+ (BOOL)removeFromCdevsw;
+ (BOOL)removeFromBdevsw;
/*
* +driverKitVersion returns the version number of the currently
* running DriverKit objects.
* +driverKitVersionForDriverNamed: returns the version number of
* DriverKit that the specified driver was compiled under.
*/
+ (int) driverKitVersion;
+ (int) driverKitVersionForDriverNamed:(char *)driverName;
/*
* Initialize common instance variables. Typically invoked
* via [super init:] in subclass's init: method.
*/
- init;
/*
* Initialize per specified deviceDescription. Returns nil on error.
* This is actually a nop at the IODevice level; subclasses may do with it
* as they see fit.
*/
- initFromDeviceDescription : deviceDescription;
/*
* Free up resources used by this device; invoke Object's free. Instance
* will be "gone" upon return. Typically invoked by subclass; each subclass
* should implement this method to free up resources particular to that
* subclass.
*/
- free;
/*
* Register/unregister instance with current name space.
* Device must be completely initialized and ready for I/O at the
* time -registerDevice is called.
*/
- registerDevice; // nil return means failure
- (void)unregisterDevice;
/*
* Get/Set instance variables.
*/
- (void)setName : (const char *)name;
- (const char *)name;
- (void)setDeviceKind : (const char *)type;
- (const char *)deviceKind;
- (void)setLocation : (const char *)location;
- (const char *)location;
- (void)setUnit : (unsigned)unit;
- (unsigned)unit;
/*
* Obtain device parameters.
*/
- (IOReturn)getIntValues : (unsigned *)parameterArray
forParameter : (IOParameterName)parameterName
count : (unsigned *)count; // in/out
- (IOReturn)getCharValues : (unsigned char *)parameterArray
forParameter : (IOParameterName)parameterName
count : (unsigned *)count; // in/out
- (IOReturn)setIntValues : (unsigned *)parameterArray
forParameter : (IOParameterName)parameterName
count : (unsigned)count;
- (IOReturn)setCharValues : (unsigned char *)parameterArray
forParameter : (IOParameterName)parameterName
count : (unsigned)count;
/*
* Get/Set parameter equivalents of common methods. Used for RPC
* interface. Each is used in getCharValues except IO_UNIT, which returns
* one int in getIntValues.
*/
#define IO_CLASS_NAME "IOClassName" /* +name */
#define IO_DEVICE_NAME "IODeviceName" /* -name */
#define IO_DEVICE_KIND "IODeviceKind" /* -deviceKind */
#define IO_UNIT "IOUnit" /* -unit */
#define IO_BLOCK_MAJOR "IOBlockMajor" /* -blockMajor */
#define IO_CHARACTER_MAJOR "IOCharacterMajor" /* -characterMajor */
/*
* Convert an IOReturn to text. Subclasses which add additional
* IOReturn's should override this method and call [super stringFromReturn]
* if the desired value is not found.
*/
- (const char *)stringFromReturn : (IOReturn)rtn;
+ (const char *)stringFromReturn : (IOReturn)rtn;
/*
* Convert an IOReturn to a Unix errno.
*/
- (int)errnoFromReturn : (IOReturn)rtn;
@end /* IODevice */