blob: d312d610c485256bac7a14359c93044888ee82db [file] [log] [blame] [edit]
/*
* CAmkES component for UART driver.
*
* Copyright 2021, Google LLC
* Apache License 2.0
*/
import <LoggerInterface.camkes>;
import <UARTDriverInterface.camkes>;
component UARTDriver {
dataport Buf mmio_region;
dataport Buf tx_dataport;
provides uart_write_inf write;
dataport Buf rx_dataport;
provides uart_read_inf read;
has semaphore rx_nonempty;
has semaphore rx_empty;
maybe uses LoggerInterface logger;
// Enable CantripOS CAmkES support.
attribute int cantripos = true;
// rx_watermark irq is handled in its own thread because it may block.
consumes Interrupt rx_watermark;
// Pseudo interface used to process IRQ's other than rx_watermark.
// The assembly connects tx_watermark and tx_empty interrupts
// and we disable the interface thread and take over the control
// thread to process interrupt events (to save memory).
consumes Interrupt irq;
attribute int irq_has_thread = false;
}