================================================================
	INSTALLATION OF AWE32 SOUND DRIVER FOR LINUX
	Takashi Iwai	<iwai@ww.uni-erlangen.de>
================================================================

----------------------------------------------------------------
* Attention to SB-PnP Card Users

If you're using PnP cards, the initialization of PnP is required
before loading this driver.  You have now three options:
  1. Use isapnptools.
  2. Use in-kernel isapnp support.
  3. Initialize PnP on DOS/Windows, then boot linux by loadlin.
In this document, only the case 1 case is treated.

----------------------------------------------------------------
* Installation on Red Hat 5.0 Sound Driver

Please use install-rh.sh under RedHat5.0 directory.
DO NOT USE install.sh below.
See INSTALL.RH for more details.

----------------------------------------------------------------
* Installation/Update by Shell Script

  1. Become root

	% su

  2. If you have never configured the kernel tree yet, run make config
    once (to make dependencies and symlinks).

	# cd /usr/src/linux
	# make xconfig
    
  3. Run install.sh script

	# sh ./install.sh

  4. Configure your kernel

	(for Linux 2.[01].x user)
	# cd /usr/src/linux
	# make xconfig (or make menuconfig)

	(for Linux 1.2.x user)
	# cd /usr/src/linux
	# make config

    Answer YES to both "lowlevel drivers" and "AWE32 wave synth" items 
    in Sound menu.  ("lowlevel drivers" will appear only in 2.x
    kernel.)

  5. Make your kernel (and modules), and install them as usual.

	5a. make kernel image
		# make zImage

	5b. make modules and install them
		# make modules && make modules_install

	5c. If you're using lilo, copy the kernel image and run lilo.
	    Otherwise, copy the kernel image to suitable directory or
	    media for your system.

  6. Reboot the kernel if necessary.
	- If you updated only the modules, you don't have to reboot
	  the system.  Just remove the old sound modules here.
		in 
		# rmmod sound.o		(linux-2.0 or OSS/Free)
		# rmmod awe_wave.o	(linux-2.1)

  7. If your AWE card is a PnP and not initialized yet, you'll have to
    do it by isapnp tools.  Otherwise, skip to 8.

	This section described only a brief explanation.  For more
	details, please see the AWE64-Mini-HOWTO or isapnp tools FAQ.

	7a. If you have no isapnp.conf file, generate it by pnpdump.
	    Otherwise, skip to 7d.
		# pnpdump > /etc/isapnp.conf

	7b. Edit isapnp.conf file.  Comment out the appropriate
	    lines containing desirable I/O ports, DMA and IRQs.
	    Don't forget to enable (ACT Y) line.

	7c. Add two i/o ports (0xA20 and 0xE20) in WaveTable part.
	    ex)
		(CONFIGURE CTL0048/58128 (LD 2
		#     ANSI string -->WaveTable<--
		  (IO 0 (BASE 0x0620))
		  (IO 1 (BASE 0x0A20))
		  (IO 2 (BASE 0x0E20))
		  (ACT Y)
		))

	7d. Load the config file.
	    CAUTION: This will reset all PnP cards!

		# isapnp /etc/isapnp.conf

  8. Load the sound module (if you configured it as a module):

	for 2.0 kernel or OSS/Free monolithic module:

		# modprobe sound.o

	for 2.1 kernel:

		# modprobe sound
		# insmod uart401
		# insmod sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330
		(These values depend on your settings.)
		# insmod awe_wave
		(Be sure to load awe_wave after sb!)

		See Documentation/sound/oss/AWE32 for
		more details.

  9. (only for obsolete systems) If you don't have /dev/sequencer
     device file, make it according to Readme.linux file on
     /usr/src/linux/drivers/sound. (Run a shell script included in
     that file). <-- This file no longer exists in the recent kernels!

  10. OK, load your own soundfont file, and enjoy MIDI!

	% sfxload synthgm.sbk
	% drvmidi foo.mid

  11. For more advanced use (eg. dynamic loading, virtual bank and
      etc.), please read the awedrv FAQ or the instructions in awesfx
      and awemidi packages.

Good luck!
