Changeset 72078 in vbox for trunk/src/VBox/Devices/Serial
- Timestamp:
- May 1, 2018 10:59:15 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 122469
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Serial/DevSerialNew.cpp
r72074 r72078 17 17 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. 18 18 */ 19 19 20 20 21 /********************************************************************************************************************************* … … 32 33 #include "VBoxDD.h" 33 34 35 34 36 /********************************************************************************************************************************* 35 37 * Defined Constants And Macros * 36 38 *********************************************************************************************************************************/ 39 40 /** The RBR/DLL register index (from the base of the port range). */ 41 #define UART_REG_RBR_DLL_INDEX 0 42 43 /** The THR/DLL register index (from the base of the port range). */ 44 #define UART_REG_THR_DLL_INDEX 0 45 46 /** The IER/DLM register index (from the base of the port range). */ 47 #define UART_REG_IER_DLM_INDEX 1 48 /** Enable received data available interrupt */ 49 # define UART_REG_IER_ERBFI RT_BIT(0) 50 /** Enable transmitter holding register empty interrupt */ 51 # define UART_REG_IER_ETBEI RT_BIT(1) 52 /** Enable receiver line status interrupt */ 53 # define UART_REG_IER_ELSI RT_BIT(2) 54 /** Enable modem status interrupt. */ 55 # define UART_REG_IER_EDSSI RT_BIT(3) 56 /** Mask of writeable bits. */ 57 # define UART_REG_IER_MASK_WR 0x0f 58 59 /** The IIR register index (from the base of the port range). */ 60 #define UART_REG_IIR_INDEX 2 61 /** Interrupt Pending - high means no interrupt pending. */ 62 # define UART_REG_IIR_IP_NO_INT RT_BIT(0) 63 /** Interrupt identification mask. */ 64 # define UART_REG_IIR_ID_MASK 0x0e 65 /** Sets the interrupt identification to the given value. */ 66 # define UART_REG_IIR_ID_SET(a_Val) (((a_Val) & UART_REG_IIR_ID_MASK) << 1) 67 /** Receiver Line Status interrupt. */ 68 # define UART_REG_IIR_ID_RCL 0x3 69 /** Received Data Avalable interrupt. */ 70 # define UART_REG_IIR_ID_RDA 0x2 71 /** Character Timeou Indicator interrupt. */ 72 # define UART_REG_IIR_ID_CTI 0x6 73 /** Transmitter Holding Register Empty interrupt. */ 74 # define UART_REG_IIR_ID_THRE 0x1 75 /** Modem Status interrupt. */ 76 # define UART_REG_IIR_ID_MS 0x0 77 /** FIFOs enabled. */ 78 # define UART_REG_IIR_FIFOS_EN 0xc0 79 80 /** The FCR register index (from the base of the port range). */ 81 #define UART_REG_FCR_INDEX 2 82 /** Enable the TX/RX FIFOs. */ 83 # define UART_REG_FCR_FIFO_EN RT_BIT(0) 84 /** Reset the receive FIFO. */ 85 # define UART_REG_FCR_RCV_FIFO_RST RT_BIT(1) 86 /** Reset the transmit FIFO. */ 87 # define UART_REG_FCR_XMIT_FIFO_RST RT_BIT(2) 88 /** DMA Mode Select. */ 89 # define UART_REG_FCR_DMA_MODE_SEL RT_BIT(3) 90 /** Receiver level interrupt trigger. */ 91 # define UART_REG_FCR_RCV_LVL_IRQ_MASK 0xc0 92 /** Returns the receive level trigger value from the given FCR register. */ 93 # define UART_REG_FCR_RCV_LVL_IRQ_GET(a_Fcr) (((a_Fcr) & UART_REG_FCR_RCV_LVL_IRQ_MASK) >> 6) 94 /** Mask of writeable bits. */ 95 # define UART_REG_FCR_MASK_WR 0xcf 96 97 /** The LCR register index (from the base of the port range). */ 98 #define UART_REG_LCR_INDEX 3 99 /** Word Length Select Mask. */ 100 # define UART_REG_LCR_WLS_MASK 0x3 101 /** Returns the WLS value form the given LCR register value. */ 102 # define UART_REG_LCR_WLS_GET(a_Lcr) ((a_Lcr) & UART_REG_LCR_WLS_MASK) 103 /** Number of stop bits. */ 104 # define UART_REG_LCR_STB RT_BIT(2) 105 /** Parity Enable. */ 106 # define UART_REG_LCR_PEN RT_BIT(3) 107 /** Even Parity. */ 108 # define UART_REG_LCR_EPS RT_BIT(4) 109 /** Stick parity. */ 110 # define UART_REG_LCR_PAR_STICK RT_BIT(5) 111 /** Set Break. */ 112 # define UART_REG_LCR_BRK_SET RT_BIT(6) 113 /** Divisor Latch Access Bit. */ 114 # define UART_REG_LCR_DLAB RT_BIT(7) 115 116 /** The MCR register index (from the base of the port range). */ 117 #define UART_REG_MCR_INDEX 4 118 /** Data Terminal Ready. */ 119 # define UART_REG_MCR_DTR RT_BIT(0) 120 /** Request To Send. */ 121 # define UART_REG_MCR_RTS RT_BIT(1) 122 /** Out1. */ 123 # define UART_REG_MCR_OUT1 RT_BIT(2) 124 /** Out2. */ 125 # define UART_REG_MCR_OUT2 RT_BIT(3) 126 /** Loopback connection. */ 127 # define UART_REG_MCR_LOOP RT_BIT(4) 128 /** Mask of writeable bits. */ 129 # define UART_REG_MCR_MASK_WR 0x1f 130 131 /** The LSR register index (from the base of the port range). */ 132 #define UART_REG_LSR_INDEX 5 133 /** Data Ready. */ 134 # define UART_REG_LSR_DR RT_BIT(0) 135 /** Overrun Error. */ 136 # define UART_REG_LSR_OE RT_BIT(1) 137 /** Parity Error. */ 138 # define UART_REG_LSR_PE RT_BIT(2) 139 /** Framing Error. */ 140 # define UART_REG_LSR_FE RT_BIT(3) 141 /** Break Interrupt. */ 142 # define UART_REG_LSR_BI RT_BIT(4) 143 /** Transmitter Holding Register. */ 144 # define UART_REG_LSR_THRE RT_BIT(5) 145 /** Transmitter Empty. */ 146 # define UART_REG_LSR_TEMT RT_BIT(6) 147 /** Error in receiver FIFO. */ 148 # define UART_REG_LSR_RCV_FIFO_ERR RT_BIT(7) 149 150 /** The MSR register index (from the base of the port range). */ 151 #define UART_REG_MSR_INDEX 6 152 /** Delta Clear to Send. */ 153 # define UART_REG_MSR_DCTS RT_BIT(0) 154 /** Delta Data Set Ready. */ 155 # define UART_REG_MSR_DDSR RT_BIT(1) 156 /** Trailing Edge Ring Indicator. */ 157 # define UART_REG_MSR_TERI RT_BIT(2) 158 /** Delta Data Carrier Detect. */ 159 # define UART_REG_MSR_DDCD RT_BIT(3) 160 /** Clear to Send. */ 161 # define UART_REG_MSR_CTS RT_BIT(4) 162 /** Data Set Ready. */ 163 # define UART_REG_MSR_DSR RT_BIT(5) 164 /** Ring Indicator. */ 165 # define UART_REG_MSR_RI RT_BIT(6) 166 /** Data Carrier Detect. */ 167 # define UART_REG_MSSR_DCD RT_BIT(7) 168 169 /** The SCR register index (from the base of the port range). */ 170 #define UART_REG_SCR_INDEX 7 37 171 38 172 … … 80 214 RTIOPORT PortBase; 81 215 216 /** The divisor register (DLAB = 1). */ 217 uint16_t uRegDivisor; 218 /** The Receiver Buffer Register (RBR, DLAB = 0). */ 219 uint8_t uRegRbr; 220 /** The Transmitter Holding Register (THR, DLAB = 0). */ 221 uint8_t uRegThr; 222 /** The Interrupt Enable Register (IER). */ 223 uint8_t uRegIer; 224 /** The Interrupt Identification Register (IIR). */ 225 uint8_t uRegIir; 226 /** The FIFO Control Register (FCR). */ 227 uint8_t uRegFcr; 228 /** The Line Control Register (LCR). */ 229 uint8_t uRegLcr; 230 /** The Modem Control Register (MCR). */ 231 uint8_t uRegMcr; 232 /** The Line Status Register (LSR). */ 233 uint8_t uRegLsr; 234 /** The Modem Status Register (MSR). */ 235 uint8_t uRegMsr; 236 /** The Scratch Register (SCR). */ 237 uint8_t uRegScr; 238 82 239 } DEVSERIAL; 83 240 /** Pointer to the serial device state. */ … … 96 253 Assert(PDMCritSectIsOwner(&pThis->CritSect)); 97 254 RT_NOREF_PV(pvUser); 98 RT_NOREF(u32);99 255 100 256 AssertMsgReturn(cb == 1, ("uPort=%#x cb=%d u32=%#x\n", uPort, cb, u32), VINF_SUCCESS); … … 103 259 switch (uPort & 0x7) 104 260 { 261 case UART_REG_THR_DLL_INDEX: 262 break; 263 case UART_REG_IER_DLM_INDEX: 264 break; 265 case UART_REG_FCR_INDEX: 266 break; 267 case UART_REG_LCR_INDEX: 268 break; 269 case UART_REG_MCR_INDEX: 270 break; 271 case UART_REG_SCR_INDEX: 272 pThis->uRegScr = u32; 273 break; 105 274 default: 106 275 break; … … 119 288 Assert(PDMCritSectIsOwner(&pThis->CritSect)); 120 289 RT_NOREF_PV(pvUser); 121 RT_NOREF(pu32);122 290 123 291 if (cb != 1) … … 127 295 switch (uPort & 0x7) 128 296 { 297 case UART_REG_RBR_DLL_INDEX: 298 break; 299 case UART_REG_IER_DLM_INDEX: 300 break; 301 case UART_REG_IIR_INDEX: 302 break; 303 case UART_REG_LCR_INDEX: 304 break; 305 case UART_REG_MCR_INDEX: 306 break; 307 case UART_REG_LSR_INDEX: 308 break; 309 case UART_REG_MSR_INDEX: 310 break; 311 case UART_REG_SCR_INDEX: 312 *pu32 = pThis->uRegScr; 313 break; 129 314 default: 130 315 rc = VERR_IOM_IOPORT_UNUSED; … … 419 604 } 420 605 421 #if 0 /** @todo :Later */606 #if 0 /** @todo Later */ 422 607 /* 423 608 * Saved state.
Note:
See TracChangeset
for help on using the changeset viewer.