Annotation of ntddk/src/mmedia/sndblst/driver/hardware.h, revision 1.1.1.1

1.1       root        1: 
                      2: /*++ BUILD Version: 0002    // Increment this if a change has global effects
                      3: 
                      4: 
                      5: Copyright (c) 1992  Microsoft Corporation
                      6: 
                      7: Module Name:
                      8: 
                      9:     hardware.h
                     10: 
                     11: Abstract:
                     12: 
                     13:     This include file defines constants and types for
                     14:     the Sound Blaster card.
                     15: 
                     16: Author:
                     17: 
                     18:     Robin Speed (RobinSp) 20-Oct-92
                     19: 
                     20: Revision History:
                     21: 
                     22: --*/
                     23: 
                     24: //
                     25: // Configuration info
                     26: //
                     27: 
                     28: #define INTERRUPT_MODE      Latched
                     29: #define IRQ_SHARABLE        FALSE
                     30: #define SOUND_DEF_DMACHANNEL 1        // DMA channel no
                     31: #define SOUND_DEF_INT        7
                     32: #define SOUND_DEF_PORT       0x220
                     33: 
                     34: #define SB_BASE_PORT        0x220
                     35: 
                     36: 
                     37: #define NUMBER_OF_SOUND_PORTS (0xf)
                     38: 
                     39: //
                     40: // Don't support pre dsp version 1
                     41: //
                     42: 
                     43: #define MIN_DSP_VERSION     0x0100
                     44: 
                     45: //
                     46: // Defaults
                     47: //
                     48: 
                     49: #define WAVE_INPUT_DEFAULT_RATE  11025 // Samples per second
                     50: #define WAVE_OUTPUT_DEFAULT_RATE 11025 // Samples per second
                     51: 
                     52: //
                     53: // Port offsets from the base address
                     54: //
                     55: 
                     56: #define MIX_ADDR_PORT       0x04    // Mixer ports
                     57: 
                     58: #define VOICE_VOL_REG       0x04    // The mixer registers to use to set vol
                     59: #define        MIC_MIX_REG         0x0A
                     60: #define        LINEIN_VOL_REG      0x2E
                     61: #define        SYNTH_VOL_REG       0x26
                     62: #define        OUTPUT_SETTING_REG  0x0E
                     63: 
                     64: #define MIX_DATA_PORT       0x05       // Where to write volume
                     65: 
                     66: #define DATA_AVAIL_PORT     0x0E    // data available port offset
                     67: #define DATA_STATUS_PORT    0x0C    // write data staus port
                     68: #define DATA_PORT           0x0A    // data port offset
                     69: #define RESET_PORT          0x06    // dsp reset port
                     70: 
                     71: //
                     72: // Version checking
                     73: //
                     74: 
                     75: #define SB1(pHw) ((pHw)->DSPVersion < 0x200)
                     76: #define SB2(pHw) ((pHw)->DSPVersion >= 0x200)
                     77: #define SBPRO(pHw) ((pHw)->DSPVersion >= 0x300)
                     78: 
                     79: //
                     80: // DSP commands
                     81: //
                     82: 
                     83: #define DSP_GET_VERSION     0xE1    // dsp version command
                     84: #define DSP_SPEAKER_ON      0xD1    // speaker on command
                     85: #define DSP_SPEAKER_OFF     0xD3    // speaker off command
                     86: #define DSP_SET_SAMPLE_RATE 0x40    // set the sample rate
                     87: #define DSP_SET_BLOCK_SIZE  0x48    // set dma block size
                     88: #define DSP_WRITE           0x14    // Start non-auto DMA
                     89: #define DSP_WRITE_AUTO      0x1C    // auto init output mode
                     90: #define DSP_READ            0x24    // Start non-auto read
                     91: #define DSP_READ_AUTO       0x2C    // auto init mode input
                     92: #define DSP_HALT_DMA        0xD0    // stop dma
                     93: #define DSP_CONTINUE_DMA    0xD4    // continue halted dma
                     94: #define DSP_STOP_AUTO       0xDA    // exit from auto init mode
                     95: #define DSP_MIDI_READ       0x31    // Interrupt driver midi input
                     96: #define DSP_MIDI_READ_UART  0x35    // Interrupt driver midi input (uart mode)
                     97: #define DSP_MIDI_TS_READ    0x37    // Midi time-stamped read
                     98: #define DSP_MIDI_WRITE      0x38    // Midi output
                     99: #define DSP_GENERATE_INT    0xF2    // Special code to generate a interrupt
                    100: 
                    101: //
                    102: // Hardware state data
                    103: //
                    104: 
                    105: typedef struct {
                    106:        ULONG           Key;                // For debugging
                    107: #define HARDWARE_KEY           (*(ULONG *)"Hw  ")
                    108: 
                    109:        //
                    110:        // Configuration
                    111:        //
                    112: 
                    113:        USHORT          DSPVersion;         // Card version
                    114:        BOOLEAN         ThunderBoard;       // it's a Thunderboard
                    115: 
                    116:     PUCHAR          PortBase;           // base port address for sound
                    117:        KSPIN_LOCK      HwSpinLock;         // Make sure we can write
                    118:                                            // or read after checking status
                    119:                                                                                // before someone else gets in!
                    120:                                                                                // (could it be a spectrum?)
                    121: 
                    122:        UCHAR           Half;               // For keeping in synch for SB1
                    123:     BOOLEAN         SpeakerOn;          // Speaker is on - prevent crash
                    124:                                         // restarting DMA from Dpc routine
                    125: #if DBG
                    126:        BOOLEAN         LockHeld;           // Get spin lock right
                    127: #endif // DBG
                    128: 
                    129:        //
                    130:        // Hardware data
                    131:        //
                    132: 
                    133:        BOOLEAN         Stereo;             // Was format stereo last time?
                    134:        UCHAR           Format;             // Current wave format sent to device
                    135:        UCHAR           InputSource;        // Where is input configured to?
                    136: } SOUND_HARDWARE, *PSOUND_HARDWARE;
                    137: 
                    138: //
                    139: // Macros to assist in safely using our spin lock
                    140: //
                    141: 
                    142: #if DBG
                    143: #define HwEnter(pHw)                    \
                    144:     {                                      \
                    145:        KIRQL OldIrql;                      \
                    146:        KeAcquireSpinLock(&(pHw)->HwSpinLock, &OldIrql);\
                    147:        ASSERT((pHw)->LockHeld == FALSE); \
                    148:        (pHw)->LockHeld = TRUE;
                    149: 
                    150: #define HwLeave(pHw)                    \
                    151:        ASSERT((pHw)->LockHeld == TRUE);  \
                    152:        (pHw)->LockHeld = FALSE;          \
                    153:        KeReleaseSpinLock(&(pHw)->HwSpinLock, OldIrql);\
                    154:     }
                    155: #else
                    156: #define HwEnter(pHw)                    \
                    157:     {                                      \
                    158:        KIRQL OldIrql;                      \
                    159:        ASSERT((pHw)->LockHeld == FALSE); \
                    160:        KeAcquireSpinLock(&(pHw)->HwSpinLock, &OldIrql);
                    161: 
                    162: #define HwLeave(pHw)                    \
                    163:        ASSERT((pHw)->LockHeld == TRUE);  \
                    164:        KeReleaseSpinLock(&(pHw)->HwSpinLock, OldIrql);\
                    165:     }
                    166: #endif
                    167: 
                    168: //
                    169: // Devices - these values are also used as array indices
                    170: //
                    171: 
                    172: typedef enum {
                    173:    WaveInDevice = 0,
                    174:    WaveOutDevice,
                    175:    MidiOutDevice,
                    176:    MidiInDevice,
                    177:    LineInDevice,
                    178: #ifdef MICMIX
                    179:    MicDevice,
                    180: #endif // MICMIX
                    181: #ifdef MASTERVOLUME
                    182:    MasterVolumeDevice,
                    183: #endif // MASTERVOLUME
                    184:    NumberOfDevices
                    185: } SOUND_DEVICES;
                    186: 
                    187: //
                    188: // macros for doing port reads
                    189: //
                    190: 
                    191: #define INPORT(pHw, port) \
                    192:         READ_PORT_UCHAR((PUCHAR)((pHw->PortBase) + (port)))
                    193: 
                    194: #define OUTPORT(pHw, port, data) \
                    195:         WRITE_PORT_UCHAR((PUCHAR)((pHw->PortBase) + (port)), (UCHAR)(data))
                    196: 
                    197: 
                    198: //
                    199: // Exported routines
                    200: //
                    201: VOID
                    202: HwSetVolume(
                    203:     IN PLOCAL_DEVICE_INFO pLDI
                    204: );
                    205: UCHAR
                    206: dspRead(
                    207:     IN    PSOUND_HARDWARE pHw
                    208: );
                    209: BOOLEAN
                    210: dspReset(
                    211:     PSOUND_HARDWARE pHw
                    212: );
                    213: BOOLEAN
                    214: dspWrite(
                    215:     PSOUND_HARDWARE pHw,
                    216:     UCHAR value
                    217: );
                    218: USHORT
                    219: dspGetVersion(
                    220:     PSOUND_HARDWARE pHw
                    221: );
                    222: BOOLEAN
                    223: dspSpeakerOn(
                    224:     PSOUND_HARDWARE pHw
                    225: );
                    226: BOOLEAN
                    227: dspSpeakerOff(
                    228:     PSOUND_HARDWARE pHw
                    229: );
                    230: 
                    231: 
                    232: 
                    233: /****************************************************************************
                    234:  *
                    235:  * Definitions for Media Vision Pro Audio Spectrum
                    236:  *
                    237:  ****************************************************************************/
                    238: 
                    239: //==========================================================================
                    240: //
                    241: // Definitions from pasdef.h
                    242: //
                    243: //==========================================================================
                    244: 
                    245: //
                    246: // THESE DEFINITIONS FOR CAPABILITIES FILED
                    247: //
                    248: 
                    249: 
                    250: #define  DEFAULT_BASE            0x388    // default base I/O address of Pro AudioSpectrum
                    251: 
                    252: //// THESE ARE BASE REGISTER ATES
                    253: 
                    254: //
                    255: // Used only during initialization
                    256: //
                    257: 
                    258: #define  PCM_CONTROL                   0x0f8a  //
                    259: 
                    260: #define  ENHANCED_SCSI_DETECT_REG      0x7f89  //
                    261: 
                    262: #define  SYSTEM_CONFIG_1               0x8388  //
                    263: #define  SYSTEM_CONFIG_2               0x8389  //
                    264: #define  SYSTEM_CONFIG_3               0x838a  //
                    265: #define  SYSTEM_CONFIG_4               0x838b  //
                    266: 
                    267: #define  IO_PORT_CONFIG_1              0xf388  //
                    268: #define  IO_PORT_CONFIG_2              0xf389  //
                    269: #define  IO_PORT_CONFIG_3              0xf38a  //
                    270: 
                    271: #define  COMPATIBLE_REGISTER_ENABLE    0xf788  // SB and MPU emulation
                    272: #define  EMULATION_ADDRESS_POINTER     0xf789  // D0-D3 is SB; D4-D7 is MPU
                    273: 
                    274: #define  EMULATION_INTERRUPT_POINTER   0xfb8a  // MPU and SB IRQ and SB DMA settings
                    275: 
                    276: #define  CHIP_REV                      0xff88  // MV101 chip revision number
                    277: #define  MASTER_MODE_READ              0xff8b  // aka Master Address Pointer
                    278: 
                    279: //
                    280: // Used for volume setting
                    281: //
                    282: 
                    283: #define  MIXER_508_REG                 0x078b  // Mixer 508             1 port
                    284: 
                    285: #define  SERIAL_MIXER                  0x0b88  // for Pas 1 and Pas 8
                    286: #define  FEATURE_ENABLE                0x0b88  // for Pas 16 boards only
                    287: #define  INTERRUPT_ENABLE              0x0b89  //
                    288: #define  FILTER_REGISTER               0x0b8a  //
                    289: #define  INTERRUPT_CTRL_REG            0x0b8b  //
                    290: 
                    291: 
                    292: //
                    293: // Only one of each of these
                    294: //
                    295: 
                    296: #define  PAS_2_WAKE_UP_REG             0x9a01  // aka Master Address Pointer
                    297: 
                    298: 
                    299: //
                    300: // Not used here
                    301: //
                    302: 
                    303: #define  TIMEOUT_COUNTER               0x4388  //
                    304: #define  TIMEOUT_STATUS                0x4389  //
                    305: #define  WAIT_STATE                    0xbf88  //
                    306: #define  PRESCALE_DIVIDER              0xbf8A  //
                    307: 
                    308: #define  SLAVE_MODE_READ               0xef8b  // bits D0-D1
                    309: 
                    310: 
                    311: 
                    312: #define READ_PAS(pGDI, port) \
                    313:         READ_PORT_UCHAR((PUCHAR)((port) ^ (pGDI->TranslateCode)))
                    314: 
                    315: #define WRITE_PAS(pGDI, port, data) \
                    316:         WRITE_PORT_UCHAR((PUCHAR)((port) ^ (pGDI->TranslateCode)), (UCHAR)(data))
                    317: 
                    318: 
                    319: // useful bit definitions
                    320: #define  D0 (1<<0)
                    321: #define  D1 (1<<1)
                    322: #define  D2 (1<<2)
                    323: #define  D3 (1<<3)
                    324: #define  D4 (1<<4)
                    325: #define  D5 (1<<5)
                    326: #define  D6 (1<<6)
                    327: #define  D7 (1<<7)
                    328: 
                    329: 
                    330: //// BIT FIELDS FOR COMPATIBLE_REGISTER_ENABLE
                    331: #define  MPU_ENABLE_BIT       D0
                    332: #define  SB_ENABLE_BIT        D1
                    333: #define  SB_IRQ_ENABLE_BIT    D2    // read only
                    334: 
                    335: //// BIT FIELDS FOR FEATURE_ENABLE (0xb88)
                    336: #define  PCM_FEATURE_ENABLE      D0
                    337: #define  FM_FEATURE_ENABLE       D1
                    338: #define  MIXER_FEATURE_ENABLE    D2
                    339: #define  SB_FEATURE_ENABLE       D4
                    340: 
                    341: /// BIT FIELDS FOR PCM CONTROL
                    342: #define  PCM_STEREO              D0+D3
                    343: #define  PCM_DAC                 D4
                    344: #define  PCM_MONO                D5
                    345: #define  PCM_ENGINE              D6
                    346: #define  PCM_DRQ                 D7
                    347: 
                    348: /// BIT FIELDS FOR SYSTEM CONFIG 3
                    349: #define  C3_ENHANCED_TIMER       D0
                    350: #define  C3_SB_CLOCK_EMUL        D1    // don't set!  see Brian Colvin
                    351: #define  C3_VCO_INVERT           D2
                    352: #define  C3_INVERT_BCLK          D3
                    353: #define  C3_SYNC_PULSE           D4
                    354: #define  C3_PSEUDO_PCM_STEREO    D5
                    355: 
                    356: /// BIT FIELDS FOR INTERRUPT ENABLE
                    357: #define  INT_LEFT_FM             D0
                    358: #define  INT_RIGHT_FM            D1
                    359: #define  INT_SB                  D1
                    360: #define  INT_SAMPLE_RATE         D2
                    361: #define  INT_SAMPLE_BUFFER       D3
                    362: #define  INT_MIDI                D4
                    363: 
                    364: 
                    365: 
                    366: /// BIT FIELDS FOR COMPATIBLE REGISTER ENABLE
                    367: #define  COMPAT_MPU              D0
                    368: #define  COMPAT_SB               D1
                    369: 
                    370: 
                    371: /// IRQ POINTER VALUES FOR EMULATION INTERRUPT POINTER
                    372: #define  EMUL_IRQ_NONE           0
                    373: #define  EMUL_IRQ_2              1
                    374: #define  EMUL_IRQ_3              2
                    375: #define  EMUL_IRQ_5              3
                    376: #define  EMUL_IRQ_7              4
                    377: #define  EMUL_IRQ_10             5
                    378: #define  EMUL_IRQ_11             6
                    379: #define  EMUL_IRQ_12             7
                    380: 
                    381: /// DMA POINTER VALUES FOR EMULATION DMA POINTER
                    382: #define  EMUL_DMA_NONE           0
                    383: #define  EMUL_DMA_1              1
                    384: #define  EMUL_DMA_2              2
                    385: #define  EMUL_DMA_3              3
                    386: 
                    387: 
                    388: /// BIT VALUES FOR FILTER REGISTER
                    389: #define  FILTER_NOMUTE           D5
                    390: 
                    391: 
                    392: #define  MIXCROSSCAPS_NORMAL_STEREO    0   // Left->Left, Right->Right
                    393: #define  MIXCROSSCAPS_RIGHT_TO_BOTH    1   // Right->Left, Right->Right
                    394: #define  MIXCROSSCAPS_LEFT_TO_BOTH     2   // Left->Left, Left->Right
                    395: #define  MIXCROSSCAPS_REVERSE_STEREO   4   // Left->Right, Right->Left
                    396: #define  MIXCROSSCAPS_RIGHT_TO_LEFT    8   // Right->Left, Right->Right
                    397: #define  MIXCROSSCAPS_LEFT_TO_RIGHT    0x10   // Left->Left, Left->Right
                    398: 
                    399: #define  OUT_AMPLIFIER  0
                    400: #define  OUT_PCM        1
                    401: 
                    402: #define  _LEFT          1
                    403: #define  _RIGHT         2
                    404: 
                    405: #define  _BASS          0
                    406: #define  _TREBLE        1
                    407: 
                    408: 
                    409: #define  MV_508_ADDRESS D7
                    410: #define  MV_508_INPUT   D4
                    411: #define  MV_508_SWAP    D6
                    412: #define  MV_508_BASS    (D0+D1)
                    413: #define  MV_508_TREBLE  (D2)
                    414: #define  MV_508_EQMODE  (D2+D0)
                    415: 
                    416: #define  MV_508_LOUDNESS   D2
                    417: #define  MV_508_ENHANCE (D1+D0)
                    418: 
                    419: /// DEFINES FOR SERIAL MIXER
                    420: #define  NATIONAL_SELECTMUTE_REG 0x40
                    421: #define  NATIONAL_LOUD_ENH_REG   0x41
                    422: #define  NATIONAL_BASS_REG       0x42
                    423: #define  NATIONAL_TREB_REG       0x43
                    424: #define  NATIONAL_LEFT_VOL_REG   0x44
                    425: #define  NATIONAL_RIGHT_VOL_REG  0x45
                    426: #define  NATIONAL_MODESELECT_REG 0x46
                    427: 
                    428: #define  NATIONAL_COMMAND  D7
                    429: #define  NATIONAL_LOUDNESS D0
                    430: #define  NATIONAL_ENHANCE  D1
                    431: 
                    432: #define  SERIAL_MIX_LEVEL  D0
                    433: #define  SERIAL_MIX_CLOCK  D1
                    434: #define  SERIAL_MIX_STROBE D2
                    435: #define  SERIAL_MIX_MASTER D4
                    436: #define  SERIAL_MIX_REALSOUND D6
                    437: #define  SERIAL_MIX_DUALFM D7
                    438: 
                    439: 
                    440: // FILTER_REGISTER
                    441: #define  fFIdatabits       0x1f        // 00011111B  filter select and decode field bits
                    442: #define  fFImutebits       D5          // filter mute field bit
                    443: #define  fFIpcmbits        (D7+D6)     // 11000000B  filter sample rate field bits
                    444: #define  bFImute           D5          // filter mute bit
                    445: #define  bFIsrate          D6          // filter sample rate timer mask
                    446: #define  bFIsbuff          D7          // filter sample buffer counter mask
                    447: 
                    448: #define  FILTERMAX         6           // six possible settings
                    449: 
                    450: #define FILTER_MUTE        0           // mute - goes to PC speaker
                    451: #define FILTER_LEVEL_1     1           // 20hz to  2.9khz
                    452: #define FILTER_LEVEL_2     2           // 20hz to  5.9khz
                    453: #define FILTER_LEVEL_3     3           // 20hz to  8.9khz
                    454: #define FILTER_LEVEL_4     4           // 20hz to 11.9khz
                    455: #define FILTER_LEVEL_5     5           // 20hz to 15.9khz
                    456: #define FILTER_LEVEL_6     6           // 20hz to 17.8khz
                    457: 
                    458: 
                    459: /// SLAVE_MODE_READ BITS
                    460: #define SLAVE_MODE_OPL3    D2
                    461: #define SLAVE_MODE_16      D3
                    462: 
                    463: 
                    464: #define PASX_IN(pFI, port) \
                    465:         READ_PORT_UCHAR(pFI->PROBase + ( (port) ^ pFI->TranslateCode) )
                    466: 
                    467: #define PASX_OUT(pFI, port, data) \
                    468:         WRITE_PORT_UCHAR(pFI->PROBase + ((port) ^ pFI->TranslateCode), (UCHAR)(data))
                    469: 
                    470: 
                    471: //==========================================================================
                    472: //
                    473: // Definitions from patch.h (mixer stuff)
                    474: //
                    475: //==========================================================================
                    476: 
                    477: // INPUT LINES
                    478: #define        IN_SYNTHESIZER  0
                    479: #define        IN_MIXER            1
                    480: #define        IN_EXTERNAL     2
                    481: #define        IN_INTERNAL             3
                    482: #define        IN_MICROPHONE   4
                    483: #define        IN_PCM                  5
                    484: #define        IN_PC_SPEAKER   6
                    485: #define        IN_SNDBLASTER   7
                    486: 
                    487: #define        OUT_AMPLIFIER   0
                    488: #define        OUT_PCM                 1
                    489: 
                    490: #define NUM_IN_PATCHES 9
                    491: #define NUM_OUT_PATCHES        3
                    492: 
                    493: 
                    494: //==========================================================================
                    495: //
                    496: // Definitions from findpas.h (card searching)
                    497: //
                    498: //==========================================================================
                    499: 
                    500: 
                    501: 
                    502: typedef struct {
                    503:    USHORT   wBoardRev;
                    504:    USHORT   wChipRev;
                    505:    union
                    506:       {
                    507:       struct                                /* Our PAS_16 gives     */
                    508:          {
                    509:          unsigned long CDInterfaceType:2;   /* 3                    */
                    510:          unsigned long EnhancedSCSI:1;      /* 0 - not enhanced SCSI*/
                    511:          unsigned long DAC16:1;             /* 1 DAC16              */
                    512: 
                    513:          unsigned long OPL_3:1;             /* 1 OPL3               */
                    514:          unsigned long Mixer_508:1;         /* 1 Mixer 508          */
                    515:          unsigned long DualDAC:1;           /* 1 Dual DAC           */
                    516:          unsigned long MPU401:1;            /* 0 NO mpu401          */
                    517: 
                    518:          unsigned long Slot16:1;            /* 1 - slot 16          */
                    519:          unsigned long MCA:1;               /* 0 - not MCA          */
                    520:          unsigned long CDPC:1;              /* 0 - not CDPC         */
                    521:          unsigned long SoundBlaster:1;      /* 1 - sound blaster    */
                    522: 
                    523:          unsigned long SCSI_IO_16:1;        /* 1 - ?                */
                    524:          unsigned long reserved:2;
                    525:          unsigned long Did_HW_Init:1;       /* 0 - ?                */
                    526:          unsigned long unused:16;
                    527:          } CapsBits;
                    528:       ULONG dwCaps;
                    529:       } Caps;
                    530:    ULONG    ProPort;
                    531:    UCHAR    ProDMA;
                    532:    UCHAR    ProIRQ;
                    533:    USHORT   SBPort;
                    534:    UCHAR    SBDMA;
                    535:    UCHAR    SBIRQ;
                    536:    USHORT   MPUPort;
                    537:    UCHAR    MPUIRQ;
                    538:    UCHAR    CDIRQ;
                    539:    ULONG    TranslateCode;
                    540:    UCHAR    ReservedB1;
                    541:    UCHAR    ReservedB2;
                    542:    PUCHAR   PROBase;
                    543: } FOUNDINFO, *PFOUNDINFO;
                    544: 
                    545: 
                    546: // these version numbers are found in 0B8Bh
                    547: #define  PAS_VERSION_1           0x000    // original
                    548: #define  PAS_PLUS                0x001    // Pro Audio Spectrum Plus with SCSI
                    549: #define  PAS_SIXTEEN             0x001    // Pro Audio Spectrum 16   with SCSI
                    550: #define  PAS_CDPC                0x007    // CDPC 05/06/92 mmq
                    551: #define  BOARD_REV_MASK  07
                    552: 
                    553: 
                    554: #define  CHIP_REV_B              0x002
                    555: #define  CHIP_REV_D              0x004
                    556: 
                    557: #define  NO_PAS_INSTALLED        0x000    // can't find board
                    558: 
                    559: 
                    560: // CD interface type definitions
                    561: #define  NO_INTERFACE    0
                    562: #define  MITSUMI_TYPE    1
                    563: #define  SONY_TYPE       2
                    564: #define  SCSI_TYPE       3

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.