/*
 * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

import <std_connector.camkes>;
import "components/Driver/Driver.camkes";

component PIT {
    hardware;
    provides IOPort command;
    provides IOPort channel0;
    emits DataAvailable irq;
}

assembly {
    composition {
        component PIT pit;
        component Driver drv;

        connection seL4HardwareIOPort pit_command(from drv.command, to pit.command);
        connection seL4HardwareIOPort pit_channel0(from drv.channel0, to pit.channel0);
	    connection seL4HardwareInterrupt irq(from pit.irq, to drv.irq);
    }

    configuration {
        pit.command_attributes = "0x43:0x43";
        pit.channel0_attributes = "0x40:0x40";
        pit.irq_irq_type = "isa";
        pit.irq_irq_vector = 42;
        pit.irq_irq_ioapic = 0;
        pit.irq_irq_ioapic_pin = 2;
    }
}

