112239Sandreas.sandberg@arm.com/* 212239Sandreas.sandberg@arm.com * Copyright (c) 2004-2005 The Regents of The University of Michigan 312239Sandreas.sandberg@arm.com * All rights reserved. 412239Sandreas.sandberg@arm.com * 512239Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without 612239Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are 712239Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright 812239Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer; 912239Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright 1012239Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the 1112239Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution; 1212239Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its 1312239Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from 1412239Sandreas.sandberg@arm.com * this software without specific prior written permission. 1512239Sandreas.sandberg@arm.com * 1612239Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1712239Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1812239Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1912239Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2012239Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2112239Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2212239Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2312239Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2412239Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2512239Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2612239Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2712239Sandreas.sandberg@arm.com * 2812239Sandreas.sandberg@arm.com * Authors: Ali Saidi 2912239Sandreas.sandberg@arm.com */ 3012239Sandreas.sandberg@arm.com 3112239Sandreas.sandberg@arm.com/** @file 3212239Sandreas.sandberg@arm.com * Base class for UART 3312239Sandreas.sandberg@arm.com */ 3412239Sandreas.sandberg@arm.com 3512239Sandreas.sandberg@arm.com#ifndef __UART_HH__ 3612239Sandreas.sandberg@arm.com#define __UART_HH__ 3712239Sandreas.sandberg@arm.com 3812239Sandreas.sandberg@arm.com#include "base/callback.hh" 3912239Sandreas.sandberg@arm.com#include "dev/io_device.hh" 4012239Sandreas.sandberg@arm.com#include "dev/serial/serial.hh" 4112239Sandreas.sandberg@arm.com#include "params/Uart.hh" 4212239Sandreas.sandberg@arm.com 4312239Sandreas.sandberg@arm.comclass Platform; 4412239Sandreas.sandberg@arm.com 4512239Sandreas.sandberg@arm.comconst int RX_INT = 0x1; 4612239Sandreas.sandberg@arm.comconst int TX_INT = 0x2; 4712239Sandreas.sandberg@arm.com 4812239Sandreas.sandberg@arm.comclass Uart : public BasicPioDevice 4912239Sandreas.sandberg@arm.com{ 5012239Sandreas.sandberg@arm.com protected: 5112239Sandreas.sandberg@arm.com int status; 5212239Sandreas.sandberg@arm.com Platform *platform; 5312239Sandreas.sandberg@arm.com SerialDevice *device; 5412239Sandreas.sandberg@arm.com 5512239Sandreas.sandberg@arm.com public: 5612239Sandreas.sandberg@arm.com typedef UartParams Params; 5712239Sandreas.sandberg@arm.com Uart(const Params *p, Addr pio_size); 5812239Sandreas.sandberg@arm.com 5912239Sandreas.sandberg@arm.com const Params * 6012239Sandreas.sandberg@arm.com params() const 6112239Sandreas.sandberg@arm.com { 6212239Sandreas.sandberg@arm.com return dynamic_cast<const Params *>(_params); 6312239Sandreas.sandberg@arm.com } 6412239Sandreas.sandberg@arm.com 6512239Sandreas.sandberg@arm.com /** 6612239Sandreas.sandberg@arm.com * Inform the uart that there is data available. 6712239Sandreas.sandberg@arm.com */ 6812239Sandreas.sandberg@arm.com virtual void dataAvailable() = 0; 6912239Sandreas.sandberg@arm.com 7012239Sandreas.sandberg@arm.com /** 7112239Sandreas.sandberg@arm.com * Return if we have an interrupt pending 7212239Sandreas.sandberg@arm.com * @return interrupt status 7312239Sandreas.sandberg@arm.com */ 7412239Sandreas.sandberg@arm.com bool intStatus() { return status ? true : false; } 7512239Sandreas.sandberg@arm.com 7612239Sandreas.sandberg@arm.com protected: 7712239Sandreas.sandberg@arm.com MakeCallback<Uart, &Uart::dataAvailable> callbackDataAvail; 7812239Sandreas.sandberg@arm.com}; 7912239Sandreas.sandberg@arm.com 8012239Sandreas.sandberg@arm.com#endif // __UART_HH__ 81