Thanks to the hints from the Scientific Linux mailing list I got the Adaptec aic79xx driver running.

Here is the HOWTO

The aic79xx driver V1.3 supplied by Scientific Linux does not work if U320 SCSI devices run on the same channel of an Adaptec card with other SCSI devices with different speed.

Adaptec supplies a corrected aic79xx driver V.2.0 as source and as rpm, but the rpm suitable for Scientific Linux 4.2 is not yet available.

To use this HOWTO on a 64-bit system (Opteron, Xeon EM64T), replace all i686 occurences by x86_64
Compile aic79xx driver V.2.0.15 for i386 on Scientific Linux 4.2 (kernel 2.6.9-22.0.1) HOWTO
# Get the kernel source rpm and copy it to /install:
#
ftp://ftp.scientificlinux.org/disk/disk1/linux/scientific/4x/SRPMS/vendor/errata/kernel-2.6.9-22.0.1.EL.src.rpm
#
# Create the kernel source tree
rpm -ivh /install/kernel-2.6.9-22.0.1.EL.src.rpm
cd /usr/src/redhat/SPECS/
rpmbuild -bp --target=i686 kernel-2.6.spec
#
# Save the old aic7xxx directory
mv /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/aic7xxx  \
   /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/aic7xxx_sav
#
# Clean the kernel source tree
cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9
make mrproper
#
# Get the aic79xx driver source code for Linux kernel 2.6 and copy it to /install:
#http://www.adaptec.com/worldwide/support/driverdetail.jsp?sess=no&language=English+US&cat=/Product/ASC-39320A-R&filekey=aic7Yxx-2.0.15-6.3.11-linux-2.6.tgz

#
# Insert aic79xx source into kernel source
cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/
tar xzf /install/aic7Yxx-2.0.15-6.3.11-linux-2.6.gz
#
# Get config file from active kernel
cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9
cp -p --reply=yes /usr/src/kernels/2.6.9-22.0.1.EL-smp-i686/.config  \
   /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/

#
# Save Makefile
cp -p /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile  \
   /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile_sav

#
# Adjust aic79xx parameters in config file
sed -i "/^# CONFIG_SCSI_AIC79XX.*/s/^# CONFIG_SCSI_AIC79XX.*/CONFIG_SCSI_AIC79XX=m/"  \
   /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config

if grep -q CONFIG_AIC79XX_CMDS_PER_DEVICE /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
then

   sed -i "/CONFIG_AIC79XX_CMDS_PER_DEVICE.*/s/^.*CONFIG_AIC79XX_CMDS_PER_DEVICE.*/CONFIG_AIC79XX_CMDS_PER_DEVICE=32/"  \
      /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config

else
   sed -i "/CONFIG_SCSI_AIC79XX=m/a\CONFIG_AIC79XX_CMDS_PER_DEVICE=32"  \
      /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
fi
if grep -q CONFIG_AIC79XX_RESET_DELAY_MS /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
then

   sed -i "/CONFIG_AIC79XX_RESET_DELAY_MS.*/s/^.*CONFIG_AIC79XX_RESET_DELAY_MS.*/CONFIG_AIC79XX_RESET_DELAY_MS=15000/"  \

      /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
else
   sed -i "/CONFIG_SCSI_AIC79XX=m/a\CONFIG_AIC79XX_RESET_DELAY_MS=15000"  \
      /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config

fi
if grep -q CONFIG_AIC79XX_DEBUG_MASK /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
then

   sed -i "/^# CONFIG_AIC79XX_DEBUG_MASK.*/s/^# CONFIG_AIC79XX_DEBUG_MASK.*/CONFIG_AIC79XX_DEBUG_MASK=0/"  \
      /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
else
   sed -i "/CONFIG_SCSI_AIC79XX=m/a\CONFIG_AIC79XX_DEBUG_MASK=0"  \
      /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
fi
#
# Define extraversion in Makefile according to the kernel
if uname -r | grep -q smp
then
   sed -i "/^EXTRAVERSION/s/-prep/smp/" /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile
else
   sed -i "/^EXTRAVERSION/s/-prep//"    /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile
fi
#
# Make the module
make
#
if uname -r | grep -q smp
then
# Save the old aic79xx smp kernel module
   if [ -f /lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko ] ; then
      cp -p --reply=yes  /lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko  \
         /lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko_sav

   fi
#
# Copy the new smp module to its destination and adjust protection
   cp -p --reply=yes /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/aic7xxx/aic79xx.ko  \
      /lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko

   chmod 744 /lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko
#
# Create new smp initrd
   cp -p --reply=yes /boot/initrd-2.6.9-22.0.1.ELsmp.img /boot/initrd-2.6.9-22.0.1.ELsmp.img.sav
   mkinitrd -f /boot/initrd-2.6.9-22.0.1.ELsmp.img 2.6.9-22.0.1.ELsmp
else
#
# Save the old aic79xx kernel module
   if [ -f /lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko ] ; then
      cp -p --reply=yes  /lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko  \
         /lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko_sav

   fi
#
# Copy the new module to its destination and adjust protection
   cp -p --reply=yes /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/aic7xxx/aic79xx.ko  \
      /lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko

   chmod 744 /lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko
#
# Create new initrd
   cp -p --reply=yes /boot/initrd-2.6.9-22.0.1.EL.img /boot/initrd-2.6.9-22.0.1.EL.img.sav
   mkinitrd -f /boot/initrd-2.6.9-22.0.1.EL.img 2.6.9-22.0.1.EL
fi


        Dr. Peter Stauffert
        Boehringer Ingelheim Pharma GmbH & Co. KG