Re: Adaptec AHA2940

Leonard N. Zubkoff (lnz@dandelion.com)
Fri, 3 Jan 1997 11:05:31 -0800


From: lm@neteng.engr.sgi.com (Larry McVoy)
Newsgroups: linux.dev.kernel

Is there any place to go to get more info on this? I ran into this while
trying to upgrade from an NCR to an AHA2940 and ended up giving up and
going with the NCR (partly because I have two machines and wanted to be
able to switch disks between both).

I imagine there's some information on this in one of the HOWTOs. The problem
is not with SCSI itself, but rather with the necessity for translating SCSI's
linear block addresses into the cylinder/head/sector addresses used by the
system BIOS. The only place this actually matters is when creating partitions
and for booting. Partition creation matters if the disk is shared with other
operating systems; Linux could care less as it uses the raw sector addresses in
the partition table, and not the C/H/S values, but other operating systems may
be quite unhappy and overwrite the wrong data if the C/H/S values aren't
consistent with the linear addresses. For booting, the system BIOS is used to
load the kernel so the bootstrap must know the C/H/S location of the secondary
bootstrap and kernel image.

Once upon a time, many SCSI controllers used the simple 64 heads and 32
sectors/track mapping. This was sufficient for disks smaller than 1GB in size.
With the advent of larger disks, so-called "extended translation" was invented
to allow larger disks to fit within the number of bits available for C/H/S
addresses. This is largely where the problems arise, since there are a number
of different extended translations. Furthermore, the NCR/Symbios BIOS follows
the CAM specification which tried to optimize the usage of the disk space by
computing a C/H/S translation that's optimal for each disk. This causes disks
partitioned on a Symbios host adapter to have problems on host adapters that
used the fixed schemes, such as Adaptec and BusLogic. However, the Symbios
BIOS will adopt a translation that's already present in the partition table, so
you can generally move a disk from Adaptec or BusLogic to Symbios.

Adaptec uses either 64/32 or 255/63 translation, based on the size of the disk
being > 1GB and the extended translation option being selected. BusLogic uses
three translations, 64/32 (< 1GB), 128/32 (1GB..2GB), and 255/63 (>= 2GB), and
will also adopt one of these three if its already in the partition table, even
if it's incorrect for the disk size; my BusLogic driver also handles this for
Linux and warns when the partition table geometry is adopted.

Here's a table of what host adapter changes should and should not work, based
on the host adapter that originally partitioned the disk and whether it had
extended translation enabled:

Old Host Adapter New Host Adapter Compatible
======================== ======================== ==========
Adaptec (extended: any) BusLogic (extended: any) yes
Adaptec (extended: any) Symbios/NCR yes
BusLogic (extended: off) Adaptec (extended: off) yes
BusLogic (extended: on) Adaptec (extended: on) except 1GB..2GB
BusLogic (extended: any) Symbios/NCR yes
Symbios/NCR Adaptec no
Symbios/NCR BusLogic no

Since most of my machines are Linux-only and only require C/H/S addressing for
booting, I generally setup all my SCSI disks without extended translation so I
get the 64/32 translation. I just make sure the root partition (wherever /boot
and vmlinuz are) is located below cylinder 1024. This gives me maximum
compatibility for moving them should I ever decide to.

Leonard