BUS_ALLOC_RESOURCE(9)

명칭
bus_alloc_resource - 버스상의 자원의 할당

서식
<sys/param.h> <sys/bus.h>

<machine/bus.h> <sys/rman.h> <machine/resource.h> struct resource * bus_alloc_resource(device_t dev, int type, int *rid, u_long start, u_long end, u_long count, u_int flags)

해설
이것은 자원 관리 함수군에의 간단한 인터페이스입니다. 부모의 메소드 테이블을 통과하는 간접적인 방법을 은폐 합니다. 이 함수는, 일반적으로 아탓치시에 불려 가야 합니다가, (경합 상태의 경우를 제외해) 결코 그 전에 호출해 되지 않습니다.

인수는 이하와 같습니다.

dev (은)는, 자원의 소유를 요구하는 디바이스입니다. 할당전은, 자원은 부모의 버스에 의해 소유되고 있습니다.

type (은)는, 할당하고 싶은 자원의 형태입니다. 이하 중의 1 개(살)입니다.

SYS_RES_IRQ
    IRQ 용.

SYS_RES_DRQ
    ISA DMA 라인용.

SYS_RES_IOPORT
    입출력 포트용.

SYS_RES_MEMORY
    입출력 메모리용.

rid (은)는, 할당하고 있는 자원을 식별하는, 버스 고유의 핸들을 가리킵니다. ISA 에서는, PnP 의 짜 또는 hints 의 구조를 통해, 디바이스를 위해서(때문에) 셋업 되고 있는 자원의 배열에의 인덱스입니다. PCCARD 에서는, 이 문장을 쓰고 있는 현시점에서는 같습니다만, 장래의 newcard 에서는 바뀔지도 모릅니다. PCI 에서는, pci 콘피그 공간에 있어, 자원을 기술하는 워드에의 오프셋(offset)가 되어 있습니다. 버스의 메소드는, 인수로서 주어지고 있는 RID 를 무제한하게 변경합니다. 이전에게 주었을 때의 값에 의존해 되지 않습니다.

start 및 end (은)는 자원의 개시/종료 주소입니다. start 에 0 의 값을 end 에 ~0 의 값을 지정했을 경우에는, 버스를 위한 기본값이 계산됩니다.

count (은)는 자원의 크기로, 예를 들면, 입출력 포트의 크기입니다 (이것은 대체로, PCI 상에서는 1 그리고, ISA 및 PCCARD 상에서는 디바이스 의존입니다). start 및 end 에 기본값을 지정했을 경우, count 하지만 기본값보다 작다면 디폴트치가 사용되어 count 하지만 기본값 이상이라면 count 가 사용됩니다.

flags (은)는 자원을 위한 플래그를 설정합니다. 이하의 플래그를 1 개 이상 설정할 수 있습니다.

RF_ALLOCATED
    자원은 이미 예약되고 있습니다. 자원은 계속해 rman_activate_resource(9) 그리고 활성화 될 필요가 있습니다.

RF_ACTIVE
    불가분에, 자원을 활성화 합니다.

RF_SHAREABLE
    자원은 동시 공유를 허가합니다. 그 자원이 공유 불가인 것을 모르는 경우, 항상 설정되어야 합니다. 버스가 공유를 서포트하고 있지 않는 경우, 이 플래그를 없애는 것은 버스의 코드의 일입니다. 이 예로서 pccard/cardbus 에서는 디바이스를 공유할 수 있을까 할 수 없는가는, 버스에 의존합니다.

RF_TIMESHARE
    자원은 시분할 공유를 허가합니다.

반환값
성공시에는 struct resource 구조체에의 포인터가 돌려주어져 그렇지 않은 경우에는 누르포인타가 돌려주어집니다.

사용예
이것은 있는 샘플의 코드입니다. portid 및 irqid 의 값은 이러한 호출의 후에, 디바이스의 softc 안에 보존될 것입니다.

    	struct resource *portres, irqres;
    	int portid, irqid;
    	portid = 0;
    	irqid = 0;
    	portres = bus_alloc_resource(dev, SYS_RES_IOPORT, &portid,
    			0ul, ~0ul, 32, RF_ACTIVE);
    	irqres = bus_alloc_resource(dev, SYS_RES_IRQ, &irqid,
    			0ul, ~0ul, 1, RF_ACTIVE | RF_SHAREABLE);

관련 항목
bus_release_resource(9), device(9), driver(9)

저자
이 메뉴얼 페이지는 Alexander Langer <alex@big.endian.de> 하지만 써, 부분적으로 Warner Losh <imp@FreeBSD.ORG> 하지만 썼습니다.