summaryrefslogtreecommitdiff
path: root/usr/src/uts/intel/io/pci/mps_table.h
blob: 8f8c1dc24e3f8366980ebd1395cc46f7acece287 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 *
 * mps_table.h -- MP Specification table definitions
 */

#ifndef	_MPS_TABLE_H
#define	_MPS_TABLE_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#ifdef	__cplusplus
extern "C" {
#endif


struct mps_fps_hdr {		/* MP Floating Pointer Structure	*/
	uint32_t fps_sig;	/* _MP_ (0x5F4D505F)			*/
	uint32_t fps_mpct_paddr; /* paddr of MP Configuration Table	*/
	uchar_t	fps_len;	/* in paragraph (16-bytes units)	*/
	uchar_t	fps_spec_rev;	/* MP Spec. version no.			*/
	uchar_t	fps_cksum;	/* checksum of complete structure	*/
	uchar_t	fps_featinfo1;	/* mp feature info byte 1 		*/
	uchar_t	fps_featinfo2;	/* mp feature info byte 2		*/
	uchar_t	fps_featinfo3;	/* mp feature info byte 3		*/
	uchar_t	fps_featinfo4;	/* mp feature info byte 4		*/
	uchar_t	fps_featinfo5;	/* mp feature info byte 5		*/
};

struct mps_ct_hdr {		/* MP Configuration Table Header	*/
	uint32_t ct_sig;	/* "PCMP"				*/
	uint16_t ct_len;	/* base configuration in bytes 		*/
	uchar_t	ct_spec_rev;	/* MP Spec. version no.			*/
	uchar_t	ct_cksum;	/* base configuration table checksum	*/
	char	ct_oem_id[8];	/* string identifies the manufacturer	*/
	char	ct_prod_id[12]; /* string identifies the product	*/
	uint32_t ct_oem_ptr;	/* paddr to an OEM-defined table	*/
	uint16_t ct_oem_tbl_len; /* size of base OEM table in bytes	*/
	uint16_t ct_entry_cnt;	/* no. of entries in the base table	*/
	uint32_t ct_local_apic;	/* paddr of local APIC			*/
	uint16_t ct_ext_tbl_len; /* extended table in bytes 		*/
	uchar_t	ct_ext_cksum;	/* checksum for the extended table	*/
};

/* Base MP Configuration Table entry type definitions */
#define	CPU_TYPE	0
#define	BUS_TYPE	1
#define	IO_APIC_TYPE	2
#define	IO_INTR_TYPE	3
#define	LOCAL_INTR_TYPE	4

/* Base MP Configuration Table entry size definitions */
#define	CPU_SIZE	20
#define	BUS_SIZE	8
#define	IO_APIC_SIZE	8
#define	IO_INTR_SIZE	8
#define	LOCAL_INTR_SIZE	8

/* Extended MP Configuration Table entry type definitions */
#define	SYS_AS_MAPPING		128
#define	BUS_HIERARCHY_DESC	129
#define	COMP_BUS_AS_MODIFIER	130

/* Extended MP Configuration Table entry size definitions */
#define	SYS_AS_MAPPING_SIZE		20
#define	BUS_HIERARCHY_DESC_SIZE		8
#define	COMP_BUS_AS_MODIFIER_SIZE	8

struct sasm {			/* System Address Space Mapping Entry	*/
	uchar_t sasm_type;	/* type 128				*/
	uchar_t sasm_len;	/* entry length in bytes (20)		*/
	uchar_t sasm_bus_id;	/* bus id where this is mapped		*/
	uchar_t sasm_as_type;	/* system address type			*/
/* system address type definitions */
#define	IO_TYPE		0
#define	MEM_TYPE	1
#define	PREFETCH_TYPE	2
#define	BUSRANGE_TYPE	3
	uint32_t sasm_as_base;	/* starting address			*/
	uint32_t sasm_as_base_hi;
	uint32_t sasm_as_len;	/* no. of addresses visiblie to the bus	*/
	uint32_t sasm_as_len_hi;
};

struct bhd {			/* Bus Hierarchy Descriptor Entry	*/
	uchar_t bhd_type;	/* type 129				*/
	uchar_t bhd_len;	/* entry length in bytes (8)		*/
	uchar_t bhd_bus_id;	/* bus id of this bus			*/
	uchar_t bhd_bus_info;	/* bus information			*/
/* Bus Information bit definition */
#define	BHD_BUS_INFO_SD	1	/* Subtractive Decode Bus		*/
	uchar_t bhd_parent;
};

struct cbasm {	/* Compatibility Bus Address Space Modifier Entry */
	uchar_t cbasm_type;	/* type 130				*/
	uchar_t cbasm_len;	/* entry length in bytes (8)		*/
	uchar_t cbasm_bus_id;	/* bus to be modified			*/
	uchar_t cbasm_addr_mod;	/* address modifier			*/
/* Address Modifier bit definiton */
#define	CBASM_ADDR_MOD_PR	1	/* 1 = subtracted, 0 = added */
	uint32_t cbasm_pr_list;	/* identify list of predefined address ranges */
};

#ifdef	__cplusplus
}
#endif

#endif	/* _MPS_TABLE_H */