1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2018-2022 Intel Corporation.
5  * Copyright (c) 2014 Tycho Nightingale <tycho.nightingale@pluribusnetworks.com>
6  * Copyright (c) 2011 NetApp, Inc.
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED.  IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  *
30  * $FreeBSD$
31  */
32 
33 #ifndef _PIT_H_
34 #define _PIT_H_
35 
36 #include "i8253reg.h"
37 #include "vmmapi.h"
38 
39 #define	IO_TIMER1_PORT	0x40		/* 8253 Timer #1 */
40 #define	NMISC_PORT	0x61
41 
42 #define	PIT_ATPIC_IRQ	0
43 #define	PIT_IOAPIC_IRQ	2
44 
45 /*
46  * The outputs of the three timers are connected as follows:
47  *
48  *	 timer 0 -> irq 0
49  *	 timer 1 -> dma chan 0 (for dram refresh)
50  * 	 timer 2 -> speaker (via keyboard controller)
51  *
52  * Timer 0 is used to call hardclock.
53  * Timer 2 is used to generate console beeps.
54  */
55 #define	TIMER_CNTR0	(IO_TIMER1_PORT + TIMER_REG_CNTR0)
56 #define	TIMER_CNTR1	(IO_TIMER1_PORT + TIMER_REG_CNTR1)
57 #define	TIMER_CNTR2	(IO_TIMER1_PORT + TIMER_REG_CNTR2)
58 #define	TIMER_MODE	(IO_TIMER1_PORT + TIMER_REG_MODE)
59 
60 int vpit_init(struct vmctx *ctx);
61 void vpit_deinit(struct vmctx *ctx);
62 
63 #endif /* _PIT_H_ */
64