Files
OpenCellular/chip/g/uartn.h
Randall Spangler c7b11ca7b8 cr50: CCD V1 controls UART access
AP and EC UART now use the CCD V1 capabilities to determine when
access is allowed.  Transmit to AP and EC can be toggled independently
from read access to output from those UARTs.

Note that disabling read access disables both transmit and receive.
That is, it's not possible to set a UART where transmit is allowed but
receive isn't.  Why would you want to do that, anyway?

See go/cr50-ccd-wp for more information.

BUG=b:62537474
BRANCH=cr50
TEST=manual with CR50_DEV=1
	ccdoops
	ccdset cr50fullconsole always -> so we can use ccd command for testing
	ccd -> AP RX+TX, EC RX+TX

	ccdset uartecrx unlesslocked
	ccdset uartectx ifopened
	ccdset uartaprx always
	ccdset uartaptx unlesslocked

	ccdunlock
	ccd -> AP RX+TX, EC RX
	ccdlock
	ccd -> AP RX, EC disabled

	ccdoops
	ccdset cr50fullconsole always
	ccd -> AP RX+TX, EC RX+TX
	ccdset uartaprx ifopened
	ccdlock
	ccd -> AP disabled, EC RX

Change-Id: I55db5897bb52cd60658ab221eadf5c59fc86744a
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/595196
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
2017-08-01 13:01:41 -07:00

122 lines
2.6 KiB
C

/* Copyright 2016 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef __CROS_EC_UARTN_H
#define __CROS_EC_UARTN_H
#include "common.h"
/**
* Initialize the UART module.
*/
void uartn_init(int uart);
/**
* Flush the transmit FIFO.
*/
void uartn_tx_flush(int uart);
/**
* Return non-zero if there is room to transmit a character immediately.
*/
int uartn_tx_ready(int uart);
/**
* Return non-zero if a transmit is in progress.
*/
int uartn_tx_in_progress(int uart);
/*
* Return non-zero if the UART has a character available to read.
*/
int uartn_rx_available(int uart);
/**
* Send a character to the UART data register.
*
* If the transmit FIFO is full, blocks until there is space.
*
* @param c Character to send.
*/
void uartn_write_char(int uart, char c);
/**
* Read one char from the UART data register.
*
* @return The character read.
*/
int uartn_read_char(int uart);
/**
* Disable all UART related IRQs.
*
* Used to avoid concurrent accesses on UART management variables.
*/
void uartn_disable_interrupt(int uart);
/**
* Re-enable UART IRQs.
*/
void uartn_enable_interrupt(int uart);
/**
* Re-enable the UART transmit interrupt.
*
* This also forces triggering a UART interrupt, if the transmit interrupt was
* disabled.
*/
void uartn_tx_start(int uart);
/**
* Disable the UART transmit interrupt.
*/
void uartn_tx_stop(int uart);
/**
* Return non-zero if TX is connected for the UART.
*
* @param uart UART to check
* @return 1 if TX pin is connected, 0 if disconnected.
*/
int uart_tx_is_connected(int uart);
/* Connect TX pin for the UART */
void uartn_tx_connect(int uart);
/* Disconnect TX pin for the UART */
void uartn_tx_disconnect(int uart);
/**
* Return non-zero if TX and RX are enabled for the UART.
*
* Note that TX won't be connected unless uart_tx_is_connected() is also
* non-zero.
*
* @param uart UART to check
* @return 1 if UART is enabled, 0 if disabled.
*/
int uartn_is_enabled(int uart);
/**
* Enable TX and RX for the UART. Disable HW flow control and loopback.
*
* @param uart UART to enable
*
* Note that this does NOT connect the TX pin for the UART; that must be done
* explicitly via uartn_tx_connect().
*/
void uartn_enable(int uart);
/**
* Disable TX, RX, HW flow control, and loopback.
*
* @param uart UART to disable
*
* Note that this does NOT disconnect the TX pin for the UART; that must be
* done explicitly via uartn_tx_disconnect().
*/
void uartn_disable(int uart);
#endif /* __CROS_EC_UARTN_H */