GPIO 컨트롤러를 핀 뱅크로 분할
드라이버 개발자는 옵션으로 GPIO(범용 I/O) 컨트롤러 디바이스를 둘 이상의 GPIO 핀 뱅크로 분할할 수 있습니다. 예를 들어 64개의 GPIO 핀이 있는 GPIO 컨트롤러 디바이스는 GPIO 컨트롤러 드라이버에서 각각 32개의 GPIO 핀이 있는 두 개의 뱅크로 설명할 수 있습니다. 개발자는 GPIO 컨트롤러 디바이스의 모든 뱅크를 관리하는 단일 드라이버를 제공할 수 있으며, 이 드라이버는 일반적으로 하나의 디바이스 개체를 사용하여 전체 디바이스를 나타냅니다. 그러나 디바이스의 일부 또는 모든 은행은 디바이스의 다른 은행과 독립적으로 관리할 수 있습니다.
일반적으로 GPIO 컨트롤러 드라이버는 다음 이유 중 하나로 GPIO 컨트롤러를 둘 이상의 은행으로 분할하도록 선택합니다.
- 은행의 GPIO 핀의 전원 상태는 다른 은행의 핀과 독립적으로 관리할 수 있습니다.
- GPIO 컨트롤러의 총 핀 수는 64개보다 큽니다.
GPIO 프레임워크 확장(GpioClx)에서 지원하는 최대 뱅크 크기는 64핀입니다. 64개 이상의 핀을 포함하는 GPIO 컨트롤러 디바이스는 드라이버가 두 개 이상의 뱅크로 분할해야 하며, 각 은행에는 핀이 64개 이하여야 합니다.
GPIO 컨트롤러가 은행으로 분할되는 방식을 결정하기 위해 GpioClx는 CLIENT_QueryControllerBasicInformation 이벤트 콜백 함수를 호출합니다. GPIO 컨트롤러 드라이버에 의해 구현되는 이 함수는 GPIO 컨트롤러의 특성 및 기능을 설명하는 CLIENT_CONTROLLER_BASIC_INFORMATION 구조를 제공합니다. 이 구조의 두 멤버인 TotalPins 및 NumberOfPinsPerBank는 GPIO 컨트롤러의 핀을 은행으로 분할하는 방법을 지정합니다. TotalPins는 GPIO 컨트롤러의 총 핀 수를 지정하고 NumberOfPinsPerBank 는 은행당 핀 수를 지정합니다. N이 컨트롤러의 은행 수인 경우 은행은 0에서 N-1로 번호가 매겨집니다. 마지막 은행(즉, 은행 번호 N-1)을 제외한 모든 은행에 는 NumberOfPinsPerBank 멤버에 지정된 핀 수가 포함되어야 합니다. 마지막 은행은 NumberOfPinsPerBank에 대한 핀 수를 가질 수 있습니다.
GpioClx는 TotalPins 및NumberOfPinsPerBank 멤버의 값에서 GPIO 컨트롤러의 총 은행 수를 결정합니다. GpioClx는 다음 정수 수식을 사용하여 총 은행 수를 계산합니다.
(TotalPins + NumberOfPinsPerBank – 1) / NumberOfPinsPerBank 일부 GPIO 컨트롤러 디바이스에서는 디바이스의 핀 뱅크를 동일한 디바이스의 다른 은행과 독립적으로 켜거나 저전력 상태로 전환할 수 있습니다. 따라서 특정 은행이 유휴 상태일 때 전력 소비를 줄이기 위해 이 은행을 저전력 상태로 전환할 수 있습니다. 이러한 디바이스를 수용하기 위해 GpioClx는 구성 요소 수준 전원 관리를 지원합니다. GpioClx는 F0(완전 켜기) 및 F1(저전력 또는 끄기)의 두 가지 구성 요소 수준 전원 상태를 정의합니다.
GPIO 핀 뱅크가 구성 요소 수준 전원 관리를 지원하는지 여부를 확인하기 위해 GpioClx는 CLIENT_QuerySetControllerInformation 이벤트 콜백 함수를 호출합니다. 이 함수의 InputBuffer 매개 변수는 CLIENT_CONTROLLER_QUERY_SET_INFORMATION_INPUT 구조체에 대한 포인터입니다. 전원 관리 정보를 요청하기 위해 호출자는 이 구조체의 RequestType 멤버를 QueryBankPowerInformation으로 설정합니다.
GPIO 은행이 구성 요소 수준 전원 관리를 지원하는 경우 GpioClx는 은행이 유휴 상태일 때 F1 전원 상태로 전환할 수 있습니다. 은행이 F1 상태가 되기 전에 GpioClx는 CLIENT_SaveBankHardwareContext 이벤트 콜백 함수를 호출하여 드라이버에 은행의 하드웨어 컨텍스트(주로 레지스터 콘텐츠)를 저장하도록 지시합니다. 나중에 은행이 F0 상태가 된 후 GpioClx는 CLIENT_RestoreBankHardwareContext 이벤트 콜백 함수를 호출하여 드라이버에 이전에 저장된 하드웨어 컨텍스트를 복원하도록 지시합니다.