xref: /titanic_41/usr/src/uts/intel/io/heci/heci.h (revision 989f28072d20c73ae0955d6a1e3e2fc74831cb39)
1 /*
2  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 /*
7  * Part of Intel(R) Manageability Engine Interface Linux driver
8  *
9  * Copyright (c) 2003 - 2008 Intel Corp.
10  * All rights reserved.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions, and the following disclaimer,
17  *    without modification.
18  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19  *    substantially similar to the "NO WARRANTY" disclaimer below
20  *    ("Disclaimer") and any redistribution must be conditioned upon
21  *    including a substantially similar Disclaimer requirement for further
22  *    binary redistribution.
23  * 3. Neither the names of the above-listed copyright holders nor the names
24  *    of any contributors may be used to endorse or promote products derived
25  *    from this software without specific prior written permission.
26  *
27  * Alternatively, this software may be distributed under the terms of the
28  * GNU General Public License ("GPL") version 2 as published by the Free
29  * Software Foundation.
30  *
31  * NO WARRANTY
32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42  * POSSIBILITY OF SUCH DAMAGES.
43  *
44  */
45 
46 #ifndef	_HECI_H_
47 #define	_HECI_H_
48 
49 
50 extern const struct guid heci_pthi_guid;
51 extern const struct guid heci_wd_guid;
52 extern const uint8_t start_wd_params[];
53 extern const uint8_t stop_wd_params[];
54 extern const uint8_t heci_wd_state_independence_msg[3][4];
55 
56 /*
57  * heci device ID
58  */
59 #define	HECI_DEV_ID_82946GZ    0x2974  /* 82946GZ/GL */
60 #define	HECI_DEV_ID_82G35	0x2984  /* 82G35 Express */
61 #define	HECI_DEV_ID_82Q965	0x2994  /* 82Q963/Q965 */
62 #define	HECI_DEV_ID_82G965	0x29A4  /* 82P965/G965 */
63 
64 #define	HECI_DEV_ID_82GM965	0x2A04  /* Mobile PM965/GM965 */
65 #define	HECI_DEV_ID_82GME965	0x2A14  /* Mobile GME965/GLE960 */
66 
67 #define	HECI_DEV_ID_ICH9_82Q35	0x29B4  /* 82Q35 Express */
68 #define	HECI_DEV_ID_ICH9_82G33 0x29C4  /* 82G33/G31/P35/P31 Express */
69 #define	HECI_DEV_ID_ICH9_82Q33 0x29D4  /* 82Q33 Express */
70 #define	HECI_DEV_ID_ICH9_82X38 0x29E4  /* 82X38/X48 Express */
71 #define	HECI_DEV_ID_ICH9_3200  0x29F4  /* 3200/3210 Server */
72 
73 #define	HECI_DEV_ID_ICH9_6	0x28B4  /* Bearlake */
74 #define	HECI_DEV_ID_ICH9_7	0x28C4  /* Bearlake */
75 #define	HECI_DEV_ID_ICH9_8	0x28D4  /* Bearlake */
76 #define	HECI_DEV_ID_ICH9_9	0x28E4  /* Bearlake */
77 #define	HECI_DEV_ID_ICH9_10	0x28F4  /* Bearlake */
78 
79 #define	HECI_DEV_ID_ICH9M_1	0x2A44  /* Cantiga */
80 #define	HECI_DEV_ID_ICH9M_2	0x2A54  /* Cantiga */
81 #define	HECI_DEV_ID_ICH9M_3	0x2A64  /* Cantiga */
82 #define	HECI_DEV_ID_ICH9M_4	0x2A74  /* Cantiga */
83 
84 #define	HECI_DEV_ID_ICH10_1	0x2E04  /* Eaglelake */
85 #define	HECI_DEV_ID_ICH10_2	0x2E14  /* Eaglelake */
86 #define	HECI_DEV_ID_ICH10_3	0x2E24  /* Eaglelake */
87 #define	HECI_DEV_ID_ICH10_4	0x2E34  /* Eaglelake */
88 
89 /*
90  * heci init function prototypes
91  */
92 void init_heci_device(dev_info_t *dip,
93 	struct iamt_heci_device *device);
94 void fini_heci_device(struct iamt_heci_device *device);
95 void heci_reset(struct iamt_heci_device *dev, int interrupts);
96 int heci_hw_init(struct iamt_heci_device *dev);
97 void heci_task_initialize_clients(void *data);
98 int heci_initialize_clients(struct iamt_heci_device *dev);
99 struct heci_file_private *heci_alloc_file_private(struct heci_file *file);
100 int heci_disconnect_host_client(struct iamt_heci_device *dev,
101 				struct heci_file_private *file_ext);
102 void heci_initialize_list(struct io_heci_list *list,
103 	struct iamt_heci_device *dev);
104 void heci_flush_list(struct io_heci_list *list,
105 	struct heci_file_private *file_ext);
106 void heci_flush_queues(struct iamt_heci_device *dev,
107 	struct heci_file_private *file_ext);
108 
109 void heci_remove_client_from_file_list(struct iamt_heci_device *dev,
110 	uint8_t host_client_id);
111 
112 /*
113  *  interrupt function prototype
114  */
115 uint_t heci_isr_interrupt(caddr_t);
116 
117 void heci_wd_timer(void *data);
118 
119 /*
120  *  input output function prototype
121  */
122 int heci_ioctl_get_version(struct iamt_heci_device *device, int if_num,
123 	struct heci_message_data *u_msg, struct heci_message_data k_msg,
124 	struct heci_file_private *file_ext,
125 	int mode);
126 
127 int heci_ioctl_connect_client(struct iamt_heci_device *dev, int if_num,
128 	struct heci_message_data *u_msg, struct heci_message_data k_msg,
129 	struct heci_file *file, int mode);
130 
131 int heci_ioctl_wd(struct iamt_heci_device *device, int if_num,
132 	struct heci_message_data k_msg,
133 	struct heci_file_private *file_ext, int mode);
134 
135 int heci_ioctl_bypass_wd(struct iamt_heci_device *device, int if_num,
136 	struct heci_message_data k_msg,
137 	struct heci_file_private *file_ext, int mode);
138 
139 int heci_start_read(struct iamt_heci_device *device, int if_num,
140 	struct heci_file_private *file_ext);
141 
142 int pthi_write(struct iamt_heci_device *device,
143 	struct heci_cb_private *priv_cb);
144 
145 int pthi_read(struct iamt_heci_device *device, int if_num,
146 	struct heci_file *file, struct uio *uio_p);
147 
148 struct heci_cb_private *find_pthi_read_list_entry(
149 	struct iamt_heci_device *device, struct heci_file *file);
150 
151 void run_next_iamthif_cmd(struct iamt_heci_device *device);
152 
153 void heci_free_cb_private(struct heci_cb_private *priv_cb);
154 
155 void heci_free_file_private(struct heci_file_private *priv);
156 
157 #endif /* _HECI_H_ */
158