home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.2 (Developer) / NS_dev_3.2.iso / NextDeveloper / Headers / driverkit / IODeviceInspector.h < prev    next >
Text File  |  1993-04-19  |  4KB  |  116 lines

  1. /*
  2. ** IODeviceInspector - Inspects IRQ, DMA, port addrs, and mem maps
  3. **
  4. ** This object provides a default implementation of a device inspector.
  5. ** If the driver for which you need to write an inspector is sufficiently
  6. ** strange, you may write a completely new inspector.  Only the methods
  7. ** in the IOConfigurationInspector protocol need be implemented.
  8. **
  9. ** This inspector handles the arbitration of IRQ levels, DMA channels, 
  10. ** and the various address ranges.  If you need to add more controls to 
  11. ** the inspector window, override the init method, load your supplemental
  12. ** nib file, and use the setAccessoryView: method to install it in the
  13. ** UI.
  14. ** 
  15. ** By default, this inspector determines the number of IRQ levels, DMA
  16. ** channels, etc. by examining the first table it is provided with.  To
  17. ** override this behavrio, override init, call [super init], 
  18. ** then [self setNumInterrupts...].
  19. **
  20. ** To use this object with a different nib file, override loadMainNibFile.
  21. **
  22. ** Copyright 1993 by NeXT Computer, Inc.  All Rights Reserved.
  23. */
  24.  
  25. #import <appkit/appkit.h>
  26.  
  27. #define    IO_FIRST_INTERRUPT        1
  28. #define IO_NUM_INTERRUPTS        15
  29. #define IO_FIRST_CHANNEL        0
  30. #define IO_NUM_CHANNELS            8
  31. #define IO_MAX_DEVICES            32
  32. #define IO_MAX_RANGES_PER_DEVICE    16
  33.  
  34. #define IO_MAX_RANGES        (IO_MAX_DEVICES * IO_MAX_RANGES_PER_DEVICE)
  35.  
  36. #define IO_INTERRUPTS_KEY    "IRQ Levels"
  37. #define IO_CHANNELS_KEY        "DMA Channels"
  38. #define IO_PORT_RANGES_KEY    "I/O Ports"
  39. #define IO_MEMORY_RANGES_KEY    "Memory Maps"
  40. #define IO_VALID_INTERRUPTS_KEY    "Valid IRQ Levels"
  41. #define IO_VALID_CHANNELS_KEY    "Valid DMA Channels"
  42.  
  43. typedef enum { 
  44.     IO_ConflictUnknown = 0, IO_NoConflict, IO_ConflictExists 
  45. } IOConfigurationConflict;
  46.  
  47. typedef struct IOAddressRange
  48. {
  49.     unsigned    start;
  50.     unsigned    length;
  51. } IOAddressRange;
  52.     
  53. typedef struct IOResources
  54. {
  55.     BOOL        interrupts[IO_NUM_INTERRUPTS];
  56.     BOOL        channels[IO_NUM_CHANNELS];
  57.     unsigned        numPortRanges;
  58.     IOAddressRange      portRanges[IO_MAX_RANGES];
  59.     unsigned        numMemoryRanges;
  60.     IOAddressRange    memoryRanges[IO_MAX_RANGES];
  61. } IOResources;
  62.  
  63. @protocol IOConfigurationInspector
  64. - setTable:(NXStringTable *)instance;
  65. - (View *) inspectionView;
  66. - resourcesChanged:(IOResources *)rsrc;
  67. @end
  68.  
  69. @interface IODeviceInspector:Object <IOConfigurationInspector>
  70. {
  71.     id    accessoryHolder;        /* View where we put accessory */
  72.     id    statusTitle;            /* At top of window */
  73.     id  origWindow;            /* For getting contentView */
  74.     
  75.     id  dmaBox;                /* In case no DMA channels */
  76.     id    dmaMatrix;            /* Buttons for DMA channels */
  77.     id  irqBox;                /* In case no IRQ levels */
  78.     id    irqMatrix;            /* Buttons for IRQ levels */
  79.     id    memoryBox;            /* In case no mapped memory */
  80.     id    memoryController;        /* Handles ranges */
  81.     id    portsBox;            /* In case no port addresses */
  82.     id    portsController;        /* Handles ranges */
  83.     
  84.     id  inspectionView;            /* The inspection view */
  85.     id  infoButton;            /* Brings up device info panel */
  86.     id  infoPanel;            /* Text about the device */
  87.     id  infoText;            /* Text object for info file */
  88.         
  89.     NXStringTable  *table;        /* Device we're editing */
  90.     int           numInterrupts;    /* How many IRQ's to configure */
  91.     int           numChannels;        /* How many DMA's to configure */
  92.     int           portRangeLength;    /* Port address size */
  93.     int           memoryRangeLength;    /* Memory map size */
  94.     
  95.     BOOL       infoTextLoaded;    /* Info panel has been loaded */
  96.     BOOL       knowsDetails;    /* Knows device's requirements */
  97.     
  98.     /* Conflict status on last update, used to minimize redraws */
  99.     
  100.     IOConfigurationConflict    portConflict;    /* Had conflict w/portaddrs? */
  101.     IOConfigurationConflict    memoryConflict;    /* Had conflict w/memmap? */
  102.     IOConfigurationConflict    totalConflict;    /* Any conflicts at all? */
  103. }
  104.  
  105. - setNumInterrupts:(int)nirq numChannels:(int)ndma portRangeLength:(int)nport 
  106.     memoryRangeLength:(int)nmap;
  107. - loadMainNibFile;
  108. - setAccessoryView:aView;
  109.  
  110. - channelOrInterruptPicked:sender;
  111. - showInfo:sender;
  112.  
  113. - rangeDidChange:sender;
  114.  
  115. @end
  116.