AHC(4)

명칭
ahc - Adaptec VL/EISA/PCI SCSI 호스트 어댑터 드라이버

서식
VL/EISA 카드 1 개(살) 이상에 대해: controller eisa0 controller ahc0

PCI 카드 1 개(살) 이상에 대해: controller pci0 controller ahc0

PCI 어댑터에 메모리 멥트 I/O 를 허가하려면: options AHC_ALLOW_MEMIO

SCSI 버스 1 개(살) 이상에 대해: controller scbus0 at ahc0

해설
이 드라이버는 Adaptec AIC7770, AIC7850, AIC7860, AIC7870, AIC7880, AIC7890, AIC7891, AIC7895, AIC7896, AIC7897 호스트 어댑터 칩에 접속되었다 SCSI 버스를 이용할 수 있도록(듯이) 합니다. 이러한 칩은 다음에 드는 Adaptec SCSI 콘트롤러 카드나, 많은 메인보드에 실려 있습니다. 274X(W), 274X(T), 284X, 2920C, 2940, 2940U, 2940AU, 2940UW, 2940UW Dual, 2940U2W, 2940U2B, 2950U2W, 2950U2B, 3940, 3940U, 3940AU, 3940UW, 3940AUW, 3940U2W, 3985

이 드라이버는 twin/wide 버스나 콘트롤러의 타입에 응했다 fast/ultra/ultra2 동기 전송, 그리고 태그 큐잉이나 SCB 페이징 (을)를 서포트하고 있습니다.

PCI 디바이스에서는 “AHC_ALLOW_MEMIO” 설정 옵션을 기술하는 것으로 메모리 멥트 I/O 를 이용하게 됩니다. 메모리 멥트 I/O 는 (옵션을 기술하지 않는 경우에 이용한다) 프로그람드 I/O 보다 효율적입니다. 대부분의 PCI BIOS 는, 카드와 통신하는데 어느 쪽의 수단에서도 사용할 수 있도록(듯이) 디바이스를 MAP 합니다. 그러나 경우에 따라서는 (대체로는 PCI 디바이스가 PCI->PCI 브릿지의 저쪽 편에 있는 경우), 칩이 메모리 멥트 I/O 를 이용하기 위한 초기화를 BIOS 를 실시할 수 없습니다. 이 문제의 증상은, 통상, 메모리 멥트 I/O 의 이용을 시도하면(자) 시스템이 행업 하는 것입니다. 최근의 메인보드는 대부분 잘 초기화를 하므로, 이 옵션을 유효하게 해도 제대로 동작합니다.

타겟 마다의 설정은, EISA 이외의 모델로 기동시에 이용할 수 있다 SCSI-Select 메뉴로 행해, EISA 모델에서는 EISA 설정 유틸리티로 행합니다. 이 드라이버는, 이 타겟 마다의 설정을 받습니다. EISA 어댑터에서는 BIOS 하지만 유효하게 되어 있다고 하는 조건이 필요합니다. 받는 설정 항목은, 동기/비동기 전송, 최대 동기 네고시에이션 속도, 끊기, 호스트 어댑터의 SCSI ID, 그리고 EISA 트윈 채널 콘트롤러의 경우에는 프라이머리 채널의 선택입니다.

I/O 주소는 검출 routine에 의해 자동적으로 결정됩니다만, 284x (VESA 로컬 버스 콘트롤러) (을)를 EISA 시스템으로 사용하는 경우에는 주의가 필요합니다. 다른 EISA 카드와의 충돌을 막기 위해서(때문에), 284x 가 사용하는 I/O area를 설정하는 점퍼가, 카드가 꽂고 있다 EISA 슬롯과 적합하고 있는 것을 확인해 주세요.

성능과 기능의 편성은, aic7xxx 의 제품의 종류에 의해 다양합니다. 다음의 겉(표)는 ahc 드라이버가 서포트하는 다양한 칩의 비교입니다. 와이드 및 트윈 채널 기능은, 비록 특정의 칩으로 항상 서포트되고 있어도, 특정의 메인보드나 카드의 설계에서는 무효가 되어 있을지도 모르는 것에 주의해 주세요.

Chip MIPS Bus MaxSync MaxWidth SCBs Features aic7770 10 EISA/VL 10MHz 16Bit 4 1 aic7850 10 PCI/32 10MHz 8Bit 3 aic7860 10 PCI/32 20MHz 8Bit 3 aic7870 10 PCI/32 10MHz 16Bit 16 aic7880 10 PCI/32 20MHz 16Bit 16 aic7890 20 PCI/32 40MHz 16Bit 16 3 4 5 6 7 aic7891 20 PCI/64 40MHz 16Bit 16 3 4 5 6 7 aic7895 15 PCI/32 20MHz 16Bit 16 2 3 4 5 aic7896 20 PCI/32 40MHz 16Bit 16 2 3 4 5 6 7 aic7897 20 PCI/64 40MHz 16Bit 16 2 3 4 5 6 7

1.  다중 트윈 채널 디바이스 - 1 개의 콘트롤러가 2 개의 버스를 제공합니다.
2.  다기능 트윈 채널 디바이스 - 1 개의 칩에 2 개의 콘트롤러가 존재합니다.
3.  명령 채널의 세칸다리 DMA 엔진 - 스캐타개자리스트와 SCB 의 예측을 허락합니다.
4.  64 바이트 SCB 서포트 - 불필요한 DMA 를 배제하기 위해서 SCSI CDB 가 SCB 에 짜넣어지고 있습니다.
5.  블록 이동 인스트럭션 서포트 - 특정의 시퀀서 조작의 스피드를 배로 합니다.
6.  ‘Bayonet’ 스타일의 스캐타개자엔진 - S/G 예측의 성능을 개선합니다.
7.  큐잉 레지스터 - 시퀀서를 정지시키지 않고 새로운 트랜잭션(transaction)를 큐잉 할 수 있습니다.

SCSI 컨트롤 블록 (SCB)
SCSI 버스상의 디바이스에 보내지는 트랜잭션(transaction)는, 각각 1 개(살)의 ‘SCSI 컨트롤 블록’ (SCB)에 할당할 수 있습니다. SCB 는 콘트롤러가 트랜잭션(transaction)를 처리하는데 필요한 모든 정보를 가지고 있습니다. (위의) 칩의 기능의 겉(표)에는, 칩상의 메모리에 격납할 수 있다 SCB 수를 들 수 있습니다. 모델 넘이 7870 이상의 모든 칩은, 외부 SRAM 에 의해 칩상의 SCB 공간을, 최대로 255 SCB 까지 증가 가능합니다. Adaptec 의 콘트롤러로 외부 SRAM 를 가지고 있는 것은 거의 없습니다. 외부 SRAM 를 이용할 수 없는 경우에는 SCB 는 서로 한정하는 자원이며, 솔직 (바보 정직)인 방법으로 사용하면(자), 동시에 처리중으로 할 수 있는 트랜잭션(transaction)수는, SCB 수까지입니다. 이것으로는 SCSI 버스나 디바이스를 풀로 활용하는데 충분한 여유가 없습니다. 이 문제를 해결하는 것은 SCB 페이징 그렇다고 하는 메모리의 페이징과 같은 생각입니다. SCB 페이징은, 디바이스가 평상시는 긴 시간 콘트롤러라고 회화하지 않고, SCSI 버스와의 접속을 끊기 (절단) 하고 있다고 하는 사실을 이용하고 있습니다. 끊기 하고 있는 트랜잭션(transaction)의 SCB 는, 콘트롤러에 있어서는 전송이 재개했을 때에만 도움이 됩니다. 콘트롤러가 실행해야 할별의 트랜잭션(transaction)를 호스트가 큐잉 했을 때, 콘트롤러의 펌 웨어는, 미사용의 SCB 가 있으면 그것을 사용합니다. 없는 경우, 끊기 되고 나서 제일 시간이 지나지 않았다 (그러므로 가장 길고 끊기 된채로 있을 것이다) SCB 상태를 DMA 를 경유해 호스트의 메모리에 보존해, 콘트롤러의 SCB 를 재이용해 새로운 트랜잭션(transaction)를 시작합니다. 이것에 의해 콘트롤러는 SCB 공간의 크기에 의하지 않고 최대 255 의 트랜잭션(transaction)를 큐잉 가능합니다. 콘트롤러의 SCB 공간이 끊기 되고 있는 트랜잭션(transaction)의 캐쉬로서 기능하기 위해(때문에), 이용할 수 있는 SCB 공간이 크면 큰 만큼, SCB 의 데이터를 보존하거나 복원하거나 하기 위해서 사용되는 호스트의 버스의 유량이 적게 됩니다.

버그
어느 Quantum 의 드라이브 (적어도 Empire 2100 으로 1080s)는, AIC7870 Rev B 의 10MHz 의 동기 모드에서는 사용할 수 없습니다. 이 문제가 있는 콘트롤러는 42MHz 의 수정 발진자를 가지고 있어, 10MHz 보다 조금 높은 주파수로 동작합니다. 이 때문에 드라이브에 지장을 초래해 버스가 행업 합니다. SCSI-Select 유틸리티로 최대 동기 네고시에이션 속도를 8MHz 로 설정하면 보통으로 사용할 수 있게 됩니다.

관련 항목
aha(4), ahb(4), cd(4), scsi(4), da(4), sa(4)

저자
ahc 드라이버, AIC7xxx 시퀀서 코드 어셈블러, 그리고 aic7xxx 칩으로 동작하는 펌 웨어는 Justin T. Gibbs 하지만 썼습니다.

역사
ahc 드라이버는 FreeBSD 2.0 (으)로부터 등장했습니다.