PPBUS(4)

명칭
ppbus - 패러렐 포트 버스 시스템

서식
controller ppbus0

controller vpo0 at ppbus?

device nlpt0 at ppbus? device plip0 at ppbus? device ppi0 at ppbus? device pps0 at ppbus? device lpbb0 at ppbus?

해설
ppbus 시스템은, 여러가지 패러렐 디바이스를 제어하거나 다른 패러렐 포트 칩 세트를 사용하기 위한 드라이버를 실장하기 위한 , 단일 형태로 모듈화된, 아키텍쳐에 의존하지 않는 시스템을 제공합니다.

디바이스 드라이버
새로운 드라이버를 쓰거나 벌써 있는 드라이버를 이식하기 위해서, ppbus 시스템은 이하의 기능을 제공하고 있습니다.

•   패러렐 포트를 액세스하기 위한 , 아키텍쳐에 의존하지 않는 매크로나 함수

•   여러가지 디바이스가 같은 패러렐 포트를 공유할 수 있도록(듯이)하기 위한 기구

•   커널내의 디바이스와 경합 하는 일 없이, 커널의 외부로부터 패러렐 포트를 액세스 할 수가 있다 ppi(4) (으)로 불리는 유저 인터페이스

  새로운 드라이버를 개발한다

ppbus 시스템은 표준 및 비표준의 소프트웨어의 개발을 서포트하기 위해서 설계되어 왔습니다.

드라이버 | 설명
vpo | VPI0 패러렐 - Adaptec AIC-7110 SCSI 콘트롤러 드라이버.
이것은 표준 및 비표준의 패러렐 포트 액세스를 사용하고 있습니다.
ppi | 일반의 I/O 를 위한 패러렐 포트 인터페이스
pps | 초단위 펄스 (pulse per second) 타이밍 인터페이스
lpbb | Philips 사 공식의 패러렐 포트 I2C 비트 조작 인터페이스

  현재 있는 드라이버를 이식한다

ppbus 마시자 1 개의 접근는 현재 있는 드라이버를 이식하기 위한의 것입니다. 여러가지 드라이버가 이미 이식되고 있습니다.

드라이버 | 설명
nlpt | lpt 프린터 드라이버
plip | lp 패러렐 네트워크 인터페이스 드라이버

ppbus 를 이용하는 것으로, 동일한 서비스를 제공하는 다른 operating system로부터에서도, 소프트웨어를 이식하는 것이 가능해집니다.

패러렐 포트 칩 세트
패러렐 포트 칩 세트는 ppc(4) 에 의해 서포트됩니다.

ppbus 시스템은, 새로운 패러렐 포트 버스를 할당하기 위한 함수와 매크로를 제공해, 그것과 상위의 주변 디바이스 드라이버를 초기화합니다.

ppc 는 칩 세트의 검출과 초기화를 실시한 후, ppbus 시스템을 초기화하기 위해서 ppbus 부속 함수를 콜 합니다.

패러렐 포트 모델
ppbus 시스템으로 채용된 논리 패러렐 포트 모델은, PC 의 패러렐 포트 모델입니다. 한층 더 i386 에서의 ppbus 의 실장에서는, ppc 에 의해 제공되고 있는 대부분의 서비스는 inb() 및 outb()를 실시하는 매크로입니다. 그러나, 다른 아키텍쳐에서는, ppbus 의 논리 레지스터 (데이터, 스테이터스, 제어...)에의 액세스는, 복수의 I/O 액세스가 필요할지도 모릅니다.

  해설
패러렐 포트는 이하의 모드로 조작할 수가 있습니다.

•   컴패터블 모드, 센트로닉스 모드라고도 불린다

•   쌍방향 8/4 비트 모드, 니블 모드라고도 불린다

•   바이트 모드, PS/2 모드라고도 불린다

•   ECP 모드 (Extended Capability Port mode)

•   EPP 모드 (Enhanced Parallel Port mode)

•   ECP 와 EPP 의 혼합 모드, 혹은 ECP 와 PS/2 의 혼합 모드

  컴패터블 모드
이 모드는, 대부분의 PC 로 이용되고 있는, 프린터에 데이터를 전송하기 위한 프로토콜을 정의하는 것입니다. 이 모드에서는, 데이터는 포트의 데이터선에 세트 되어 프린터의 스테이터스가 에러가 없게 Busy가 아닌 것이 체크된 후, 프린터에의 데이터 송신의 타이밍으로서 데이터 스트로브가 소프트웨어에 의해 생성됩니다.

컴패터블 모드 프로토콜로 데이터를 전송 할 때에, FIFO 버퍼를 사용한다 모드가 실장되고 있는 I/O 콘트롤러가 다수 있습니다. 이 모드는 "고속 센트로닉스" 혹은 "패러렐 포트 FIFO 모드" (으)로 불리고 있습니다.

  쌍방향 모드
니블 모드는, 프린터나 주변기기로부터의 역방향 채널 데이터를 수중에 넣기 위한 가장 일반적인 방법입니다. 호스트로부터 프린터에의 전송을 행하는 표준 모드와 조합하는 것으로, 완전한 쌍방향 채널이 제공됩니다.

이 모드에서는 출력은 8 bit length입니다. 입력은, 스테이터스 레지스터의 8 비트중 4 비트를 읽는 것으로 실현되고 있습니다.

  바이트 모드
이 모드에서는 데이터 레지스터는 출력용으로도 입력용에도 사용됩니다. 이 경우, 모든 전송은 8 bit length입니다.

  ECP 모드
ECP 프로토콜은, 프린터나 스캐너 타입의 주변기기와의 통신을 위해서(때문에), 한층 더 진행된 모드로서 제안된 것입니다. EPP 프로토콜과 같게, ECP 모드는 호스트 어댑터와 주변기기와의 사이에서의 고성능인 쌍방향 통신을 행하기 위한 경로를 제공하고 있습니다.

ECP 프로토콜에는 이하의 기능이 포함되어 있습니다.

호스트 어댑터용의 런 길이 인코딩 (RLE) 데이터 압축

순서 방향 및 역방향 채널용의 FIFO

호스트 레지스터 인터페이스를 위한 프로그램 I/O 에 가세해 DMA

  EPP 모드
EPP 프로토콜은 원래 표준의 패러렐 포트와 호환성을 유지하면서, 고성능인 패러렐 포트 링크를 제공하는 수단으로서 개발되었습니다.

  혼합 모드
SMC 와 같이, 혼합 모드를 서포트하는 칩 세트를 공급하고 있다 제조업자가 몇개인가 있습니다. 그러한 칩 세트에서는, 확장 제어 레지스터를 액세스 하는 것에 의해, 언제라도 모드를 변경할 수가 있습니다.

IEEE1284-1994 표준

  배경
이 표준은 "IEEE Standard Signaling Method for a Bidirectional Parallel Peripheral Interface for Personal Computers" ( 「퍼스널 컴퓨터를 위한 쌍방향 패러렐 주변기기 인터페이스의 IEEE 표준 신호화 방식」) (이)라고도 불리고 있습니다. 이것은 호스트와 프린터 그 외의 주변기기와의 사이의, 비동기에 완전하게 연동해 동작하는 쌍방향의 패러렐 통신의 신호화 방법을 규정한 것입니다. 이 방식은, 주변기기 식별용의 캐릭터 라인의 포맷과 쌍방향 데이터 스트림외를 통해서 그 캐릭터 라인을 호스트에 돌려주는 방법도 규정하고 있습니다.

이 표준은 아키텍쳐에 의존하지 않고, 신호 레벨에서의 핸드 쉐이크의 교환만을 규정하고 있습니다. 머신 의존의 레지스터, 매핑 된 메모리, 그 외 이러한 신호를 제어하는 것 모든 것을 조작하기 위해서는, 아키텍쳐에 특화한 문서를 참조할 필요가 있겠지요.

IEEE1284 프로토콜은, 서포트하고 있는 모든 패러렐 포트 모드에 대해 완전하게 적합합니다. 컴퓨터는 마스터로서 주변기기는 슬레이브로서 동작합니다.

모든 전송은 유한 상태 자동 장치로서 정의됩니다. 이것에 의해, 소프트웨어는, 완전하게 연동해 동작하는 신호화 방식의 체계를 잘 관리할 수가 있게 됩니다. 컴패터블 모드는 그것이 「호환」인 모아 두어 모두의 네고시에이션없이 그대로 서포트됩니다. 이 다른 모든 모드에서는, 주변기기가 그 모드를 서포트하고 있는지 어떤지를 체크해, 그 후, 포워드 아이돌 상태의 한 살에 들어가기 위해서(때문에), 호스트는 최초로 네고시에이션이 행해지지 않으면 안됩니다.

어떠한 때에라도, 슬레이브로부터 호스트에 데이터를 보낼 필요가 생기는 것이 있겠지요. 슬레이브로부터의 데이터 송신은 포워드 아이돌 상태 (니블, 바이트, ECP...) (으)로부터 마셔 가능합니다. 그 때문에, 주변기기가 데이터 전송 요구를 실시하는 것을 허가하기 위해서, 호스트는 미리 네고시에이션을 실시해 둘 필요가 있습니다. 시간을 낭비하는 폴링 방식을 피하기 위해서(때문에), 세치기 라인을 데이터 요구 신호용으로서 사용할 수도 있습니다.

그러나, 마스터 호스트에 있어서는, 주변으로부터의 요구는 단순한 힌트로 밖에 없습니다. 호스트가 전송을 받아들이면(자), 우선 역방향 모드의 네고시에이션을 실시해, 그리고 전송을 개시합니다. 역방향의 전송중도, 호스트는 언제라도 전송을 멈출 수가 있고, 슬레이브도 이제 데이터가 없는 것을 신호에 의해 알릴 수가 있습니다.

  실장
IEEE1284 표준의 서포트는, ppbus 시스템 위에 실장되고 있습니다. 어느 모드에 대해도 표준이 규정하는 저레벨의 특성에 번거롭게 해지는 일 없이, 네고시에이션, 타미네이션, 전송과 같은 고레벨의 기능을 실행한다 수속세트로서 실장되고 있습니다.

IEEE1284 는, ppbus 시스템과는 가능한 한 상호작용을 행하지 않게 되어 있습니다. 이것은, 현재로서는, ppbus 를 액세스 하고 싶을 때에는 ppbus 에 요구를 해야 하는 것을 의미합니다. 네고시에이션 기능에서는, ppbus 에의 액세스는 마음대로 하행 깨지지 않으면 말하는 것입니다. 이것을 나중에 해방해야 하는 것은 당연하겠지요.

아키텍쳐

  어댑터층, ppbus 층, 디바이스층
우선, ppbus 시스템의 최하정도에 어댑터 층이 있습니다. 이것은, 논리 모델을 그 하위에 있는 하드웨어에 MAP 하는, 저레벨의 함수의 집합에 의해 추상화 된 칩 세트입니다.

그 다음에는 ppbus 층이 있어, 이하의 기능을 제공하고 있습니다.

1.  데이지체와 같이 접속된 디바이스간에서의 패러렐 포트 버스의 공유

2.  ppbus 에 결합된 디바이스의 관리

3.  하드웨어층을 액세스하기 위한 아키텍쳐 독립의 인터페이스의 제공

최후는 디바이스 층에서, 패러렐 주변 디바이스 드라이버를 모은 것이 되고 있습니다.

각층층은, 각각이 전용의 C 구조체를 하나, 각각 ppb_adapter, ppb_data, ppb_device 를 가집니다. ppb_link 구조체는 다른 구조체에의 포인터와 다른 층의 사이에 공유하는 정보를 집계한 것입니다.

이러한 구조체에 대해서는 ppbconf(9) 의 설명을 참조해 주세요.

  패러렐 모드 관리
여러가지 ppbus 시스템층에 있어, 동작 모드를 구별하지 않으면 안됩니다. 실제로는, ppbus 와 어댑터의 동작 모드, 각각 대해, 현재의 모드와 사용 가능한 모드는 분리되어 있습니다.

이 레벨의 추상화에 의해, 특정의 칩 세트에서는, 상위층을 번거롭게 할 수 있는 일 없이, native mode로부터, 확장 모드에 의해 에뮤레이트 되는 다른 어떠한 모드에에서도 바꾸는 것이 할 수 있게 될지도 모릅니다. 예를 들면, 대부분의 칩 세트는 니블 모드를 native mode로서 서포트하고 있어, 그래서, ECP 나 EPP 모드를 에뮤레이트 하고 있습니다.

이 아키텍쳐에 의해 IEEE1284-1994 의 모드를 서포트 성과 는 두입니다.

특징적인 기능

  부트 프로세스
부트 프로세스는 ISA 버스 (PC 아키텍쳐)의 초기화중에, ppc(4) 드라이버의 프로브로부터 시작됩니다. ppc 드라이버의 attach 중에, ppbus 구조체가 새롭게 할당 초기화 (어댑터 구조체와 링크 된다)되어, 함수 ppb_attachdevs(struct ppb_data *ppb) 에게 건네집니다.

ppb_attachdevs() (은)는 PnP 패러렐 주변기기 ( 드래프트(c)1993-4 Microsoft Corporation 에 의한다)의 검출을 시도한 후, 프로브 처리와 기존의 디바이스 드라이버의 할당 (attach)을 실시합니다.

프로브중에는, 디바이스 드라이버는 ppbus 에 요구를 내, 자신의 동작 모드의 설정을 시도하게 되어 있습니다. 설정된 동작 모드는 문맥 구조체에 세이브되어 드라이버가 ppbus 에 요구했을 때에 되돌려집니다.

  버스의 할당과 끼어들어
ppbus 의 할당은 다른 디바이스의 I/O 를 파괴해 안 되는 것이 필수입니다. ppbus 의 할당의 그 외의 사용법은, 포트를 예약해 세치기의 입력을 받는 것입니다.

세치기는, ppcintr() 함수에 접속되고 있습니다. 이 함수는, ppb_intr(struct ppb_link *pl) 의 호출을 이용해, 세치기를 ppbus 에 직접 보냅니다. 버스의 오너의 핸들러가 정의되고 있으면, ppbus 는 세치기를 그 핸들러에 리디렉트 합니다. 따라서, 디바이스가 세치기를 보내 주었으면 하면, ppbus 의 오너가 되지 않으면 안됩니다.

  마이크로 순차 순서
마이크로 순차 순서 (은)는 패러렐 포트의 고속의 저레벨의 조작을 가능과하기 위한 , 범용의 메카니즘입니다. 마이크로 순차 순서는 (IEEE1284 모드에 있어서의) 표준인 전송에도, 비표준인 전송에도 사용할 수가 있겠지요. 마이크로 순차 순서의 생각 외날, ppbus 층의 오버헤드를 회피해, 대부분의 일을 어댑터 레벨로 실시하려고 하는 것입니다.

마이크로 순차 순서는 작동코드와 파라미터의 배열입니다. 각 작동코드는 오퍼레이션을 코드화한 것입니다. (작동코드는 microseq(9) 그리고 해설되고 있습니다. ) 표준의 I/O 조작은 ppbus 레벨로 실장되고 있습니다만, 기본적인 I/O 조작과 마이크로 섹 언어는, 효율화를 위해서(때문에) 어댑터 레벨로 코드화 되고 있습니다.

예를 들면, vpo(4) 드라이버의 실장에서는,

•   니블 전송 모드의 변경 버젼

•   주변기기의 초기화와 선택과 할당을 실시하는 다양한 I/O 순차 순서

(을)를 실장하기 위해서 마이크로 순차 순서가 사용되고 있습니다.

관련 항목
ppbconf(9), ppc(4), ppi(4), vpo(4), nlpt(4), plip(4)

역사
ppbus 메뉴얼 페이지는 FreeBSD 3.0 그리고 최초로 등장했습니다.

저자
이 메뉴얼 페이지는 Nicolas Souchu 에 의해 쓰여졌습니다.