VirtualBox

source: vbox/trunk/include/VBox/vmm/pdmserialifs.h@ 73768

Last change on this file since 73768 was 73712, checked in by vboxsync, 6 years ago

Devices/Serial: Remove giving the amount of available data to write from the UART core and let the drivers figure it out themselves when querying the data to write. Avoids unnecessary trips to R3 when the FIFO is enabled if the guest keeps the FIFO filled. Some other smaller fixes

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.1 KB
Line 
1/** @file
2 * PDM - Pluggable Device Manager, Serial port related interfaces.
3 */
4
5/*
6 * Copyright (C) 2018 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef ___VBox_vmm_pdmserialifs_h
27#define ___VBox_vmm_pdmserialifs_h
28
29#include <VBox/types.h>
30
31RT_C_DECLS_BEGIN
32
33/** @defgroup grp_pdm_ifs_serial PDM Serial Port Interfaces
34 * @ingroup grp_pdm_interfaces
35 * @{
36 */
37
38
39/** @name Bit mask definitions for status line type.
40 * @{ */
41#define PDMISERIALPORT_STS_LINE_DCD RT_BIT(0)
42#define PDMISERIALPORT_STS_LINE_RI RT_BIT(1)
43#define PDMISERIALPORT_STS_LINE_DSR RT_BIT(2)
44#define PDMISERIALPORT_STS_LINE_CTS RT_BIT(3)
45/** @} */
46
47/** Pointer to a serial port interface. */
48typedef struct PDMISERIALPORT *PPDMISERIALPORT;
49/**
50 * Serial port interface (down).
51 */
52typedef struct PDMISERIALPORT
53{
54 /**
55 * Notifies the upper device/driver that data is available for reading.
56 *
57 * @returns VBox status code.
58 * @param pInterface Pointer to the interface structure containing the called function pointer.
59 * @param cbAvail The amount of data available to be written.
60 */
61 DECLR3CALLBACKMEMBER(int, pfnDataAvailRdrNotify, (PPDMISERIALPORT pInterface, size_t cbAvail));
62
63 /**
64 * Notifies the upper device/driver that all data was sent.
65 *
66 * @returns VBox status code.
67 * @param pInterface Pointer to the interface structure containing the called function pointer.
68 */
69 DECLR3CALLBACKMEMBER(int, pfnDataSentNotify, (PPDMISERIALPORT pInterface));
70
71 /**
72 * Try to read data from the device/driver above for writing.
73 *
74 * @returns VBox status code.
75 * @param pInterface Pointer to the interface structure containing the called function pointer.
76 * @param pvBuf Where to store the read data.
77 * @param cbRead How much to read.
78 * @param pcbRead Where to store the amount of data actually read on success.
79 */
80 DECLR3CALLBACKMEMBER(int, pfnReadWr, (PPDMISERIALPORT pInterface, void *pvBuf, size_t cbRead, size_t *pcbRead));
81
82 /**
83 * Notify the device/driver when the status lines changed.
84 *
85 * @returns VBox status code.
86 * @param pInterface Pointer to the interface structure containing the called function pointer.
87 * @param fNewStatusLines New state of the status line pins.
88 * @thread Any thread.
89 */
90 DECLR3CALLBACKMEMBER(int, pfnNotifyStsLinesChanged, (PPDMISERIALPORT pInterface, uint32_t fNewStatusLines));
91
92 /**
93 * Notify the device/driver that a break condition occurred.
94 *
95 * @returns VBox statsus code.
96 * @param pInterface Pointer to the interface structure containing the called function pointer.
97 * @thread Any thread.
98 */
99 DECLR3CALLBACKMEMBER(int, pfnNotifyBrk, (PPDMISERIALPORT pInterface));
100
101} PDMISERIALPORT;
102/** PDMISERIALPORT interface ID. */
103#define PDMISERIALPORT_IID "44540323-06ca-44c1-8eb2-f5a387704dbd"
104
105
106/**
107 * Supported parity modes.
108 */
109typedef enum PDMSERIALPARITY
110{
111 /** Invalid parity setting. */
112 PDMSERIALPARITY_INVALID = 0,
113 /** No parity. */
114 PDMSERIALPARITY_NONE,
115 /** Even parity. */
116 PDMSERIALPARITY_EVEN,
117 /** Odd parity. */
118 PDMSERIALPARITY_ODD,
119 /** Mark parity. */
120 PDMSERIALPARITY_MARK,
121 /** Space parity. */
122 PDMSERIALPARITY_SPACE,
123 /** 32bit hack. */
124 PDMSERIALPARITY_32BIT_HACK = 0x7fffffff
125} PDMSERIALPARITY;
126
127
128/**
129 * Supported number of stop bits.
130 */
131typedef enum PDMSERIALSTOPBITS
132{
133 /** Invalid stop bits setting. */
134 PDMSERIALSTOPBITS_INVALID = 0,
135 /** One stop bit is used. */
136 PDMSERIALSTOPBITS_ONE,
137 /** 1.5 stop bits are used. */
138 PDMSERIALSTOPBITS_ONEPOINTFIVE,
139 /** 2 stop bits are used. */
140 PDMSERIALSTOPBITS_TWO,
141 /** 32bit hack. */
142 PDMSERIALSTOPBITS_32BIT_HACK = 0x7fffffff
143} PDMSERIALSTOPBITS;
144
145
146/** Pointer to a serial interface. */
147typedef struct PDMISERIALCONNECTOR *PPDMISERIALCONNECTOR;
148/**
149 * Serial interface (up).
150 * Pairs with PDMISERIALPORT.
151 */
152typedef struct PDMISERIALCONNECTOR
153{
154 /**
155 * Notifies the lower layer that data is available for writing.
156 *
157 * @returns VBox status code.
158 * @param pInterface Pointer to the interface structure containing the called function pointer.
159 */
160 DECLR3CALLBACKMEMBER(int, pfnDataAvailWrNotify, (PPDMISERIALCONNECTOR pInterface));
161
162 /**
163 * Try to read data from the underyling driver.
164 *
165 * @returns VBox status code.
166 * @param pInterface Pointer to the interface structure containing the called function pointer.
167 * @param pvBuf Where to store the read data.
168 * @param cbRead How much to read.
169 * @param pcbRead Where to store the amount of data actually read on success.
170 */
171 DECLR3CALLBACKMEMBER(int, pfnReadRdr, (PPDMISERIALCONNECTOR pInterface, void *pvBuf, size_t cbRead, size_t *pcbRead));
172
173 /**
174 * Change device parameters.
175 *
176 * @returns VBox status code.
177 * @param pInterface Pointer to the interface structure containing the called function pointer.
178 * @param uBps Speed of the serial connection. (bits per second)
179 * @param enmParity Parity method.
180 * @param cDataBits Number of data bits.
181 * @param enmStopBits Number of stop bits.
182 * @thread Any thread.
183 */
184 DECLR3CALLBACKMEMBER(int, pfnChgParams, (PPDMISERIALCONNECTOR pInterface, uint32_t uBps,
185 PDMSERIALPARITY enmParity, unsigned cDataBits,
186 PDMSERIALSTOPBITS enmStopBits));
187
188 /**
189 * Set the state of the modem lines.
190 *
191 * @returns VBox status code.
192 * @param pInterface Pointer to the interface structure containing the called function pointer.
193 * @param fRts Set to true to make the Request to Send line active otherwise to 0.
194 * @param fDtr Set to true to make the Data Terminal Ready line active otherwise 0.
195 * @thread Any thread.
196 */
197 DECLR3CALLBACKMEMBER(int, pfnChgModemLines, (PPDMISERIALCONNECTOR pInterface, bool fRts, bool fDtr));
198
199 /**
200 * Changes the TD line into the requested break condition.
201 *
202 * @returns VBox status code.
203 * @param pInterface Pointer to the interface structure containing the called function pointer.
204 * @param fBrk Set to true to let the device send a break false to put into normal operation.
205 * @thread Any thread.
206 */
207 DECLR3CALLBACKMEMBER(int, pfnChgBrk, (PPDMISERIALCONNECTOR pInterface, bool fBrk));
208
209 /**
210 * Queries the current state of the status lines.
211 *
212 * @returns VBox status code.
213 * @param pInterface Pointer to the interface structure containing the called function pointer.
214 * @param pfStsLines Where to store the status line states on success.
215 */
216 DECLR3CALLBACKMEMBER(int, pfnQueryStsLines, (PPDMISERIALCONNECTOR pInterface, uint32_t *pfStsLines));
217
218} PDMISERIALCONNECTOR;
219/** PDMIMEDIA interface ID. */
220#define PDMISERIALCONNECTOR_IID "2f16fda0-4980-4ec8-969c-18c1d10b7b95"
221
222/** @} */
223
224RT_C_DECLS_END
225
226#endif
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use