1/*
2 * Copyright (c) 2002-2006 Bruce M. Simpson.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Bruce M. Simpson nor the names of
14 *    contributors may be used to endorse or promote products derived
15 *    from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY BRUCE M. SIMPSON AND AFFILIATES
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 *
29 * $FreeBSD$
30 */
31
32/*
33 * All fields and quantities in this file are in little-endian byte order,
34 * unless otherwise specified.
35 */
36
37#ifndef _PIRTABLE_H
38#define _PIRTABLE_H
39
40#define PIR_BASE	0xF0000
41#define PIR_SIZE	0x10000
42#define PIR_OFFSET	16
43
44#define PIR_DEV(x)	(((x) & 0xF8) >> 3)
45#define PIR_FUNC(x)	((x) & 0x7)
46
47typedef struct {
48	uint8_t		bus;		/* bus number of this device */
49	uint8_t		devfunc;	/* only upper 5 device bits valid */
50	uint8_t		inta_link;	/* how INTA is linked */
51	uint16_t	inta_irqs;	/* how INTA may be routed (bitset) */
52	uint8_t		intb_link;
53	uint16_t	intb_irqs;
54	uint8_t		intc_link;
55	uint16_t	intc_irqs;
56	uint8_t		intd_link;
57	uint16_t	intd_irqs;	/* how this pin may be routed */
58	uint8_t		slot;		/* physical slot number on bus,
59					 * slot 0 if motherboard */
60	uint8_t		reserved00;	/* must be zero */
61} __packed pir_entry_t;
62
63typedef struct {
64	uint32_t	signature;	/* $PIR */
65	uint8_t		minor;		/* minor version (0) */
66	uint8_t		major;		/* major version (1) */
67	uint16_t	size;		/* total size of table */
68	uint8_t		bus;		/* Bus number of router */
69	uint8_t		devfunc;	/* Dev/Func of router */
70	uint16_t	excl_irqs;	/* PCI Exclusive IRQs */
71	uint32_t	compatible;	/* Device/Vendor ID of a register
72					 * compatible PCI IRQ router device */
73	uint32_t	miniport_data;	/* Windows specific */
74	uint8_t		reserved00[11]; /* Must be zero */
75	uint8_t		checksum;	/* Inverse mod-256 sum of table bytes */
76	pir_entry_t	entry[1];	/* 1..N device entries */
77} __packed pir_table_t;
78
79#endif /* _PIRTABLE_H */
80