KR20160113221A - 가상 범용 i/o 제어기 - Google Patents

가상 범용 i/o 제어기 Download PDF

Info

Publication number
KR20160113221A
KR20160113221A KR1020167023189A KR20167023189A KR20160113221A KR 20160113221 A KR20160113221 A KR 20160113221A KR 1020167023189 A KR1020167023189 A KR 1020167023189A KR 20167023189 A KR20167023189 A KR 20167023189A KR 20160113221 A KR20160113221 A KR 20160113221A
Authority
KR
South Korea
Prior art keywords
gpio
virtual
virtual gpio
controller
pin
Prior art date
Application number
KR1020167023189A
Other languages
English (en)
Other versions
KR101856891B1 (ko
Inventor
니콜라스 제이. 아담스
로버트 이. 고프
사이 프라사드 파이타라 발라간가다라
프로나이 두타
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20160113221A publication Critical patent/KR20160113221A/ko
Application granted granted Critical
Publication of KR101856891B1 publication Critical patent/KR101856891B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/105Program control for peripheral devices where the programme performs an input/output emulation function
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Abstract

가상 범용 I/O(GPIO)를 위한 기술들은 컴퓨팅 디바이스를 포함하고, 이 컴퓨팅 디바이스는 가상 GPIO 제어기 드라이버, 가상 GPIO 제어기 펌웨어 인터페이스 및 가상 GPIO 제어기를 갖는다. 이 드라이버는 컴퓨팅 디바이스의 운영 체제로부터 GPIO 커맨드를 수신한다. GPIO 커맨드는 GPIO 핀에 의해 수행될 동작을 특정한다. 이 드라이버는 GPIO 커맨드를 펌웨어 인터페이스에 송신한다. 펌웨어 인터페이스가 커맨드를 수신하는 것에 응답하여, 가상 GPIO 제어기는 GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트한다. 펌웨어 인터페이스는 운영 체제에 의해 수신될 수 있는 인터럽트를 트리거할 수 있다. 가상 GPIO 제어기는 컴퓨팅 디바이스의 주변 디바이스에 대한 인터페이스, 임베디드 제어기 또는 펌웨어-예약된 배킹 메모리를 사용하여 가상 GPIO 핀을 에뮬레이트할 수 있다. 펌웨어 인터페이스는 ACPI 제어 메소드일 수 있다. 다른 실시예들이 설명되고 청구된다.

Description

가상 범용 I/O 제어기{VIRTUAL GENERAL-PURPOSE I/O CONTROLLER}
관련된 미국 특허 출원에 대한 상호 참조
본 출원은 2014년 3월 27일자로 출원되었으며 발명의 명칭이 "VIRTUAL GENERAL-PURPOSE I/O CONTROLLER"인 미국 유틸리티 특허 출원 제14/227,735호에 대해 우선권을 주장한다.
전형적인 컴퓨팅 디바이스들은 플랫폼 칩셋에 또는 플랫폼 시스템 온 칩에 포함된 다수의 범용 입/출력(general purpose input/output)("GPIO") 핀들을 포함한다. GPIO 핀들은 디지털 데이터를 판독 및 기입하는 것을 지원할 수 있고, 컴퓨팅 디바이스에 대한 하드웨어 인터럽트들을 발생시킬 수 있다. 전형적으로, GPIO 핀들은 다목적일 수 있고, 특정한 응용들을 위해 컴퓨팅 디바이스에 의해 구성될 수 있다. 예를 들어, GPIO 핀들은 버튼들, 표시기들(예를 들어, LED들), 스위치들, 또는 센서들(예를 들어, 뚜껑 폐쇄 센서들, 도킹 포트 센서들, 구동 삽입 센서들 등)과 같은 플랫폼-특정 피처들을 구동하고, 비트-뱅(bit-bang)하거나, 또는 다른 방식으로 제어하는 데 사용될 수 있다.
전형적인 컴퓨팅 디바이스들은 GPIO 핀들을 제어하기 위해 칩셋 또는 메인 프로세서에 구현된 하나 이상의 하드웨어 GPIO 제어기를 포함한다. 컴퓨팅 디바이스 상의 소프트웨어 또는 펌웨어는 하드웨어 GPIO 제어기와 관련된 특정한 레지스터들 또는 메모리 어드레스들로부터 판독하거나 그들에 기입함으로써 하드웨어 GPIO 제어기와 상호작용할 수 있다. ACPI(advanced configuration and power interface) 규격은 하드웨어 GPIO 핀들에 대한 펌웨어 인터페이스의 한 예를 제공한다. 전형적으로, 운영 체제 벤더들은 플랫폼 칩셋에 포함되어야 하는 특정한 하드웨어 GPIO 핀들을 포함하여 최소 요구된 하드웨어 리소스들을 특정한다.
여기에 설명된 개념들은 첨부 도면들에서 제한이 아니라 예로서 예시되어 있다. 예시의 단순성 및 명료성을 위해, 도면들에 예시된 요소들은 반드시 축척에 맞게 그려지지는 않는다. 적절한 것으로 고려되는 경우에, 참조 라벨들은 대응하거나 유사한 요소들을 표시하기 위해 도면들 간에 반복되었다.
도 1은 가상 GPIO 제어기를 제공하기 위한 컴퓨팅 디바이스의 적어도 하나의 실시예의 단순화된 블록도이다.
도 2는 도 1의 컴퓨팅 디바이스의 환경의 적어도 하나의 실시예의 단순화된 블록도이다.
도 3은 도 1 및 도 2의 컴퓨팅 디바이스에 의해 실행될 수 있는 가상 GPIO 제어기를 초기화하고 실행시키기 위한 방법의 적어도 하나의 실시예의 단순화된 흐름도이다.
도 4는 도 1 및 도 2의 컴퓨팅 디바이스에 의해 실행될 수 있는 GPIO 커맨드들을 모니터링하고 핸들링하기 위한 방법의 적어도 하나의 실시예의 단순화된 흐름도이다.
도 5는 도 1 및 도 2의 컴퓨팅 디바이스에 의해 실행될 수 있는 GPIO 이벤트들을 모니터링하고 핸들링하기 위한 방법의 적어도 하나의 실시예의 단순화된 흐름도이다.
본 개시내용의 개념들이 다양한 수정들 및 대안적 형태들로 될 수 있지만, 그 특정한 실시예들이 도면에 예로서 도시되었고 여기에 상세히 설명될 것이다. 그러나, 본 개시내용의 개념들을 개시된 특정한 형태들로 제한하려는 의도는 아니고, 반대로 의도는 본 개시내용 및 첨부된 청구범위와 일치하는 모든 수정들, 균등물들, 및 대안들을 커버하는 것이라는 것을 이해하여야 한다.
본 명세서에서 "한 실시예", "실시예", "예시적인 실시예" 등에 대한 언급은 설명된 실시예가 특정한 특징, 구조, 또는 특성을 포함할 수 있지만, 모든 실시예가 그 특정한 특징, 구조, 또는 특성을 필수적으로 포함할 수 있거나 포함하지 않을 수 있다는 것을 나타낸다. 더구나, 이러한 문구들은 반드시 동일한 실시예를 참조하는 것은 아니다. 또한, 특정한 특징, 구조, 또는 특성이 실시예와 관련하여 설명될 때, 명시적으로 설명되는지와 상관없이 다른 실시예들과 관련하여 이러한 특징, 구조, 또는 특성을 실행하는 것은 본 기술분야의 통상의 기술자의 지식 범위 내에 있다고 말할 수 있다. 부가적으로, "A, B 및 C 중 적어도 하나"의 형태로 리스트 내에 포함된 아이템들은 (A); (B); (C); (A와 B); (A와 C); (B와 C); 또는 (A, B 및 C)를 의미할 수 있다는 점이 인식되어야 한다. 유사하게, "A, B 또는 C 중 적어도 하나"의 형태로 리스트 내에 포함된 아이템들은 (A); (B); (C); (A와 B); (A와 C); (B와 C); 또는 (A, B 및 C)를 의미할 수 있다.
개시된 실시예들은 일부 경우들에서, 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 개시된 실시예들은 또한 하나 이상의 프로세서에 의해 판독 및 실행될 수 있는, 하나 이상의 일시적인 또는 비일시적인 머신 판독가능 매체(예를 들어, 컴퓨터 판독가능) 저장 매체에 의해 전달 또는 그에 저장된 명령어들로서 구현될 수 있다. 머신 판독가능 저장 매체는 임의의 스토리지 디바이스, 메커니즘, 또는 머신(예를 들어, 휘발성 또는 비휘발성 메모리, 매체 디스크, 또는 다른 매체 디바이스)에 의해 판독가능한 형태로 정보를 저장 또는 전송하는 다른 물리적 구조에 의해 구현될 수 있다.
도면들에서, 일부 구조적 또는 방법 특징들이 특정한 배열들 및/또는 배치들로 도시될 수 있다. 그러나, 이러한 특정한 배열들 및/또는 배치들이 요구되지 않을 수 있다는 점이 인식되어야 한다. 오히려, 일부 실시예들에서, 이러한 특징들은 예시 도면에 도시한 것과 상이한 방식 및/또는 이외로 방식으로 배열될 수 있다. 부가적으로, 구조적 또는 방법 특징들의 특정한 도면 내의 포함은 이러한 특징이 모든 실시예에서 요구된다는 것을 함축하려는 것은 아니고, 일부 실시예들에서, 포함되지 않을 수 있거나 다른 특징들과 결합될 수 있다.
이제 도 1을 참조하면, 예시적인 실시예에서, 컴퓨팅 디바이스(100)는 컴퓨팅 디바이스(100)에 의해 요구되는 물리적 GPIO 핀들의 총 수를 감소시키도록 가상 GPIO 제어기를 설정한다. 그렇게 하기 위해서, 아래에 상세히 논의되는 바와 같이, 컴퓨팅 디바이스(100)의 운영 체제는 GPIO 제어기 드라이버들에 대한 표준 인터페이스를 설정하고, 후속하여 가상 GPIO 제어기 드라이버를 로드한다. 가상 GPIO 제어기 드라이버는 운영 체제로부터 GPIO 커맨드들(예를 들어, 판독, 기입, 상태, 또는 제어 커맨드들)을 수신하고, 그 커맨드들을 가상 GPIO 제어기 펌웨어 인터페이스로 포워딩한다. 가상 GPIO 제어기 펌웨어 인터페이스가 GPIO 커맨드를 수신하는 것에 응답하여, 가상 GPIO 제어기는 하나 이상의 물리적 GPIO 핀들의 거동을 에뮬레이트하고, GPIO 커맨드에 적절히 응답한다. 이러한 에뮬레이트된 물리적 GPIO 핀들을 여기서 "가상 GPIO 핀들"이라고 한다.
일부 실시예들에서, 가상 GPIO 제어기는 부가적으로 또는 대안적으로, 가상 GPIO 핀의 에뮬레이트된 상태에 영향을 주는 플랫폼 이벤트들에 대해 모니터링할 수 있다. 가상 GPIO 핀의 에뮬레이트된 상태에 기초하여, 가상 GPIO 제어기는 가상 GPIO 펌웨어 인터페이스가 운영 체제에 의해 핸들링되는 인터럽트를 어써트하게 할 수 있다. 운영 체제는, 가상 GPIO 핀의 상태를 질의하기 위해 가상 GPIO 제어기 드라이버에 하나 이상의 GPIO 커맨드들을 전달한 다음에 그에 따라 응답함으로써 인터럽트를 핸들링한다. 따라서, 가상 GPIO 제어기에 의해 에뮬레이트된 가상 GPIO 핀은 하나 이상의 물리적 GPIO 핀과 동일한 것으로 운영 체제에 나타난다. 가상 GPIO 제어기는 임의의 수의 가상 GPIO 핀들을 에뮬레이트할 수 있다는 것을 이해하여야 한다.
본 개시내용의 컴퓨팅 디바이스(100)는 운영 체제 벤더에 의해 설정된 GPIO 핀 요건들을 따르도록 요구되는 전용의 물리적 GPIO 핀들의 수를 감소시킬 수 있다는 점이 인식되어야 한다. 부가적으로 또는 대안적으로, 컴퓨팅 디바이스(100)는 컴퓨팅 디바이스(100)의 메인 프로세서, 칩셋, 또는 시스템 온 칩보다 전형적으로 덜 비싸고 더 쉽게 맞춤화되는 임베디드 제어기들 또는 주변 디바이스들을 사용하여 요구된 GPIO 기능성을 구현가능할 수 있다.
컴퓨팅 디바이스(100)는 여기에 설명된 펑션들을 수행하기 위한 임의의 유형의 디바이스로서 구현될 수 있다. 예를 들어, 컴퓨팅 디바이스(100)는 제한 없이, 데스크톱 컴퓨터, 서버 컴퓨터, 워크스테이션, 랩톱 컴퓨터, 노트북 컴퓨터, 모바일 컴퓨팅 디바이스, 스마트폰, 태블릿 컴퓨터, 셀룰러 전화, 핸드셋, 메시징 디바이스, 웨어러블 컴퓨팅 디바이스, 차량 텔레매틱스 디바이스, 분산형 컴퓨팅 시스템, 멀티프로세서 시스템, 소비자 전자 디바이스, 및/또는 여기에 설명된 펑션들을 수행하도록 구성된 임의의 다른 컴퓨팅 디바이스로서 구현될 수 있다. 도 1에 도시한 바와 같이, 예시적인 컴퓨팅 디바이스(100)는 프로세서(120), 입/출력 서브시스템(122), 메모리(126), 및 데이터 스토리지 디바이스(130)를 포함한다. 물론, 컴퓨팅 디바이스(100)는 다른 실시예들에서, 데스크톱 컴퓨터(예를 들어, 다양한 입/출력 디바이스들)에서 일반적으로 발견되는 것과 같은, 다른 또는 추가의 컴포넌트들을 포함할 수 있다. 부가적으로, 일부 실시예들에서, 예시적인 컴포넌트들 중 하나 이상은 다른 컴포넌트 내에 통합될 수 있거나, 또는 다른 방식으로 그 부분을 형성할 수 있다. 예를 들어, 메모리(126), 또는 그 부분들은 일부 실시예들에서 프로세서(120)에 통합될 수 있다.
프로세서(120)는 여기에 설명된 펑션들을 수행할 수 있는 임의의 유형의 프로세서로서 구현될 수 있다. 예를 들어, 프로세서(120)는 단일 또는 멀티-코어 프로세서(들), 디지털 신호 프로세서, 마이크로컨트롤러, 또는 다른 프로세서 또는 처리/제어 회로로서 구현될 수 있다. 유사하게, 메모리(126)는 여기에 설명된 펑션들을 수행할 수 있는 임의의 유형의 휘발성 또는 비휘발성 메모리 또는 데이터 스토리지로서 구현될 수 있다. 동작 시에, 메모리(126)는 운영 체제들, 애플리케이션들, 프로그램들, 라이브러리들, 및 드라이버들과 같이 컴퓨팅 디바이스(100)의 동작 중에 사용되는 다양한 데이터 및 소프트웨어를 저장할 수 있다. 예시적인 메모리(126)는 가상 GPIO 제어기(128)를 포함한다. 아래에 더 설명되는 바와 같이, 가상 GPIO 제어기(128)는 하나 이상의 물리적 GPIO 핀을 에뮬레이트, 적응, 또는 추상화하는 소프트웨어 엔티티이다. 메모리(126)는 컴퓨팅 디바이스(100)의 프로세서(120), 메모리(126), 및 다른 컴포넌트들과의 입/출력 동작들을 용이하게 하기 위해 회로 및/또는 컴포넌트들로서 구현될 수 있는 I/O 서브시스템(122)을 통해 프로세서(120)에 통신가능하게 결합된다. 예를 들어, I/O 서브시스템(122)은 입/출력 동작들을 용이하게 하기 위해 메모리 제어기 허브들, 입/출력 제어 허브들, 펌웨어 디바이스들, 통신 링크들(즉, 점대점 링크들, 버스 링크들, 와이어들, 케이블들, 광 가이드들, 인쇄 회로 보드 트레이스들 등) 및/또는 다른 컴포넌트들 및 서브시스템들로서 구현될 수 있거나, 또는 다른 방식으로 이들을 포함할 수 있다. I/O 서브시스템(122)은 감소된-핀 GPIO 세트(124)를 더 포함한다. 감소된-핀 GPIO 세트(124)는 컴퓨팅 디바이스(100)에 의해 사용하기 위한 다수의 물리적 GPIO 핀들을 포함할 수 있다. 감소된-핀 GPIO 세트(124)는 전형적인 I/O 서브시스템과 비교하여 감소된 수의 물리적 GPIO 핀들을 포함하고, 일부 실시예들에서 단일 GPIO 핀을 포함할 수 있다. 일부 실시예들에서, I/O 서브시스템(122)은 시스템 온 칩(SoC)의 부분을 형성할 수 있고, 단일 집적 회로 칩 상에, 컴퓨팅 디바이스(100)의 프로세서(120), 메모리(126), 및 다른 컴포넌트들과 함께 통합될 수 있다.
데이터 스토리지 디바이스(130)는 예를 들어, 메모리 디바이스들 및 회로들, 메모리 카드들, 하드 디스크 드라이브들, 고상 드라이브들, 또는 다른 데이터 스토리지 디바이스들과 같이 데이터의 단기 또는 장기 저장을 위해 구성된 임의의 유형의 디바이스 또는 디바이스들로서 구현될 수 있다. 데이터 스토리지 디바이스(130)는 운영 체제 소프트웨어 및 애플리케이션 소프트웨어를 포함하여 실행을 위한 소프트웨어 또는 다른 데이터를 저장하는 데 사용될 수 있다.
컴퓨팅 디바이스(100)는 임베디드 제어기(132) 및/또는 다수의 주변 디바이스들(134)을 더 포함할 수 있다. 임베디드 제어기(132)는 프로세서(120) 및/또는 I/O 서브시스템(122)과 별개이거나 독립적인 컴퓨팅 디바이스(100)의 임의의 마이크로컨트롤러 또는 다른 제어기 칩으로서 구현될 수 있다. 임베디드 제어기(132)는 주변 디바이스들(134) 중 하나 이상과의 통신들을 관리하는 것과 같은, 컴퓨팅 디바이스(100)를 위한 임의의 부수적 또는 보조 컴퓨팅 액티비티를 수행할 수 있다. 임베디드 제어기(132)는 LPC(low-pin-count) 버스, 또는 시스템 주변 인터커넥트(SPI) 버스와 같은 비교적 제한된 컴퓨팅 리소스들을 필요로 하는 데이터 접속을 통해 I/O 서브시스템(122)과 통신할 수 있다. 또한, 임베디드 제어기(132)는 프로세서(120) 또는 I/O 서브시스템(122)과 비교하여 더 오래되거나 더 큰 반도체 프로세스 노드 상에 제조될 수 있다. 그러므로, 임베디드 제어기(132)는 설계, 제조, 또는 맞춤화하는데 비교적 저렴할 수 있다.
주변 디바이스들(134)은 컴퓨팅 디바이스(100)의 임의의 주변 디바이스 컴포넌트로서 구현될 수 있다. 예를 들어, 주변 디바이스들(134)은 인간 입력 디바이스들, 디스플레이들, 발광 다이오드들(LED들)과 같은 표시기들, 온도 센서들 또는 디바이스 삽입 센서들과 같은 센서들, 스위치들, 또는 버튼들로서 구현될 수 있다. 주변 디바이스들(134)은 컴퓨팅 디바이스(100)의 뚜껑이 폐쇄되는지를 결정하는 것, 매체가 매체 드라이브 내로 삽입되었는지를 결정하는 것, 또는 하드웨어 버튼들과의 사용자 상호작용에 응답하는 것과 같이 컴퓨팅 디바이스(100)를 위한 플랫폼-특정 기능성을 제공할 수 있다. 주변 디바이스들(134) 각각은 I/O 서브시스템(122)에 또는 임베디드 제어기(132)에 직접 통신가능하게 결합될 수 있다. 각각의 주변 디바이스(134)는 임의의 적절한 하드웨어 인터페이스 또는 통신 프로토콜을 사용하여 통신할 수 있다. 따라서, 각각의 주변 디바이스(134)는 I/O 서브시스템(122)의 전용 GPIO 핀에 결합될 필요는 없다.
이제 도 2를 참조하면, 예시적인 실시예에서, 컴퓨팅 디바이스(100)는 동작 중에 환경(200)을 설정한다. 예시적인 환경(200)은 다수의 애플리케이션들(202), 가상 GPIO 제어기 드라이버(206)를 포함하는 운영 체제(204), 가상 GPIO 제어기 펌웨어 인터페이스(208), 및 가상 GPIO 제어기(212)를 포함한다. 환경(200)의 다양한 모듈들 및/또는 컴포넌트들은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합으로서 구현될 수 있다.
애플리케이션들(202)은 아래에 더 설명되는 바와 같이, 가상 GPIO 제어기(212)에 의해 에뮬레이트된 가상 GPIO 핀(들)으로부터 데이터를 판독, 기입하거나, 또는 다른 방식으로 그들에 액세스하도록 구성된다. 애플리케이션들(202)은 전력 관리 또는 도킹 포트 관리와 같은 유틸리티 또는 운영 체제 레벨 펑션들뿐만 아니라 사용자-레벨의 대화식 펑션들을 제공할 수 있다. 일부 실시예들에서, 애플리케이션(202)은 가상 GPIO 핀을 사용하여 접속된 주변 디바이스들(134)을 위한 상위-레벨 디바이스 드라이버들을 포함할 수 있다. 그러한 실시예들에서, 디바이스 드라이버는 주변 디바이스들(134)이 물리적 GPIO 핀에 접속되는 상황들에서 사용된 동일한 디바이스 드라이버일 수 있다.
운영 체제(204)는 애플리케이션들(202)을 관리하고 가상 GPIO 핀(들)에의 액세스를 제어하도록 구성된다. 운영 체제(204)는 디바이스 드라이버들을 위한 하나 이상의 표준화된 인터페이스를 포함한다. 따라서, 운영 체제(204)는 가상 GPIO 제어기 드라이버(206)를 포함하는, 다수의 디바이스 드라이버들을 생성하고 관리한다. 운영 체제(204)는 (일부 실시예들에서, 주변 디바이스 드라이버들 또는 다른 소프트웨어/펌웨어를 포함하는) 애플리케이션들(202)로부터 수신된 GPIO 커맨드들을 가상 GPIO 제어기 드라이버(206)로 포워딩할 수 있다. 부가적으로, 운영 체제(204)는 GPIO 커맨드들을 독립적으로 발생시키고 그 커맨드들을 가상 GPIO 제어기 드라이버(206)에 송신할 수 있다. 부가적으로, 위에 설명된 바와 같이, 운영 체제(204)는 가상 GPIO 제어기 펌웨어 인터페이스(208)에 의해 발생된 인터럽트들에 응답할 수 있다. 이러한 인터럽트들에 대한 응답 시에, 운영 체제(204)는 GPIO 커맨드들, 예를 들어 인터럽트의 소스를 결정하기 위한 질의 커맨드들을 가상 GPIO 제어기 드라이버(206)에 송신할 수 있다. 운영 체제(204)는, 예를 들어 가상 GPIO 제어기 드라이버(206)에 의해 구현되는 다수의 콜백 펑션들을 인보크함으로써, 임의의 기술을 사용하여 GPIO 커맨드들을 가상 GPIO 제어기 드라이버(206)에 송신할 수 있다.
가상 GPIO 제어기 드라이버(206)는 운영 체제(204)로부터 GPIO 커맨드들을 수신하고 GPIO 커맨드들을 가상 GPIO 제어기 펌웨어 인터페이스(208)로 포워딩하도록 구성된다. 가상 GPIO 제어기 드라이버(206)는 가상 GPIO 제어기 펌웨어 인터페이스(208)에 의해 요구된 대로 GPIO 커맨드들을 처리하거나 포맷팅할 수 있다. 일부 실시예들에서, GPIO 커맨드들은 크게 변경되지 않은 채로 가상 GPIO 제어기 드라이버(206)를 통과할 수 있다. 가상 GPIO 제어기 드라이버(206)는 운영 체제(204)의 표준 GPIO 드라이버 인터페이스를 구현하고; 따라서, 운영 체제(204)의 관점으로부터, 가상 GPIO 제어기 드라이버(206)는 물리적 GPIO 핀들을 위한 드라이버들과 상호교환가능할 수 있다. 따라서, 가상 GPIO 제어기 드라이버(206)는 운영 체제(204)의 어드레스 공간 내에 상주할 수 있다. 일부 실시예들에서 가상 GPIO 제어기 드라이버(206) 및 운영 체제(204)는 상이한 엔티티들에 의해 제공될 수 있고; 예를 들어, 가상 GPIO 제어기 드라이버(206)는 플랫폼 하드웨어 벤더에 의해 제공될 수 있다.
가상 GPIO 제어기 펌웨어 인터페이스(208)는 가상 GPIO 제어기 드라이버(206)로부터 GPIO 커맨드들을 수신하도록 구성된다. 부가적으로 또는 대안적으로, 가상 GPIO 제어기 펌웨어 인터페이스(208)는 가상 GPIO 제어기(212)에 의해 핸들링되거나 발생된 GPIO 이벤트들에 응답하여 운영 체제(204)를 인터럽트하거나 또는 다른 방식으로 운영 체제에 시그널링할 수 있다. 가상 GPIO 제어기 펌웨어 인터페이스(208)는 물리적 GPIO 핀들과 통신하는 데 사용되는 표준화된 펌웨어 인터페이스를 구현할 수 있다. 예를 들어, 일부 실시예들에서, 가상 GPIO 제어기 펌웨어 인터페이스(208)는 ACPI(advanced configuration and power interface) 규격에 의해 정의된 것과 같은 펌웨어 제어 메소드(firmware control method)를 구현할 수 있다. 펌웨어 제어 메소드는 컴퓨팅 디바이스(100)에 의해 해석될 수 있는 표준화된 가상 머신 아키텍처를 위한 명령어들의 집합(즉, "바이트코드(bytecode)")으로서 구현될 수 있다. 일부 실시예들에서, 그들의 펑션들은 서브 모듈에 의해, 예를 들어 펌웨어 제어 메소드(210)에 의해 수행될 수 있다.
가상 GPIO 제어기(212)는 가상 GPIO 제어기 펌웨어 인터페이스(208)에 의해 수신된 GPIO 커맨드를 구현하도록 하나 이상의 가상 GPIO 핀(들)을 에뮬레이트하도록 구성된다. 부가적으로 또는 대안적으로, 가상 GPIO 제어기(212)는 가상 GPIO 핀(들)의 상태에 관련된 GPIO 이벤트들을 수신하고 구현하도록 구성된다. 예를 들어, GPIO 이벤트는 컴퓨팅 디바이스(100)의 소프트웨어 이벤트에 기초하여 에뮬레이트된 가상 GPIO 핀의 값의 변화에 대응할 수 있다. 다른 예로서, GPIO 이벤트는 주변 디바이스(134) 및/또는 임베디드 제어기(132)의 상태에 기초하여 에뮬레이트된 가상 GPIO 핀의 값의 변화에 대응할 수 있다. 가상 GPIO 제어기(212)는 컴퓨팅 디바이스(100)의 임의의 지원 리소스들을 사용하여 가상 GPIO 핀(들)을 에뮬레이트할 수 있다. 예를 들어, 가상 GPIO 제어기(212)는 일부 실시예들에서 가상 GPIO 핀(들)의 상태에 관한 데이터를 저장하기 위해 메모리(126)의 예약된 세그먼트를 사용하여, 소프트웨어에서 가상 GPIO 핀(들)을 에뮬레이트할 수 있다. 부가적으로 또는 대안적으로, 가상 GPIO 제어기(212)는 하나 이상의 주변 디바이스(134)의 거동을 적응시킴으로써 가상 GPIO 핀(들)을 에뮬레이트할 수 있다. 일부 실시예들에서, 가상 GPIO 제어기(212)는 하나 이상의 임베디드 제어기(132)의 거동을 적응시킴으로써, 예를 들어, GPIO 핀으로서 나타나게 임베디드 제어기(132)의 리소스(예를 들어, I/O 핀 또는 버스)를 적응시킴으로써, 또는 수개의 독립적인 GPIO 핀들로서 나타나게 임베디드 제어기(132)의 리소스를 멀티플렉싱함으로써 가상 GPIO 핀(들)을 에뮬레이트할 수 있다. 가상 GPIO 제어기(212)는 컴퓨팅 디바이스(100)의 애플리케이션 코드, 운영 체제 드라이버 코드, 또는 펌웨어 코드의 임의의 조합으로서 구현될 수 있다. 일부 실시예들에서, 그들의 펑션들은 하나 이상의 서브모듈에 의해, 예를 들어, 에뮬레이션 모듈(214), 주변 디바이스 모듈(216), 또는 임베디드 제어기 모듈(218)에 의해 수행될 수 있다. 별개의 모듈들로서 예시되었지만, 일부 실시예들에서 가상 GPIO 제어기(212)는 가상 GPIO 제어기 펌웨어 인터페이스(208) 및/또는 펌웨어 제어 메소드(210)에 포함될 수 있거나 또는 다른 방식으로 이들과 결합될 수 있다.
이제 도 3을 참조하면, 사용 시에, 컴퓨팅 디바이스(100)는 가상 GPIO 핀을 초기화하고 에뮬레이트하기 위한 방법(300)을 실행할 수 있다. 방법(300)은 컴퓨팅 디바이스(100)가 가상 GPIO 제어기(212)를 초기화하는 블록 302에서 시작된다. 컴퓨팅 디바이스(100)는 임의의 요구된 데이터 구조들 또는 통신 링크들을 초기화하는 것을 포함하여, 가상 GPIO 제어기(212)가 가상 GPIO 핀을 에뮬레이트하는 데 필요한 임의의 초기화를 수행할 수 있다. 일부 실시예들에서, 블록 304에서 컴퓨팅 디바이스(100)는 가상 GPIO 핀을 위한 펌웨어-제어된 배킹 메모리(firmware-controlled backing memory)의 영역을 초기화할 수 있다. 배킹 메모리는 펌웨어에 의해 예약된 메인 메모리(126)의 세그먼트로서 구현될 수 있고, 따라서 운영 체제(204) 및/또는 애플리케이션들(202)에 의해 사용하기 위해 이용가능하지 않다. 배킹 메모리, 예를 들어, 가상 GPIO 핀과 관련된 값들을 포함하는 레지스터들 및 가상 GPIO 핀의 거동을 제어하기 위한 값들을 포함하는 레지스터들은 가상 GPIO 핀의 상태를 저장하기 위해 가상 GPIO 제어기(212)에 의해 사용될 수 있다. 일부 실시예들에서, 블록 306에서, 컴퓨팅 디바이스(100)는 임베디드 제어기(132) 및/또는 주변 디바이스(134)를 초기화할 수 있다. 컴퓨팅 디바이스(100)는 요구된 임의의 초기화, 예를 들어 리셋 신호들 또는 초기화 커맨드들을 송신하는 것을 수행할 수 있다.
블록 308에서, 컴퓨팅 디바이스(100)는 가상 GPIO 제어기 펌웨어 인터페이스(208)를 로드한다. 컴퓨팅 디바이스(100)는 운영 체제(204)와 호환가능한 임의의 기술을 사용하여 가상 GPIO 제어기 펌웨어 인터페이스(208)를 로드할 수 있다. 일부 실시예들에서, 블록 310에서, 컴퓨팅 디바이스(100)는 펌웨어 제어 메소드(210)를 초기화하고 시스템 데이터 테이블에 펌웨어 제어 메소드(210)를 저장할 수 있다. 펌웨어 제어 메소드(210)는 운영 체제(204)와 가상 GPIO 제어기(212) 간의 통신들을 관리할 수 있는 임의의 펌웨어 루틴으로서 구현될 수 있다. 예를 들어, 펌웨어 제어 메소드(210)는 ACPI 규격에 의해 정의된 것과 같은 제어 메소드로서 구현될 수 있다. ACPI 제어 메소드는 ACPI 머신 언어(AML)로 컴파일링되는 ACPI 소스 언어(ASL)로 작성된 선언문들 및/또는 명령어들의 세트로서 구현될 수 있다. AML은 운영 체제(204)에 의해 해석될 수 있는 바이트코드의 집합으로서 구현될 수 있다. 펌웨어 제어 메소드(210)를 위한 AML은 메모리(126)에 저장된 하나 이상의 ACPI 테이블 내로 로드될 수 있다. 런타임에서, 운영 체제(204)는 ACPI 테이블들에 저장된 적절한 AML을 룩업함으로써 펌웨어 제어 메소드(210)에 액세스할 수 있다. 컴퓨팅 디바이스(100)는 가상 GPIO 제어기 펌웨어 인터페이스(208)의 펑션들을 수행하기 위해 펌웨어 제어 메소드(210)의 AML을 해석할 수 있다. 단일 펌웨어 제어 메소드(210)로서 예시되었지만, 일부 실시예들에서 가상 GPIO 제어기 펌웨어 인터페이스(208)는 임의의 수의 펌웨어 제어 메소드들(210)을 포함할 수 있다. 예를 들어, 가상 GPIO 제어기 펌웨어 인터페이스(208)는 다수의 ACPI 제어 메소드들을 포함하는 ACPI 디바이스로서 구현될 수 있다.
블록 312에서, 컴퓨팅 디바이스(100)는 운영 체제(204)를 로드한다. 컴퓨팅 디바이스(100)는 운영 체제(204)로 제어를 전달하는 펌웨어 부트 로더를 실행할 수 있다. 운영 체제(204)가 로드되는 동안 또는 그 후에, 블록 314에서, 컴퓨팅 디바이스(100)는 가상 GPIO 제어기 드라이버(206)를 로드한다. 예를 들어, 일부 실시예들에서, 운영 체제(204)는 플랫폼 펌웨어에 의해 정의된 가상 GPIO 제어기 디바이스를 에뮬레이트할 때 가상 GPIO 제어기 드라이버(206)를 로드할 수 있다. 가상 GPIO 제어기 드라이버(206)를 로드하면 운영 체제(204)가 가상 GPIO 제어기 펌웨어 인터페이스(208)와 통신할 수 있으므로 가상 GPIO 핀과 상호작용할 수 있다. 일부 실시예들에서, 컴퓨팅 디바이스(100)는 로드된 가상 GPIO 제어기 펌웨어 인터페이스(208)에 대해 적절한 가상 GPIO 제어기 드라이버(206)를 선택하기 위해 하나 이상의 시스템 데이터 테이블을 참조할 수 있다.
블록 316에서, 컴퓨팅 디바이스(100)는 (운영 체제(204)에 의해 실행된 임의의 애플리케이션들(202)을 포함하는) 운영 체제(204)를 실행시키고 GPIO 이벤트들에 대해 모니터링한다. GPIO 이벤트들은 하나 이상의 애플리케이션(202)에 의해 요청된 GPIO 이벤트들을 포함하여, 운영 체제(204)에 의해 야기된 이벤트들을 포함할 수 있다. GPIO 이벤트들은 또한 임베디드 제어기(132) 및/또는 주변 디바이스(134)로부터 발생된 이벤트들 또는 소프트웨어-발생 이벤트들을 포함하여, 가상 GPIO 제어기(212)에 의해 야기된 이벤트들을 포함할 수 있다. GPIO 이벤트들은 또한 가상 GPIO 제어기 펌웨어 인터페이스(208)에 의해 트리거된 인터럽트들을 포함할 수 있다. GPIO 이벤트들을 처리하기 위한 방법들은 도 4 및 도 5와 관련하여 아래에 상세히 설명된다. 일부 실시예들에서, 블록 318에서, 컴퓨팅 디바이스(100)는 프로세서(120) 및/또는 I/O 서브시스템(122)의 하드웨어 인터럽트들을 인에이블할 수 있다. 다른 것들 중에서, 가상 GPIO 제어기 펌웨어 인터페이스(208)는 단일 하드웨어 인터럽트 라인을 사용하여 운영 체제(204)에 이벤트들을 시그널링할 수 있다. 부가적으로, 일부 실시예들에서, 가상 GPIO 제어기(212)는 임베디드 제어기들(132) 및/또는 주변 디바이스들(134)로부터의 이벤트들을 관리하기 위해 하드웨어 인터럽트들을 모니터링할 수 있다. 방법(300)은 운영 체제(204)를 실행시키고 GPIO 이벤트들에 대해 모니터링하는 것을 계속하기 위해 블록 316으로 루프백한다.
이제 도 4를 참조하면, 사용 시에, 컴퓨팅 디바이스(100)는 운영 체제(204)에 의해 수신된 GPIO 이벤트들을 모니터링하고 그에 응답하기 위한 방법(400)을 실행할 수 있다. 방법(400)은 컴퓨팅 디바이스(100)가 운영 체제(204)를 사용하여 GPIO 이벤트에 대해 모니터링하는 블록 402로 시작된다. GPIO 이벤트는 가상 GPIO 핀의 상태에 관한 임의의 플랫폼 이벤트로서 구현될 수 있다. GPIO 이벤트들은 가상 GPIO 핀의 상태에 관련된 인터럽트들 또는 다른 비동기 이벤트들뿐만 아니라, 판독, 기입, 또는 제어 커맨드들과 같은 GPIO 커맨드들을 포함한다. 일부 실시예들에서, 블록 404에서, 컴퓨팅 디바이스(100)는 애플리케이션(202)으로부터 GPIO 서비스들에 대한 호출을 수신할 수 있다. 운영 체제(204)는 애플리케이션들(202)로부터 GPIO 서비스들에 대한 호출들을 수신하기 위해 표준화된 애플리케이션 프로그래밍 인터페이스(API)를 구현할 수 있다. 서비스에 대한 호출은 전형적으로 (블록 410과 관련하여 아래에 더 설명되는) I/O 커맨드들 및 제어 커맨드들을 포함하는, 하나 이상의 GPIO 커맨드 상으로 맵핑될 수 있다. 일부 실시예들에서, 블록 406에서, 컴퓨팅 디바이스(100)는 가상 GPIO 제어기 펌웨어 인터페이스(208)로부터 수신된 GPIO 인터럽트를 트랩핑할 수 있다. 인터럽트는 가상 GPIO 핀의 상태에 기초하여, 예를 들어 에뮬레이션으로부터의 상태 변화, 또는 기반 주변 디바이스(134) 및/또는 임베디드 제어기(132)의 상태 변화에 기초하여 발생될 수 있다. 인터럽트는 컴퓨팅 디바이스(100) 상의 펌웨어에 이용가능한 임의의 메소드를 사용하여 시그널링될 수 있다. 예를 들어, 인터럽트는 ACPI 규격에 의해 정의된 것과 같은 시스템 제어 인터럽트(SCI)로서 발생될 수 있다. GPIO 인터럽트들의 발생이 도 5의 방법(500)과 관련하여 더 설명된다.
블록 408에서, 컴퓨팅 디바이스(100)는 GPIO 이벤트가 수신되었는지를 결정한다. 그렇지 않으면, 방법(400)은 GPIO 이벤트들에 대해 모니터링하는 것을 계속하기 위해 블록 402로 루프백한다. GPIO 이벤트가 수신되었다면, 방법(400)은 블록 410으로 진행한다.
블록 410에서, 컴퓨팅 디바이스(100)는 운영 체제(204)로부터 가상 GPIO 제어기 드라이버(206)로 GPIO 커맨드를 송신한다. GPIO 커맨드는 GPIO 핀에 의해 수행될 동작을 특정한다. GPIO 커맨드가 궁극적으로 가상 GPIO 핀에 의해 구현될 것이지만, 동일한 인터페이스가 물리적 및 가상 GPIO 핀들 둘 다를 위해 운영 체제(204)에 의해 사용된다. 따라서, 운영 체제(204) 및 운영 체제(204)의 드라이버 인터페이스는 물리적 및 가상 GPIO 핀들에 대해 동일할 수 있다. 위에 설명된 바와 같이, GPIO 커맨드는 애플리케이션(202)으로부터의 서비스들에 대한 요청에 응답하여 이루어질 수 있거나 가상 GPIO 제어기 펌웨어 인터페이스(208)로부터 수신된 인터럽트를 서비스하기 위해 생성될 수 있다. 컴퓨팅 디바이스(100)는 커맨드를 가상 GPIO 제어기 드라이버(206)에 송신하기 위해 임의의 메소드를 사용할 수 있다. 예를 들어, 운영 체제(204)는 가상 GPIO 제어기 드라이버(206)에 의해 정의된 하나 이상의 콜백 펑션을 호출할 수 있다. 그러한 콜백 펑션은 GPIO 제어기들에 대한 널리 공지된 드라이버 인터페이스의 일부일 수 있다. 따라서, 운영 체제(204)는 하드웨어 GPIO 드라이버들에 대한 것과 동일한 방식으로 가상 GPIO 제어기 드라이버(206)와 상호작용한다.
일부 실시예들에서, 블록 412에서, 컴퓨팅 디바이스(100)는 I/O 커맨드를 가상 GPIO 제어기 드라이버(206)에 송신할 수 있다. I/O 커맨드들은 가상 GPIO 핀으로부터의 데이터를 판독 또는 기입하라는 커맨드들을 포함할 수 있다. 일부 실시예들에서, 블록 414에서, 컴퓨팅 디바이스(100)는 가상 GPIO 제어기 드라이버(206)에 제어 커맨드를 송신할 수 있다. 제어 커맨드는 가상 GPIO 핀의 거동을 조정하거나 가상 GPIO 핀의 상태를 질의하는 커맨드들을 포함할 수 있다. 제어 커맨드들은 가상 GPIO 핀에 대한 인터럽트들을 인에이블 또는 디스에이블하고, 가상 GPIO 핀의 논리 레벨을 조정하고, 가상 GPIO 핀의 구동 전류를 조정하는 커맨드들, 또는 다른 제어 커맨드들을 포함할 수 있다. 예를 들어, 운영 체제(204)는 GPIO 인터럽트를 야기하는 가상 GPIO 핀 또는 핀들을 결정하는 제어 커맨드들을 송신할 수 있다.
블록 416에서, 컴퓨팅 디바이스(100)는 가상 GPIO 제어기 드라이버(206)로부터 가상 GPIO 제어기 펌웨어 인터페이스(208)로 GPIO 커맨드를 송신한다. 컴퓨팅 디바이스(100)는 가상 GPIO 제어기 펌웨어 인터페이스(208)을 인보크하기 위해 임의의 기술을 사용할 수 있다. 예를 들어, 컴퓨팅 디바이스(100)는 시스템 데이터 테이블로부터 펌웨어 제어 메소드(210)를 선택할 수 있고 그 제어 메소드를 실행할 수 있다. 일부 실시예들에서, 펌웨어 제어 메소드(210)는 적절한 바이트코드 해석기를 사용하여 실행될 수 있다.
블록 418에서, 컴퓨팅 디바이스(100)는 GPIO 커맨드를 구현하기 위해 가상 GPIO 제어기(212)를 사용하여 가상 GPIO 핀을 에뮬레이트한다. 컴퓨팅 디바이스(100)는 가상 GPIO 핀의 거동을 가상화, 추상화, 또는 다른 방식으로 에뮬레이트하기 위해 임의의 기술을 사용할 수 있다. 물론, 일부 실시예들에서 가상 GPIO 제어기 펌웨어 인터페이스(208) 및 가상 GPIO 제어기(212)는 둘 다 펌웨어로 또는 동일한 펌웨어 제어 메소드(210)로 구현될 수 있다는 것을 이해하여야 한다. 일부 실시예들에서, 블록 420에서, 컴퓨팅 디바이스(100)는 하드웨어 GPIO 핀의 거동을 에뮬레이트할 수 있다. 예를 들어, 컴퓨팅 디바이스(100)는 특정한 가상 GPIO 핀과 관련된 배킹 메모리에 저장된 값을 판독 또는 기입함으로써 판독 또는 기입 커맨드에 응답할 수 있다. 일부 실시예들에서, 배킹 메모리는, 펌웨어에 의해 사용을 위해 예약되고, 따라서 운영 체제(204)로부터 격리된 메모리(126)의 세그먼트로서 구현될 수 있다. 따라서, 컴퓨팅 디바이스(100)는 가상 GPIO 핀에 할당된 값을 지속할 수 있고; 즉, 컴퓨팅 디바이스(100)는 적어도 일부 기준 시간 기간 동안 가상 GPIO 핀과 관련된 값을 유지할 수 있다. 부가적으로 또는 대안적으로, 컴퓨팅 디바이스(100)는 디바이스 드라이버 또는 애플리케이션을 인보크하는, 소프트웨어 모델, 또는 다른 에뮬레이션 기술을 사용하여 하드웨어 GPIO 핀의 거동을 에뮬레이트할 수 있다.
일부 실시예들에서, 블록 422에서, 컴퓨팅 디바이스(100)는 가상 GPIO 핀으로서 임베디드 제어기(132) 또는 주변 디바이스(134)의 인터페이스를 적응시킬 수 있다. 바꾸어 말하면, 컴퓨팅 디바이스(100)는 주변 디바이스(134) 또는 임베디드 제어기(132)를 사용하여 가상 GPIO 핀을 에뮬레이트할 수 있다. 주변 디바이스(134)의 인터페이스를 적응시키면 주변 디바이스(134)가 하나 이상의 하드웨어 GPIO 핀을 통해 컴퓨팅 디바이스(100)에 접속되는 것으로 운영 체제(204)에 나타나게 할 수 있다. 특히, 컴퓨팅 디바이스(100)는 주변 디바이스(134)를 제어하는 데 사용되는 특정한 하드웨어 또는 소프트웨어 인터페이스를 적응시킬 수 있다. 예를 들어, 컴퓨팅 디바이스(100)는 GPIO 커맨드들(예를 들어, 판독, 기입, 상태, 및 이벤트들)을 특정한 주변 디바이스(134)에 의해 사용되는 하드웨어 인터페이스로 변환할 수 있다. 임베디드 제어기(132)를 적응시키면 임베디드 제어기(132)의 하나 이상의 입력 또는 출력이 하드웨어 GPIO 핀들로서 운영 체제(204)에 나타나게 할 수 있다. 그러한 입력 또는 출력은 임베디드 제어기(132) 상에 물리적 GPIO 핀들로서 구현될 수 있다. 예를 들어, 컴퓨팅 디바이스(100)는 적절한 인터커넥트 버스를 통해 GPIO 커맨드들을 임베디드 제어기(132)로 그리고 임베디드 제어기로부터 포워딩할 수 있고, 임베디드 제어기(132)는 그 자신의 I/O 리소스들(예를 들어, GPIO 핀들 또는 다른 하드웨어 인터페이스들)과의 I/O 동작들을 수행할 수 있다. 따라서, 일부 실시예들에서, 임베디드 제어기(132)는 하나 이상의 주변 디바이스(134)와 인터페이스할 수 있다.
일부 실시예들에서, 블록 424에서, 컴퓨팅 디바이스(100)는 임베디드 제어기(132) 및/또는 주변 디바이스(134)로의 또는 그로부터의 GPIO 데이터를 멀티플렉싱할 수 있다. 예를 들어, 단일의 임베디드 제어기(132)는 주변 디바이스들(134)에 대한 다수의 하드웨어 I/O 접속들을 포함할 수 있지만, 단일 버스, 핀, 또는 인터럽트를 사용하여 I/O 서브시스템(122)에 접속될 수 있다. 가상 GPIO 제어기(212) - 또는 컴퓨팅 디바이스(100)의 추가의 가상 GPIO 제어기들(212) - 는 하나보다 많은 가상 GPIO 핀을 에뮬레이트할 수 있다. 가상 GPIO 제어기(212)는 임베디드 제어기(132)가 각각의 하드웨어 I/O 접속에 대해 적절한 동작을 수행할 수 있도록 각각의 가상 GPIO 핀에 관한 GPIO 커맨드들을 패키지, 식별, 또는 다른 방식으로 멀티플렉싱할 수 있다. 예를 들어, 임베디드 제어기(132)는 다수의 하드웨어 GPIO 핀들을 포함할 수 있고, 가상 GPIO 제어기(212)는 그러한 하드웨어 GPIO 핀 각각에 대한 가상 GPIO 핀을 에뮬레이트할 수 있다. 유사하게, 일부 실시예들에서, 컴퓨팅 디바이스(100)는 동일한 하드웨어 접속을 공유하는 다수의 주변 디바이스들(134)과 관련된 수개의 가상 GPIO 핀들에 대한 GPIO 데이터를 멀티플렉싱할 수 있다. 위에 설명된 바와 같이, 멀티플렉싱은 주변 디바이스들(134)을 지원하는 데 필요한 프로세서(120) 및/또는 I/O 서브시스템(122) 상의 물리적 핀들의 수를 감소시킬 수 있다.
일부 실시예들에서, 블록 426에서, 컴퓨팅 디바이스(100)는 가상 GPIO 핀의 에뮬레이션에 응답하여 GPIO 이벤트를 발생시킬 수 있다. 예를 들어, 소프트웨어 에뮬레이션은 GPIO 이벤트가 가상 GPIO 핀의 새로운 상태에 기초하여 발생되어야 하는 것을 결정할 수 있다. 다른 예로서, 컴퓨팅 디바이스(100)는 GPIO 이벤트가 임베디드 제어기(132) 및/또는 주변 디바이스(134)와의 상호작용에 기초하여 발생되어야 한다는 것을 결정할 수 있다. 가상 GPIO 제어기(212)에 의해 발생된 GPIO 이벤트는 아래에 설명되는 도 5의 방법(500)에 의해 처리될 수 있다.
블록 428에서, 컴퓨팅 디바이스(100)는 GPIO 커맨드의 결과들을 가상 GPIO 제어기 드라이버(206)를 통해 운영 체제(204)에 리턴할 수 있다. 예를 들어, 가상 GPIO 제어기 드라이버(206)는 운영 체제(204)에 의해 이전에 호출된 콜백 메소드로부터의 결과들을 리턴할 수 있다. 리턴된 결과들은 상태 코드들 또는 GPIO 이벤트의 성공을 설명하는 다른 정보를 포함할 수 있다. 일부 실시예들에서, 블록 430에서, 컴퓨팅 디바이스(100)는 예를 들어, 판독 커맨드에 응답하여, 가상 GPIO 데이터를 운영 체제(204)에 리턴할 수 있다. 예를 들어, 가상 GPIO 데이터는 가상 GPIO 핀과 관련된 가상 입력 값을 나타낼 수 있다. 운영 체제(204)는 결국 리턴된 GPIO 데이터를 사용하여 애플리케이션(202)에 응답하고, 인터럽트를 서비스하거나, 또는 다른 방식으로 GPIO 이벤트를 처리할 수 있다. 결과들을 리턴한 후에, 방법(400)은 GPIO 이벤트들에 대해 모니터링하는 것을 계속하기 위해 블록 402로 루프백한다.
이제 도 5를 참조하면, 사용 시에, 컴퓨팅 디바이스(100)는 가상 GPIO 제어기(212)에 의해 수신된 GPIO 이벤트들을 모니터링하고 그에 응답하기 위한 방법(500)을 실행할 수 있다. 방법(500)은 컴퓨팅 디바이스(100)가 가상 GPIO 제어기(212)를 사용하여 GPIO 이벤트에 대해 모니터링하는 블록 502에서 시작된다. 가상 GPIO 제어기(212)는 소프트웨어 이벤트들, 하드웨어 이벤트들, 인터럽트들, 네트워크 이벤트들, 또는 에뮬레이트된 가상 GPIO 핀에 영향을 주는 임의의 다른 이벤트를 포함하는, 가상 GPIO 핀의 상태에 영향을 주는 임의의 플랫폼 이벤트에 대해 모니터링할 수 있다. 블록 504에서, 컴퓨팅 디바이스(100)는 소프트웨어 GPIO 이벤트에 대해 모니터링한다. GPIO 이벤트는 예를 들어, 가상 GPIO 제어기 드라이버(206)로부터 수신된 GPIO 커맨드에 응답하여, 가상 GPIO 제어기(212) 자체에 의해 소프트웨어 또는 펌웨어에서 발생될 수 있다. 소프트웨어 GPIO 이벤트들의 발생이 도 4의 블록 426과 관련하여 위에 더 설명되었다. 일부 실시예들에서, 블록 506에서, 컴퓨팅 디바이스(100)는 가상 GPIO 제어기(212)의 펌웨어-제어된 배킹 메모리를 모니터링할 수 있다. 컴퓨팅 디바이스(100)는 배킹 메모리 내의 임의의 값들이 변화하였는지, 예를 들어, 플랫폼 이벤트가 데이터를 배킹 메모리에 기입하였는지를 결정할 수 있다. 일부 실시예들에서, 블록 508에서, 컴퓨팅 디바이스(100)는 주변 디바이스(134)와의 I/O에 대해 모니터링할 수 있다. 컴퓨팅 디바이스(100)는 데이터가 주변 디바이스(134)에 송신 또는 수신되었는지, 주변 디바이스(134)가 인터럽트를 트리거하였는지, 주변 디바이스(134)가 송신될 준비가 된 데이터를 갖는지, 또는 주변 디바이스(134)와의 임의의 다른 I/O 동작이 펜딩 중인지를 결정할 수 있다. 유사하게, 일부 실시예들에서, 블록 510에서, 컴퓨팅 디바이스(100)는 임베디드 제어기(132)와의 I/O에 대해 모니터링할 수 있다.
블록 512에서, 컴퓨팅 디바이스(100)는 GPIO 이벤트가 수신되었는지를 결정한다. 그렇지 않으면, 방법(500)은 GPIO 이벤트들에 대해 모니터링하는 것을 계속하기 위해 블록 502로 루프백한다. GPIO 이벤트가 수신되었으면, 방법(500)은 블록(514)으로 진행한다.
블록 514에서, 컴퓨팅 디바이스(100)는 GPIO 이벤트를 핸들링하기 위해 가상 GPIO 제어기(212)를 사용하여 가상 GPIO 핀을 에뮬레이트한다. 특히, 가상 GPIO 핀의 에뮬레이트된 상태는 GPIO 이벤트를 핸들링하는 것에 응답하여 수정될 수 있다. 컴퓨팅 디바이스(100)는 가상 GPIO 핀의 거동을 가상화, 추상화, 적응 또는 다른 방식으로 에뮬레이트하기 위해 임의의 기술을 사용할 수 있다. 물론, 일부 실시예들에서 가상 GPIO 제어기 펌웨어 인터페이스(208) 및 가상 GPIO 제어기(212)는 둘 다 펌웨어로 또는 동일한 펌웨어 제어 메소드(210)로 구현될 수 있다는 점이 이해되어야 한다. 일부 실시예들에서, 블록 516에서, 컴퓨팅 디바이스(100)는 하드웨어 GPIO 핀의 거동을 에뮬레이트할 수 있다. 예를 들어, 컴퓨팅 디바이스(100)는 가상 GPIO 핀과 관련된 가상 입력 값 또는 가상 GPIO 핀과 관련된 가상 출력 값을 결정할 수 있다. 일부 실시예들에서, 가상 GPIO 핀의 에뮬레이트된 상태는 위에 설명된 바와 같이, 펌웨어-제어된 배킹 메모리에 저장될 수 있다. 부가적으로 또는 대안적으로, 컴퓨팅 디바이스(100)는 디바이스 드라이버 또는 애플리케이션을 인보크하는, 소프트웨어 모델을 사용하여, 또는 임의의 다른 에뮬레이션 기술을 사용하여, 하드웨어 GPIO 핀의 거동을 에뮬레이트할 수 있다.
일부 실시예들에서, 블록 518에서, 컴퓨팅 디바이스(100)는 가상 GPIO 핀으로서 임베디드 제어기(132) 또는 주변 디바이스(134)의 인터페이스를 적응시킬 수 있다. 주변 디바이스(134)의 인터페이스를 적응시키면 주변 디바이스(134)가 하나 이상의 하드웨어 GPIO 핀을 통해 컴퓨팅 디바이스(100)에 접속된 것으로 운영 체제(204)에 나타나게 할 수 있다. 특히, 컴퓨팅 디바이스(100)는 주변 디바이스(134)를 제어하는 데 사용되는 특정한 하드웨어 또는 소프트웨어 인터페이스를 적응시킬 수 있다. 예를 들어, 컴퓨팅 디바이스(100)는 가상 GPIO 핀의 에뮬레이트된 상태를 수정하기 위해 특정한 주변 디바이스(134)로부터 수신된 I/O 이벤트들(예를 들어, 입력, 출력, 또는 인터럽트들)을 해석할 수 있다. 임베디드 제어기(132)를 적응시키면 임베디드 제어기(132)의 하나 이상의 입력 또는 출력의 상태에 기초하여 가상 GPIO 핀의 상태를 수정할 수 있다. 그러한 입력 또는 출력은 임베디드 제어기(132) 상의 물리적 GPIO 핀들로서 구현될 수 있다. 따라서, 일부 실시예들에서, 임베디드 제어기(132)는 하나 이상의 주변 디바이스(134)와 인터페이스할 수 있다.
일부 실시예들에서, 블록 520에서, 컴퓨팅 디바이스(100)는 임베디드 제어기(132) 및/또는 주변 디바이스(134)로의 또는 그로부터의 GPIO 데이터를 멀티플렉싱할 수 있다. 예를 들어, 단일의 임베디드 제어기(132)는 주변 디바이스들(134)에 대한 다수의 하드웨어 I/O 접속들을 포함할 수 있지만, 단일 버스, 핀, 또는 인터럽트를 사용하여 I/O 서브시스템(122)에 접속될 수 있다. 가상 GPIO 제어기(212) - 또는 컴퓨팅 디바이스(100)의 추가의 가상 GPIO 제어기들(212) - 는 하나보다 많은 가상 GPIO 핀을 에뮬레이트할 수 있다. 가상 GPIO 제어기(212)는 임베디드 제어기(132)로부터 다수의 가상 GPIO 핀 상에서 수신된 I/O 이벤트들을 패키지, 식별, 또는 다른 방식으로 멀티플렉싱할 수 있다. 예를 들어, 임베디드 제어기(132)는 다수의 하드웨어 GPIO 핀들을 포함할 수 있고, 가상 GPIO 제어기(212)는 그러한 하드웨어 GPIO 핀 각각에 대한 가상 GPIO 핀을 에뮬레이트할 수 있다. 유사하게, 일부 실시예들에서, 컴퓨팅 디바이스(100)는 동일한 하드웨어 접속을 공유하는 다수의 주변 디바이스들(134)과 관련된 수개의 가상 GPIO 핀들에 대한 GPIO 데이터를 멀티플렉싱할 수 있다. 위에 설명된 바와 같이, 멀티플렉싱은 주변 디바이스들(134)을 지원하는 데 필요한 I/O 서브시스템(122) 및/또는 프로세서(120) 상의 물리적 핀들의 수를 감소시킬 수 있다.
GPIO 이벤트를 핸들링한 후에, 블록 522에서, 컴퓨팅 디바이스(100)는 인터럽트들이 GPIO 이벤트에 대해 인에이블되었는지를 결정한다. 인터럽트들은 가상 GPIO 제어기 드라이버(206) 또는 가상 GPIO 제어기 펌웨어 인터페이스(208)로부터 수신된 제어 커맨드들에 의해 이전에 인에이블되었을 수 있다. 인터럽트들은 개별적인 가상 GPIO 핀들에 대해 인에이블될 수 있다. 따라서, 컴퓨팅 디바이스(100)는 인에이블된 가상 GPIO 핀들과 관련된 가상 GPIO 데이터가 변화하였는지를 결정할 수 있다. 부가적으로 또는 대안적으로, 컴퓨팅 디바이스(100)는 인터럽트가 GPIO 이벤트에 대해 적절한지를 결정할 수 있다. 예를 들어, 인터럽트는 가상 GPIO 핀의 상태가 변화하였을 때 적절할 수 있다. 인터럽트들이 인에이블되지 않으면, 방법(500)은 GPIO 이벤트들에 대해 모니터링하는 것을 계속하기 위해 블록 502로 루프백한다. 위에 설명된 바와 같이, 운영 체제(204)는 적절한 GPIO 커맨드들을 송신함으로써 나중 시간에 GPIO 데이터를 동기하여 판독할 수 있다. 인터럽트들이 인에이블되면, 방법(500)은 블록 524로 진행한다.
블록 524에서, 컴퓨팅 디바이스(100)는 가상 GPIO 제어기 펌웨어 인터페이스(208)로부터 운영 체제(204)로의 인터럽트를 트리거한다. 가상 GPIO 제어기(212)는 인터럽트를 발생시키기 위해 가상 GPIO 제어기 펌웨어 인터페이스(208)를 인보크할 수 있다. 인터럽트는 위에 설명된 바와 같이 별도의 칩으로서 구현되거나 컴퓨팅 디바이스(100)의 시스템 온 칩(SoC)에 포함될 수 있는 I/O 서브시스템(122)에 의해 발생된 물리적 인터럽트로서 구현될 수 있다. 인터럽트는 인터럽트를 서비스하기 위해 가상 GPIO 제어기 드라이버(206)의 적절한 펑션들을 결국 호출할 수 있는 운영 체제(204)에 의해 핸들링될 수 있다. 펌웨어 인터럽트의 핸들링은 도 4의 블록 406과 관련하여 위에 더 설명되었다. 인터럽트는 운영 체제(204)와 호환가능한 임의의 적절한 기술을 사용하여 트리거될 수 있다. 예를 들어, 인터럽트는 ACPI 규격에 의해 정의된 것과 같은 시스템 제어 인터럽트(SCI)로서 구현될 수 있다. 인터럽트를 트리거한 후에, 방법(500)은 GPIO 이벤트들에 대해 모니터링하는 것을 계속하기 위해 블록 502로 루프백한다.
방법들(400, 500)이 GPIO 이벤트들에 대해 동기하여 모니터링하는 것으로서 설명되었지만, 일부 실시예들에서 방법들(400, 500)은 이벤트-구동 또는 비동기일 수 있다는 점이 이해되어야 한다. 또한, 방법들(400, 500)은 컴퓨팅 디바이스(100) 상에서 서로, 운영 체제(204)와, 그리고 컴퓨팅 디바이스(100)의 임의의 애플리케이션들(202)과 동시에 실행할 수 있다.
예들
여기에 개시된 기술들의 예시적인 예들이 아래에 제공된다. 기술들의 실시예는 아래에 설명된 예들 중 임의의 하나 이상 및 임의의 조합을 포함할 수 있다.
예 1은 범용 I/O(GPIO)를 에뮬레이트하기 위한 컴퓨팅 디바이스를 포함하고, 컴퓨팅 디바이스는 가상 GPIO 제어기 드라이버, 가상 GPIO 제어기 펌웨어 인터페이스 및 가상 GPIO 제어기를 포함하고, 가상 GPIO 제어기 드라이버는 (ⅰ) 컴퓨팅 디바이스의 운영 체제로부터 GPIO 커맨드를 수신하고 - GPIO 커맨드는 GPIO 핀에 의해 구현될 동작을 특정함 -, (ⅱ) GPIO 커맨드의 수신에 응답하여 GPIO 커맨드를 가상 GPIO 제어기 펌웨어 인터페이스에 송신하고; 가상 GPIO 펌웨어 인터페이스는 가상 GPIO 제어기 드라이버로부터 GPIO 커맨드를 수신하고; 가상 GPIO 제어기는 가상 GPIO 제어기 드라이버로부터의 가상 GPIO 제어기 펌웨어 인터페이스에 의한 GPIO 커맨드의 수신에 응답하여 GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트한다.
예 2는 예 1의 발명 대상을 포함하고, GPIO 커맨드는 판독 커맨드를 포함하고; GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀의 가상 입력 값을 결정하는 것을 포함하고; 가상 GPIO 제어기 드라이버는 또한 가상 GPIO 핀의 에뮬레이션에 응답하여 가상 입력 값을 운영 체제에 리턴한다.
예 3은 예 1 및 2 중 어느 하나의 발명 대상을 포함하고, GPIO 커맨드는 기입 커맨드를 포함하고; GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀의 가상 출력 값을 결정하고 기준 시간 기간 동안 가상 GPIO 핀 상에 가상 출력 값을 유지하는 것을 포함한다.
예 4는 예 1-3 중 어느 하나의 발명 대상을 포함하고, GPIO 커맨드는 제어 커맨드를 포함하고; GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 것은 제어 커맨드의 펑션으로서 가상 GPIO 핀의 상태를 수정하는 것을 포함한다.
예 5는 예 1-4 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 드라이버는 또한 (ⅰ) 제2 GPIO 커맨드를 수신하고 - 상기 제2 GPIO 커맨드는 제2 GPIO 핀에 의해 구현될 동작을 특정함 -, (ⅱ) 제2 GPIO 커맨드를 가상 GPIO 제어기 펌웨어 인터페이스에 송신하고; 가상 GPIO 제어기 펌웨어 인터페이스는 또한 가상 GPIO 제어기 드라이버로부터 제2 GPIO 커맨드를 수신하고; 가상 GPIO 제어기는 또한 가상 GPIO 제어기 드라이버로부터의 가상 GPIO 제어기 펌웨어 인터페이스에 의한 제2 GPIO 커맨드의 수신에 응답하여 제2 GPIO 커맨드를 구현하기 위해 제2 가상 GPIO 핀을 에뮬레이트한다.
예 6은 예 1-5 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀으로서 컴퓨팅 디바이스의 마이크로컨트롤러를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 포함한다.
예 7은 예 1-6 중 어느 하나의 발명 대상을 포함하고, 마이크로컨트롤러는 컴퓨팅 디바이스의 임베디드 제어기를 포함한다.
예 8은 예 1-7 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀으로서 임베디드 제어기의 물리적 GPIO 핀을 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 더 포함한다.
예 9는 예 1-8 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기는 또한 제2 가상 GPIO 핀으로서 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 제2 가상 GPIO 핀을 에뮬레이트한다.
예 10은 예 1-9 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀으로서 컴퓨팅 디바이스의 주변 디바이스에 대한 인터페이스를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 포함한다.
예 11은 예 1-10 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기는 또한 가상 GPIO 제어기에 의해 사용하기 위한 메모리 세그먼트를 예약하고; 가상 GPIO 핀을 에뮬레이트하는 것은 배킹 메모리로서 예약된 메모리 세그먼트를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 포함한다.
예 12는 예 1-11 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기는 또한 GPIO 이벤트를 수신하고 - GPIO 이벤트는 가상 GPIO 핀의 상태에 관련됨 -; GPIO 이벤트의 펑션으로서 가상 GPIO 핀의 상태를 수정하기 위해 가상 GPIO 핀을 에뮬레이트한다.
예 13은 예 1-12 중 어느 하나의 발명 대상을 포함하고, GPIO 이벤트는 컴퓨팅 디바이스의 마이크로컨트롤러로부터 수신된 I/O 이벤트를 포함하고; 가상 GPIO 핀을 에뮬레이트하는 것은 I/O 이벤트의 펑션으로서 가상 GPIO 핀의 상태를 수정하는 것을 포함한다.
예 14는 예 1-13 중 어느 하나의 발명 대상을 포함하고, 마이크로컨트롤러는 컴퓨팅 디바이스의 임베디드 제어기를 포함한다.
예 15는 예 1-14 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기는 또한 제2 가상 GPIO 핀으로서 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 제2 가상 GPIO 핀을 에뮬레이트한다.
예 16은 예 1-15 중 어느 하나의 발명 대상을 포함하고, GPIO 이벤트는 컴퓨팅 디바이스의 주변 디바이스로부터 수신된 I/O 이벤트를 포함하고; 가상 GPIO 핀을 에뮬레이트하는 것은 I/O 이벤트의 펑션으로서 가상 GPIO 핀의 상태를 수정하는 것을 포함한다.
예 17은 예 1-16 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기는 또한 가상 GPIO 제어기에 의해 사용하기 위한 메모리 세그먼트를 예약하고; GPIO 이벤트를 수신하는 것은 예약된 메모리 세그먼트에의 메모리 액세스를 검출하는 것을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 것은 배킹 메모리로서 예약된 메모리 세그먼트를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 포함한다.
예 18은 예 1-17 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 펌웨어 인터페이스는 또한 가상 GPIO 핀의 상태의 수정에 응답하여 컴퓨팅 디바이스의 I/O 서브시스템에 의한 물리적 인터럽트를 운영 체제에 트리거한다.
예 19는 예 1-18 중 어느 하나의 발명 대상을 포함하고, 인터럽트는 운영 체제가 GPIO 커맨드를 가상 GPIO 제어기 드라이버에 송신하게 한다.
예 20은 예 1-19 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 드라이버에 의해 GPIO 커맨드를 수신하는 것은 운영 체제로부터 콜백 메소드를 수신하는 것을 포함한다.
예 21은 예 1-20 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 펌웨어 인터페이스는 가상 머신을 위한 제어 메소드를 포함하고, 제어 메소드는 컴퓨팅 디바이스의 바이트코드 해석기에 의해 해석된다.
예 22는 예 1-21 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 펌웨어 인터페이스는 복수의 ACPI 제어 메소드들을 포함하는 ACPI(advanced configuration and power interface) 디바이스를 포함한다.
예 23은 컴퓨팅 디바이스 상에서 범용 I/O(GPIO)를 에뮬레이트하는 방법을 포함하고, 방법은 컴퓨팅 디바이스의 운영 체제의 가상 GPIO 제어기 드라이버에 의해 GPIO 커맨드를 수신하고 - GPIO 커맨드는 GPIO 핀에 의해 구현될 동작을 특정함 -; GPIO 커맨드를 수신하는 것에 응답하여 가상 GPIO 제어기 드라이버로부터의 GPIO 커맨드를 컴퓨팅 디바이스의 가상 GPIO 제어기 펌웨어 인터페이스에 송신하고; 가상 GPIO 제어기 드라이버로부터 가상 GPIO 제어기 펌웨어 인터페이스에 의해 GPIO 커맨드를 수신하고; 가상 GPIO 제어기 드라이버로부터 가상 GPIO 제어기 펌웨어 인터페이스에 의해 GPIO 커맨드를 수신하는 것에 응답하여 GPIO 커맨드를 구현하기 위해 가상 GPIO 핀을, 컴퓨팅 디바이스의 가상 GPIO 제어기에 의해 에뮬레이트하는 것을 포함한다.
예 24는 예 23의 발명 대상을 포함하고, GPIO 커맨드를 수신하는 것은 판독 커맨드를 수신하는 것을 포함하고; GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀의 가상 입력 값을 결정하는 것을 포함하고; 방법은 가상 GPIO 핀을 에뮬레이트하는 것에 응답하여 가상 GPIO 제어기 드라이버로부터의 가상 입력 값을 운영 체제에 리턴하는 것을 더 포함한다.
예 25는 예 23 및 24 중 어느 하나의 발명 대상을 포함하고, GPIO 커맨드를 수신하는 것은 기입 커맨드를 수신하는 것을 포함하고; GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀의 가상 출력 값을 결정하고 기준 시간 기간 동안 가상 GPIO 핀 상에 가상 출력 값을 유지하는 것을 포함한다.
예 26은 예 23-25 중 어느 하나의 발명 대상을 포함하고, GPIO 커맨드를 수신하는 것은 제어 커맨드를 수신하는 것을 포함하고; GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 것은 제어 커맨드의 펑션으로서 가상 GPIO 핀의 상태를 수정하는 것을 포함한다.
예 27은 예 23-26 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 드라이버에 의해 제2 GPIO 커맨드를 수신하고 - 제2 GPIO 커맨드는 제2 GPIO 핀에 의해 구현될 동작을 특정함 -; 가상 GPIO 제어기 드라이버로부터의 제2 GPIO 커맨드를 가상 GPIO 제어기 펌웨어 인터페이스에 송신하고; 가상 GPIO 제어기 드라이버로부터 가상 GPIO 제어기 펌웨어 인터페이스에 의해 제2 GPIO 커맨드를 수신하고; 가상 GPIO 제어기 드라이버로부터 가상 GPIO 제어기 펌웨어 인터페이스에 의해 제2 GPIO 커맨드를 수신하는 것에 응답하여 제2 GPIO 커맨드를 구현하기 위해 제2 가상 GPIO 핀을 컴퓨팅 디바이스의 가상 GPIO 제어기에 의해 에뮬레이트하는 것을 더 포함한다.
예 28은 예 23-27 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀으로서 컴퓨팅 디바이스의 마이크로컨트롤러를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 포함한다.
예 29는 예 23-28 중 어느 하나의 발명 대상을 포함하고, 마이크로컨트롤러를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀으로서 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 포함한다.
예 30은 예 23-29 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀으로서 임베디드 제어기의 물리적 GPIO 핀을 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 더 포함한다.
예 31은 예 23-30 중 어느 하나의 발명 대상을 포함하고, 컴퓨팅 디바이스의 가상 GPIO 제어기에 의해, 제2 가상 GPIO 핀으로서 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 제2 가상 GPIO 핀을 에뮬레이트하는 것을 더 포함한다.
예 32은 예 23-31 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 것은 가상 GPIO 핀으로서 컴퓨팅 디바이스의 주변 디바이스에 대한 인터페이스를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 포함한다.
예 33은 예 23-32 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기에 의해 사용하기 위한 메모리 세그먼트를 예약하는 것을 더 포함하고; 가상 GPIO 핀을 에뮬레이트하는 것은 배킹 메모리로서 예약된 메모리 세그먼트를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 포함한다.
예 34는 예 23-33 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기에 의해 GPIO 이벤트를 수신하고 - GPIO 이벤트는 가상 GPIO 핀의 상태에 관련됨 -; GPIO 이벤트의 펑션으로서 가상 GPIO 핀의 상태를 수정하기 위해 가상 GPIO 핀을 가상 GPIO 제어기에 의해 에뮬레이트하는 것을 더 포함한다.
예 35는 예 23-34 중 어느 하나의 발명 대상을 포함하고, GPIO 이벤트를 수신하는 것은 컴퓨팅 디바이스의 마이크로컨트롤러로부터 I/O 이벤트를 수신하는 것을 포함하고; 가상 GPIO 핀을 에뮬레이트하는 것은 I/O 이벤트의 펑션으로서 가상 GPIO 핀의 상태를 수정하는 것을 포함한다.
예 36은 예 23-35 중 어느 하나의 발명 대상을 포함하고, I/O 이벤트를 수신하는 것은 컴퓨팅 디바이스의 임베디드 제어기로부터 I/O 이벤트를 수신하는 것을 포함한다.
예 37은 예 23-36 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기에 의해, 제2 가상 GPIO 핀으로서 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 제2 가상 GPIO 핀을 에뮬레이트하는 것을 더 포함한다.
예 38은 예 23-37 중 어느 하나의 발명 대상을 포함하고, GPIO 이벤트를 수신하는 것은 컴퓨팅 디바이스의 주변 디바이스로부터 I/O 이벤트를 수신하는 것을 포함하고; 가상 GPIO 핀을 에뮬레이트하는 것은 I/O 이벤트의 펑션으로서 가상 GPIO 핀의 상태를 수정하는 것을 포함한다.
예 39는 예 23-38 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기에 의해 사용하기 위한 메모리 세그먼트를 예약하는 것을 더 포함하고; GPIO 이벤트를 수신하는 것은 예약된 메모리 세그먼트에의 메모리 액세스를 검출하는 것을 포함하고; 가상 GPIO 핀을 에뮬레이트하는 것은 배킹 메모리로서 예약된 메모리 세그먼트를 사용하여 가상 GPIO 핀을 에뮬레이트하는 것을 포함한다.
예 40은 예 23-39 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 펌웨어 인터페이스에 의해, 가상 GPIO 핀의 상태를 수정하는 것에 응답하여 컴퓨팅 디바이스의 I/O 서브시스템에 의한 물리적 인터럽트를 운영 체제에 트리거하는 것을 더 포함한다.
예 41은 예 23-40 중 어느 하나의 발명 대상을 포함하고, 인터럽트는 운영 체제가 GPIO 커맨드를 가상 GPIO 제어기 드라이버에 송신하게 한다.
예 42는 예 23-41 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 드라이버에 의해 GPIO 커맨드를 수신하는 것은 운영 체제로부터 콜백 메소드를 수신하는 것을 포함한다.
예 43은 예 23-42 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 펌웨어 인터페이스는 가상 머신을 위한 제어 메소드를 포함하고, 제어 메소드는 컴퓨팅 디바이스의 바이트코드 해석기에 의해 해석된다.
예 44는 예 23-43 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 펌웨어 인터페이스는 복수의 ACPI 제어 메소드들을 포함하는 ACPI(advanced configuration and power interface) 디바이스를 포함한다.
예 45는 프로세서; 및 프로세서에 의해 실행될 때 컴퓨팅 디바이스로 하여금 예 23-44 중 어느 하나의 방법을 수행하게 하는 복수의 명령어들이 그에 저장되어 있는 메모리를 포함하는 컴퓨팅 디바이스를 포함한다.
예 46은 실행되는 것에 응답하여 컴퓨팅 디바이스가 예 23-44 중 어느 하나의 방법을 수행하게 하는 복수의 명령어들이 저장되어 있는 하나 이상의 머신 판독가능 저장 매체를 포함한다.
예 47은 예 23-44 중 어느 하나의 방법을 수행하는 수단을 포함하는 컴퓨팅 디바이스를 포함한다.
예 48은 범용 I/O(GPIO)를 에뮬레이트하기 위한 컴퓨팅 디바이스를 포함하고, 컴퓨팅 디바이스는 컴퓨팅 디바이스의 운영 체제의 가상 GPIO 제어기 드라이버에 의해 GPIO 커맨드를 수신하는 수단 - GPIO 커맨드는 GPIO 핀에 의해 구현될 동작을 특정함 -; GPIO 커맨드를 수신하는 것에 응답하여 가상 GPIO 제어기 드라이버로부터의 GPIO 커맨드를 컴퓨팅 디바이스의 가상 GPIO 제어기 펌웨어 인터페이스에 송신하는 수단; 가상 GPIO 제어기 드라이버로부터 가상 GPIO 제어기 펌웨어 인터페이스에 의해 GPIO 커맨드를 수신하는 수단; 및 가상 GPIO 제어기 드라이버로부터 가상 GPIO 제어기 펌웨어 인터페이스에 의해 GPIO 커맨드를 수신하는 것에 응답하여 GPIO 커맨드를 구현하기 위해 가상 GPIO 핀을, 컴퓨팅 디바이스의 가상 GPIO 제어기에 의해 에뮬레이트하는 수단을 포함한다.
예 49는 예 48의 발명 대상을 포함하고, GPIO 커맨드를 수신하는 수단은 판독 커맨드를 수신하는 수단을 포함하고; GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 수단은 가상 GPIO 핀의 가상 입력 값을 결정하는 수단을 포함하고; 컴퓨팅 디바이스는 가상 GPIO 핀을 에뮬레이트하는 것에 응답하여 가상 GPIO 제어기 드라이버로부터의 가상 입력 값을 운영 체제에 리턴하는 수단을 더 포함한다.
예 50은 예 48 및 49 중 어느 하나의 발명 대상을 포함하고, GPIO 커맨드를 수신하는 수단은 기입 커맨드를 수신하는 수단을 포함하고; GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 수단은 가상 GPIO 핀의 가상 출력 값을 결정하고 기준 시간 기간 동안 가상 GPIO 핀 상에 가상 출력 값을 유지하는 수단을 포함한다.
예 51은 예 48-50 중 어느 하나의 발명 대상을 포함하고, GPIO 커맨드를 수신하는 수단은 제어 커맨드를 수신하는 수단을 포함하고; GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 수단은 제어 커맨드의 펑션으로서 가상 GPIO 핀의 상태를 수정하는 수단을 포함한다.
예 52는 예 48-51 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 드라이버에 의해 제2 GPIO 커맨드를 수신하는 수단 - 제2 GPIO 커맨드는 제2 GPIO 핀에 의해 구현될 동작을 특정함 -; 가상 GPIO 제어기 드라이버로부터의 제2 GPIO 커맨드를 가상 GPIO 제어기 펌웨어 인터페이스에 송신하는 수단; 가상 GPIO 제어기 드라이버로부터 가상 GPIO 제어기 펌웨어 인터페이스에 의해 제2 GPIO 커맨드를 수신하는 수단; 및 가상 GPIO 제어기 드라이버로부터 가상 GPIO 제어기 펌웨어 인터페이스에 의해 제2 GPIO 커맨드를 수신하는 것에 응답하여 제2 GPIO 커맨드를 구현하기 위해 제2 가상 GPIO 핀을 컴퓨팅 디바이스의 가상 GPIO 제어기에 의해 에뮬레이트하는 수단을 더 포함한다.
예 53은 예 48-52 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 수단은 가상 GPIO 핀으로서 컴퓨팅 디바이스의 마이크로컨트롤러를 사용하여 가상 GPIO 핀을 에뮬레이트하는 수단을 포함한다.
예 54는 예 48-53 중 어느 하나의 발명 대상을 포함하고, 마이크로컨트롤러를 사용하여 가상 GPIO 핀을 에뮬레이트하는 수단은 가상 GPIO 핀으로서 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 가상 GPIO 핀을 에뮬레이트하는 수단을 포함한다.
예 55는 예 48-54 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 수단은 가상 GPIO 핀으로서 임베디드 제어기의 물리적 GPIO 핀을 사용하여 가상 GPIO 핀을 에뮬레이트하는 수단을 더 포함한다.
예 56은 예 48-55 중 어느 하나의 발명 대상을 포함하고, 컴퓨팅 디바이스의 가상 GPIO 제어기에 의해, 제2 가상 GPIO 핀으로서 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 제2 가상 GPIO 핀을 에뮬레이트하는 수단을 더 포함한다.
예 57은 예 48-56 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 핀을 에뮬레이트하는 수단은 가상 GPIO 핀으로서 컴퓨팅 디바이스의 주변 디바이스에 대한 인터페이스를 사용하여 가상 GPIO 핀을 에뮬레이트하는 수단을 포함한다.
예 58은 예 48-57 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기에 의해 사용하기 위한 메모리 세그먼트를 예약하는 수단을 더 포함하고; 가상 GPIO 핀을 에뮬레이트하는 수단은 배킹 메모리로서 예약된 메모리 세그먼트를 사용하여 가상 GPIO 핀을 에뮬레이트하는 수단을 포함한다.
예 59는 예 48-58 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기에 의해 GPIO 이벤트를 수신하는 수단 - GPIO 이벤트는 가상 GPIO 핀의 상태에 관련됨 -; 및 GPIO 이벤트의 펑션으로서 가상 GPIO 핀의 상태를 수정하기 위해 가상 GPIO 핀을 가상 GPIO 제어기에 의해 에뮬레이트하는 수단을 더 포함한다.
예 60은 예 48-59 중 어느 하나의 발명 대상을 포함하고, GPIO 이벤트를 수신하는 수단은 컴퓨팅 디바이스의 마이크로컨트롤러로부터 I/O 이벤트를 수신하는 수단을 포함하고; 가상 GPIO 핀을 에뮬레이트하는 수단은 I/O 이벤트의 펑션으로서 가상 GPIO 핀의 상태를 수정하는 수단을 포함한다.
예 61은 예 48-60 중 어느 하나의 발명 대상을 포함하고, I/O 이벤트를 수신하는 수단은 컴퓨팅 디바이스의 임베디드 제어기로부터 I/O 이벤트를 수신하는 수단을 포함한다.
예 62은 예 48-61 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기에 의해, 제2 가상 GPIO 핀으로서 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 제2 가상 GPIO 핀을 에뮬레이트하는 수단을 더 포함한다.
예 63은 예 48-62 중 어느 하나의 발명 대상을 포함하고, GPIO 이벤트를 수신하는 수단은 컴퓨팅 디바이스의 주변 디바이스로부터 I/O 이벤트를 수신하는 수단을 포함하고; 가상 GPIO 핀을 에뮬레이트하는 수단은 I/O 이벤트의 펑션으로서 가상 GPIO 핀의 상태를 수정하는 수단을 포함한다.
예 64는 예 48-63 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기에 의해 사용하기 위한 메모리 세그먼트를 예약하는 수단을 더 포함하고; GPIO 이벤트를 수신하는 수단은 예약된 메모리 세그먼트에의 메모리 액세스를 검출하는 수단을 포함하고; 가상 GPIO 핀을 에뮬레이트하는 수단은 배킹 메모리로서 예약된 메모리 세그먼트를 사용하여 가상 GPIO 핀을 에뮬레이트하는 수단을 포함한다.
예 65는 예 48-64 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 펌웨어 인터페이스에 의해, 가상 GPIO 핀의 상태를 수정하는 것에 응답하여 컴퓨팅 디바이스의 I/O 서브시스템에 의한 물리적 인터럽트를 운영 체제에 트리거하는 수단을 더 포함한다.
예 66은 예 48-65 중 어느 하나의 발명 대상을 포함하고, 인터럽트는 운영 체제가 GPIO 커맨드를 가상 GPIO 제어기 드라이버에 송신하게 한다.
예 67은 예 48-66 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 드라이버에 의해 GPIO 커맨드를 수신하는 수단은 운영 체제로부터 콜백 메소드를 수신하는 수단을 포함한다.
예 68은 예 48-67 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 펌웨어 인터페이스는 가상 머신을 위한 제어 메소드를 포함하고, 제어 메소드는 컴퓨팅 디바이스의 바이트코드 해석기에 의해 해석된다.
예 69는 예 48-68 중 어느 하나의 발명 대상을 포함하고, 가상 GPIO 제어기 펌웨어 인터페이스는 복수의 ACPI 제어 메소드들을 포함하는 ACPI(advanced configuration and power interface) 디바이스를 포함한다.

Claims (25)

  1. 범용 I/O(general purpose I/O)(GPIO)를 에뮬레이트하기 위한 컴퓨팅 디바이스로서 - 상기 컴퓨팅 디바이스는 가상 GPIO 제어기 드라이버, 가상 GPIO 제어기 펌웨어 인터페이스 및 가상 GPIO 제어기를 포함함 -,
    상기 가상 GPIO 제어기 드라이버는 (ⅰ) 상기 컴퓨팅 디바이스의 운영 체제로부터 GPIO 커맨드를 수신하고 - 상기 GPIO 커맨드는 GPIO 핀에 의해 구현될 동작을 특정함 -, (ⅱ) 상기 GPIO 커맨드의 수신에 응답하여, 상기 GPIO 커맨드를 상기 가상 GPIO 제어기 펌웨어 인터페이스에 송신하고;
    상기 가상 GPIO 펌웨어 인터페이스는 상기 가상 GPIO 제어기 드라이버로부터 상기 GPIO 커맨드를 수신하고;
    상기 가상 GPIO 제어기는, 상기 가상 GPIO 제어기 드라이버로부터 상기 가상 GPIO 제어기 펌웨어 인터페이스에 의해 상기 GPIO 커맨드를 수신하는 것에 응답하여, 상기 GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 컴퓨팅 디바이스.
  2. 제1항에 있어서,
    상기 GPIO 커맨드는 판독 커맨드를 포함하고;
    상기 GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 것은 상기 가상 GPIO 핀의 가상 입력 값을 결정하는 것을 포함하고;
    상기 가상 GPIO 제어기 드라이버는 또한 상기 가상 GPIO 핀의 에뮬레이션에 응답하여 상기 가상 입력 값을 상기 운영 체제에 리턴하는 컴퓨팅 디바이스.
  3. 제1항에 있어서,
    상기 GPIO 커맨드는 기입 커맨드를 포함하고;
    상기 GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 것은 상기 가상 GPIO 핀의 가상 출력 값을 결정하는 것, 및 기준 시간 기간(reference time period) 동안 상기 가상 GPIO 핀 상에 상기 가상 출력 값을 유지하는 것을 포함하는 컴퓨팅 디바이스.
  4. 제1항에 있어서,
    상기 GPIO 커맨드는 제어 커맨드를 포함하고;
    상기 GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 것은 상기 제어 커맨드의 펑션으로서 상기 가상 GPIO 핀의 상태를 수정하는 것을 포함하는 컴퓨팅 디바이스.
  5. 제1항에 있어서,
    상기 가상 GPIO 제어기 드라이버는 또한 (ⅰ) 제2 GPIO 커맨드를 수신하고 - 상기 제2 GPIO 커맨드는 제2 GPIO 핀에 의해 구현될 동작을 특정함 -, (ⅱ) 상기 제2 GPIO 커맨드를 상기 가상 GPIO 제어기 펌웨어 인터페이스에 송신하고;
    상기 가상 GPIO 제어기 펌웨어 인터페이스는 또한 상기 가상 GPIO 제어기 드라이버로부터 상기 제2 GPIO 커맨드를 수신하고;
    상기 가상 GPIO 제어기는 또한 상기 가상 GPIO 제어기 드라이버로부터 상기 가상 GPIO 제어기 펌웨어 인터페이스에 의해 상기 제2 GPIO 커맨드를 수신하는 것에 응답하여 상기 제2 GPIO 커맨드를 구현하도록 제2 가상 GPIO 핀을 에뮬레이트하는 컴퓨팅 디바이스.
  6. 제1항에 있어서,
    상기 가상 GPIO 핀을 에뮬레이트하는 것은, 상기 가상 GPIO 핀으로서 상기 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 상기 가상 GPIO 핀을 에뮬레이트하는 것을 포함하는 컴퓨팅 디바이스.
  7. 제6항에 있어서,
    상기 가상 GPIO 핀을 에뮬레이트하는 것은, 상기 가상 GPIO 핀으로서 상기 임베디드 제어기의 물리적 GPIO 핀을 사용하여 상기 가상 GPIO 핀을 에뮬레이트하는 것을 더 포함하는 컴퓨팅 디바이스.
  8. 제1항에 있어서,
    상기 가상 GPIO 핀을 에뮬레이트하는 것은, 상기 가상 GPIO 핀으로서 상기 컴퓨팅 디바이스의 주변 디바이스에 대한 인터페이스를 사용하여 상기 가상 GPIO 핀을 에뮬레이트하는 것을 포함하는 컴퓨팅 디바이스.
  9. 제1항에 있어서,
    상기 가상 GPIO 제어기는 또한 상기 가상 GPIO 제어기에 의해 사용하기 위한 메모리 세그먼트를 예약(reserve)하고;
    상기 가상 GPIO 핀을 에뮬레이트하는 것은, 배킹 메모리(backing memory)로서 상기 예약된 메모리 세그먼트를 사용하여 상기 가상 GPIO 핀을 에뮬레이트하는 것을 포함하는 컴퓨팅 디바이스.
  10. 제1항 내지 제9항 중 어느 한 항에 있어서,
    상기 가상 GPIO 제어기는 또한,
    GPIO 이벤트를 수신하고 - 상기 GPIO 이벤트는 상기 가상 GPIO 핀의 상태에 관련됨 -;
    상기 GPIO 이벤트의 펑션으로서 상기 가상 GPIO 핀의 상태를 수정하도록 상기 가상 GPIO 핀을 에뮬레이트하는 컴퓨팅 디바이스.
  11. 제10항에 있어서,
    상기 GPIO 이벤트는 상기 컴퓨팅 디바이스의 임베디드 제어기로부터 수신된 I/O 이벤트를 포함하고;
    상기 가상 GPIO 핀을 에뮬레이트하는 것은 상기 I/O 이벤트의 펑션으로서 상기 가상 GPIO 핀의 상태를 수정하는 것을 포함하는 컴퓨팅 디바이스.
  12. 제10항에 있어서,
    상기 GPIO 이벤트는 상기 컴퓨팅 디바이스의 주변 디바이스로부터 수신된 I/O 이벤트를 포함하고;
    상기 가상 GPIO 핀을 에뮬레이트하는 것은 상기 I/O 이벤트의 펑션으로서 상기 가상 GPIO 핀의 상태를 수정하는 것을 포함하는 컴퓨팅 디바이스.
  13. 제10항에 있어서,
    상기 가상 GPIO 제어기 펌웨어 인터페이스는 또한 상기 가상 GPIO 핀의 상태의 수정에 응답하여 상기 컴퓨팅 디바이스의 I/O 서브시스템에 의한 상기 운영 체제로의 물리적 인터럽트를 트리거하는 컴퓨팅 디바이스.
  14. 제13항에 있어서,
    상기 인터럽트는 상기 운영 체제로 하여금 상기 GPIO 커맨드를 상기 가상 GPIO 제어기 드라이버에 송신하게 하는 컴퓨팅 디바이스.
  15. 제1항 내지 제9항 중 어느 한 항에 있어서,
    상기 가상 GPIO 제어기 펌웨어 인터페이스는 복수의 ACPI(advanced configuration and power interface) 제어 메소드들을 포함하는 ACPI 디바이스를 포함하고, 각각의 ACPI 제어 메소드는 가상 머신을 위한 제어 메소드를 포함하고, 상기 제어 메소드는 상기 컴퓨팅 디바이스의 바이트코드 해석기(bytecode interpreter)에 의해 해석되는 컴퓨팅 디바이스.
  16. 컴퓨팅 디바이스 상에 범용 I/O(GPIO)를 에뮬레이트하기 위한 방법으로서,
    상기 컴퓨팅 디바이스의 운영 체제의 가상 GPIO 제어기 드라이버에 의해 GPIO 커맨드를 수신하는 단계 - 상기 GPIO 커맨드는 GPIO 핀에 의해 구현될 동작을 특정함 -;
    상기 GPIO 커맨드를 수신하는 것에 응답하여, 상기 가상 GPIO 제어기 드라이버로부터 상기 컴퓨팅 디바이스의 가상 GPIO 제어기 펌웨어 인터페이스로 상기 GPIO 커맨드를 송신하는 단계;
    상기 가상 GPIO 제어기 드라이버로부터 상기 가상 GPIO 제어기 펌웨어 인터페이스에 의해 상기 GPIO 커맨드를 수신하는 단계; 및
    상기 가상 GPIO 제어기 드라이버로부터 상기 가상 GPIO 제어기 펌웨어 인터페이스에 의해 상기 GPIO 커맨드를 수신하는 것에 응답하여, 상기 컴퓨팅 디바이스의 가상 GPIO 제어기에 의해, 상기 GPIO 커맨드를 구현하도록 가상 GPIO 핀을 에뮬레이트하는 단계
    를 포함하는 방법.
  17. 제16항에 있어서,
    상기 가상 GPIO 제어기 드라이버에 의해 제2 GPIO 커맨드를 수신하는 단계 - 상기 제2 GPIO 커맨드는 제2 GPIO 핀에 의해 구현될 동작을 특정함 -;
    상기 가상 GPIO 제어기 드라이버로부터 상기 가상 GPIO 제어기 펌웨어 인터페이스로 상기 제2 GPIO 커맨드를 송신하는 단계;
    상기 가상 GPIO 제어기 드라이버로부터 상기 가상 GPIO 제어기 펌웨어 인터페이스에 의해 상기 제2 GPIO 커맨드를 수신하는 단계; 및
    상기 가상 GPIO 제어기 드라이버로부터 상기 가상 GPIO 제어기 펌웨어 인터페이스에 의해 상기 제2 GPIO 커맨드를 수신하는 것에 응답하여, 상기 컴퓨팅 디바이스의 상기 가상 GPIO 제어기에 의해, 상기 제2 GPIO 커맨드를 구현하도록 제2 가상 GPIO 핀을 에뮬레이트하는 단계
    를 더 포함하는 방법.
  18. 제16항에 있어서,
    상기 가상 GPIO 핀을 에뮬레이트하는 단계는, 상기 가상 GPIO 핀으로서 상기 컴퓨팅 디바이스의 임베디드 제어기를 사용하여 상기 가상 GPIO 핀을 에뮬레이트하는 단계를 포함하는 방법.
  19. 제16항에 있어서,
    상기 가상 GPIO 핀을 에뮬레이트하는 단계는, 상기 가상 GPIO 핀으로서 상기 컴퓨팅 디바이스의 주변 디바이스에 대한 인터페이스를 사용하여 상기 가상 GPIO 핀을 에뮬레이트하는 단계를 포함하는 방법.
  20. 제16항에 있어서,
    상기 가상 GPIO 제어기에 의해 GPIO 이벤트를 수신하는 단계 - 상기 GPIO 이벤트는 상기 가상 GPIO 핀의 상태에 관련됨 -; 및
    상기 가상 GPIO 제어기에 의해, 상기 GPIO 이벤트의 펑션으로서 상기 가상 GPIO 핀의 상태를 수정하도록 상기 가상 GPIO 핀을 에뮬레이트하는 단계
    를 더 포함하는 방법.
  21. 제20항에 있어서,
    상기 GPIO 이벤트를 수신하는 단계는 상기 컴퓨팅 디바이스의 임베디드 제어기로부터 I/O 이벤트를 수신하는 단계를 포함하고;
    상기 가상 GPIO 핀을 에뮬레이트하는 단계는 상기 I/O 이벤트의 펑션으로서 상기 가상 GPIO 핀의 상태를 수정하는 단계를 포함하는 방법.
  22. 제20항에 있어서,
    상기 GPIO 이벤트를 수신하는 단계는 상기 컴퓨팅 디바이스의 주변 디바이스로부터 I/O 이벤트를 수신하는 단계를 포함하고;
    상기 가상 GPIO 핀을 에뮬레이트하는 단계는 상기 I/O 이벤트의 펑션으로서 상기 가상 GPIO 핀의 상태를 수정하는 단계를 포함하는 방법.
  23. 컴퓨팅 디바이스로서,
    프로세서; 및
    상기 프로세서에 의해 실행될 때, 상기 컴퓨팅 디바이스로 하여금 제16항 내지 제22항 중 어느 한 항의 방법을 수행하게 하는 복수의 명령어들이 저장되어 있는 메모리
    를 포함하는 컴퓨팅 디바이스.
  24. 실행되는 것에 응답하여, 컴퓨팅 디바이스가 제16항 내지 제22항 중 어느 한 항의 방법을 수행하게 하는 복수의 명령어들이 저장되어 있는 하나 이상의 머신 판독가능 저장 매체.
  25. 제16항 내지 제22항 중 어느 한 항의 방법을 수행하는 수단을 포함하는 컴퓨팅 디바이스.
KR1020167023189A 2014-03-27 2015-03-05 가상 범용 i/o 제어기 KR101856891B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/227,735 US9417801B2 (en) 2014-03-27 2014-03-27 Virtual general-purpose I/O controller
US14/227,735 2014-03-27
PCT/US2015/018914 WO2015148083A1 (en) 2014-03-27 2015-03-05 Virtual general-purpose i/o controller

Publications (2)

Publication Number Publication Date
KR20160113221A true KR20160113221A (ko) 2016-09-28
KR101856891B1 KR101856891B1 (ko) 2018-05-10

Family

ID=54190396

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167023189A KR101856891B1 (ko) 2014-03-27 2015-03-05 가상 범용 i/o 제어기

Country Status (6)

Country Link
US (1) US9417801B2 (ko)
EP (1) EP3123322B1 (ko)
JP (1) JP6319857B2 (ko)
KR (1) KR101856891B1 (ko)
CN (1) CN106062714B (ko)
WO (1) WO2015148083A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102014208177A1 (de) * 2014-04-30 2015-11-05 Robert Bosch Gmbh Bilden eines logischen Mikrocontrollers durch wenigstens zwei physikalische Mikrocontrollern auf einem gemeinsamen Halbleitersubstrat
US10146727B2 (en) * 2015-04-14 2018-12-04 Qualcomm Incorporated Enhanced virtual GPIO with multi-mode modulation
US10140242B2 (en) 2015-09-10 2018-11-27 Qualcomm Incorporated General purpose input/output (GPIO) signal bridging with I3C bus interfaces and virtualization in a multi-node network
US10459735B2 (en) * 2015-11-04 2019-10-29 Texas Instruments Incorporated Scalable boot options for a processor/controller
WO2017107120A1 (en) * 2015-12-24 2017-06-29 Intel Corporation Modifying operating system
EP3507672A4 (en) * 2016-09-05 2020-03-04 10T Holdings Pty Ltd INTERFACE SYSTEM AND METHOD FOR SOFTWARE-DEFINED DEVICE
US10482055B2 (en) 2017-05-10 2019-11-19 Qualcomm Incorporated Hardware event priority sensitive programmable transmit wait-window for virtual GPIO finite state machine
US10733121B2 (en) * 2018-05-10 2020-08-04 Qualcomm Incorporated Latency optimized I3C virtual GPIO with configurable operating mode and device skip
CN110489212B (zh) * 2019-08-20 2022-08-02 东软集团股份有限公司 一种通用型输入输出口虚拟化的方法、装置及车机
CN110912840B (zh) * 2019-11-24 2021-06-29 苏州浪潮智能科技有限公司 基于交换机端口的统一接口装置及底层设备信息获取方法
KR102471426B1 (ko) 2020-03-16 2022-11-25 이광희 Ble 메쉬 그룹 설정이 가능한 스마트 조명 장치 및 이를 이용한 조명 제어 방법
CN112069102B (zh) * 2020-09-04 2022-08-26 龙芯中科技术股份有限公司 Gpio控制器配置方法和系统
CN112486142B (zh) * 2020-11-26 2022-01-28 北京经纬恒润科技股份有限公司 将虚拟化io架构和汽车应用集成在ecu的方法及系统
CN116089199B (zh) * 2023-03-30 2023-07-11 湖南华自信息技术有限公司 一种io端口测试方法及服务器

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5838987A (en) * 1995-10-06 1998-11-17 National Semiconductor Corporation Processor for eliminating external isochronous subsystems
US6553223B1 (en) * 1999-12-30 2003-04-22 Qualcomm Incorporated Virtual device architecture for mobile telephones
US6825689B1 (en) * 2000-10-26 2004-11-30 Cypress Semiconductor Corporation Configurable input/output interface for a microcontroller
US8078970B1 (en) * 2001-11-09 2011-12-13 Cypress Semiconductor Corporation Graphical user interface with user-selectable list-box
US7484027B1 (en) * 2004-09-20 2009-01-27 Cypress Semiconductor Corporation Apparatus and method for configurable device pins
US7689747B2 (en) * 2005-03-28 2010-03-30 Microsoft Corporation Systems and methods for an augmented interrupt controller and synthetic interrupt sources
US7392172B2 (en) * 2005-04-28 2008-06-24 Hewlett-Packard Development Company, L.P. Providing virtual device access via firmware
US8032353B1 (en) * 2007-03-30 2011-10-04 Teradici Corporation Method and apparatus for providing peripheral connection management in a remote computing environment
CN100573537C (zh) * 2007-05-23 2009-12-23 中兴通讯股份有限公司 一种soc芯片系统级验证系统及方法
US8269524B2 (en) * 2010-04-27 2012-09-18 Atmel Corporation General purpose input/output pin mapping
US8181176B2 (en) * 2010-06-21 2012-05-15 Intel Corporation Uniform storage device access using partial virtual machine executing within a secure enclave session
US9904646B2 (en) * 2011-09-27 2018-02-27 Microchip Technology Incorporated Virtual general purpose input/output for a microcontroller
CN103092810B (zh) * 2011-11-02 2017-03-01 飞思卡尔半导体公司 处理器、对处理器编程的方法以及电子设备
US8725916B2 (en) * 2012-01-07 2014-05-13 Microsoft Corporation Host side implementation for HID I2C data bus
US9348618B2 (en) * 2012-03-14 2016-05-24 Aclara Meters Llc Systems and methods for enhancing firmware
US9129072B2 (en) * 2012-10-15 2015-09-08 Qualcomm Incorporated Virtual GPIO

Also Published As

Publication number Publication date
CN106062714A (zh) 2016-10-26
EP3123322B1 (en) 2020-08-26
US20150277778A1 (en) 2015-10-01
CN106062714B (zh) 2020-04-07
WO2015148083A1 (en) 2015-10-01
US9417801B2 (en) 2016-08-16
EP3123322A1 (en) 2017-02-01
JP2017509974A (ja) 2017-04-06
JP6319857B2 (ja) 2018-05-09
EP3123322A4 (en) 2017-12-27
KR101856891B1 (ko) 2018-05-10

Similar Documents

Publication Publication Date Title
KR101856891B1 (ko) 가상 범용 i/o 제어기
KR100992291B1 (ko) 가상 머신 모니터와 정책 가상 머신 간의 양방향 통신 방법 및 장치와, 가상 머신 호스트
US7971203B2 (en) Method, apparatus and system for dynamically reassigning a physical device from one virtual machine to another
US8966477B2 (en) Combined virtual graphics device
US9164784B2 (en) Signalizing an external event using a dedicated virtual central processing unit
US10592253B2 (en) Technologies for pre-memory phase initialization of a computing device
US10067777B2 (en) Supporting multiple operating system environments in computing device without contents conversion
KR101935290B1 (ko) 플랫폼-특유의 피쳐들을 선택적으로 인에이블하기
US10275558B2 (en) Technologies for providing FPGA infrastructure-as-a-service computing capabilities
KR101825561B1 (ko) 다중 운영 체제 디바이스에 대한 동적 재할당
JP2017508208A (ja) 協調設計されたプロセッサ用動的言語アクセラレータ
CN101777005B (zh) 重定向物理设备控制器的中断而提供多个虚拟设备控制器的装置和方法
US20150227385A1 (en) Unified Extensible Firmware Interface System Management Mode Initialization Protections with System Management Interrupt Transfer Monitor Sandboxing
EP3633507B1 (en) Technologies for secure and efficient native code invocation for firmware services
KR101993917B1 (ko) 멀티-환경 컴퓨팅 시스템 내의 자원 사용의 최적화
CN116521324B (zh) 中断虚拟化处理方法、装置及电子设备
CN112346390B (zh) 光模块控制方法、装置、设备及计算机可读存储介质
CN112217654B (zh) 服务资源许可管理方法和相关设备
CN108664371A (zh) 一种多硬件系统统一管理的方法及装置
CN109002347B (zh) 一种虚拟机内存分配方法、装置及系统
KR20170130044A (ko) 가상 머신을 이용한 IoT 기기 제어 장치 및 그 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant