+++ /dev/null
-/*
- *
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: drivers/dd/sndblst/portio.c (see also sndblst.h)
- * PURPOSE: Sound Blaster port I/O helper
- * PROGRAMMER: Andrew Greenwood
- * UPDATE HISTORY:
- * Sept 28, 2003: Created
- */
-
-#include <ntddk.h>
-#include "sndblst.h"
-
-BOOLEAN WaitToSend(ULONG BasePort)
-{
- int TimeOut;
-
- DPRINT("WaitToSend ");
-
- // Check if it's OK to send
- for (TimeOut = SB_TIMEOUT;
- ! SB_READY_TO_SEND(BasePort) && TimeOut > 0;
- TimeOut --);
-
- // If a time-out occurs, we report failure
- if (! TimeOut)
- {
- DPRINT("FAILED\n");
- return FALSE;
- }
-
- DPRINT("SUCCEEDED\n");
-
- return TRUE;
-}
-
-BOOLEAN WaitToReceive(ULONG BasePort)
-{
- int TimeOut;
-
- DPRINT("WaitToReceive ");
-
- // Check if it's OK to receive
- for (TimeOut = SB_TIMEOUT;
- ! SB_READY_TO_RECEIVE(BasePort) && TimeOut > 0;
- TimeOut --);
-
- // If a time-out occurs, we report failure
- if (! TimeOut)
- {
- DPRINT("FAILED\n");
- return FALSE;
- }
-
- DPRINT("SUCCEEDED\n");
-
- return TRUE;
-}
-
-
-USHORT InitSoundCard(ULONG BasePort)
-{
- ULONG TimeOut;
- BOOLEAN Status;
- UCHAR DSP_Major, DSP_Minor;
-
- DPRINT("InitSoundCard() called\n");
-
- DPRINT("Resetting sound card\n");
-// if (!WaitToSend(BasePort))
-// return FALSE;
-
- SB_WRITE_RESET(BasePort, 0x01);
- for (TimeOut = 0; TimeOut < 30000; TimeOut ++); // Wait a while
- SB_WRITE_RESET(BasePort, 0x00);
-
- // Check if it's OK to receive (some cards will ignore the above reset
- // command and so will not issue an ACK, so time out is NOT an error)
- DPRINT("Waiting for an ACK\n");
- if (WaitToReceive(BasePort))
- {
- // Check to make sure the reset was acknowledged:
- for (TimeOut = SB_TIMEOUT;
- (Status = (SB_READ_DATA(BasePort) != SB_DSP_READY) && (TimeOut > 0));
- TimeOut --);
- }
-
- DPRINT("Querying DSP version\n");
- if (! WaitToSend(BasePort))
- return FALSE;
-
- SB_WRITE_DATA(BasePort, SB_GET_DSP_VERSION);
-
- if (! WaitToReceive(BasePort))
- return FALSE;
-
- DSP_Major = SB_READ_DATA(BasePort);
- DSP_Minor = SB_READ_DATA(BasePort);
-
- DPRINT("DSP v%d.%d\n", DSP_Major, DSP_Minor);
-
- // if audio is disabled,
- // version tests return 0xFF everywhere
- if (DSP_Major == 0xFF && DSP_Minor == 0xFF)
- return FALSE;
-
- DPRINT("Sound card initialized!\n");
-
- return (DSP_Major * 256) + DSP_Minor;
-}