ipmivars.h revision 155517
1155517Sambrisko/*-
2155517Sambrisko * Copyright (c) 2006 IronPort Systems Inc. <ambrisko@ironport.com>
3155517Sambrisko * All rights reserved.
4155517Sambrisko *
5155517Sambrisko * Redistribution and use in source and binary forms, with or without
6155517Sambrisko * modification, are permitted provided that the following conditions
7155517Sambrisko * are met:
8155517Sambrisko * 1. Redistributions of source code must retain the above copyright
9155517Sambrisko *    notice, this list of conditions and the following disclaimer.
10155517Sambrisko * 2. Redistributions in binary form must reproduce the above copyright
11155517Sambrisko *    notice, this list of conditions and the following disclaimer in the
12155517Sambrisko *    documentation and/or other materials provided with the distribution.
13155517Sambrisko *
14155517Sambrisko * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15155517Sambrisko * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16155517Sambrisko * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17155517Sambrisko * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18155517Sambrisko * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19155517Sambrisko * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20155517Sambrisko * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21155517Sambrisko * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22155517Sambrisko * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23155517Sambrisko * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24155517Sambrisko * SUCH DAMAGE.
25155517Sambrisko *
26155517Sambrisko * $FreeBSD: head/sys/dev/ipmi/ipmivars.h 155517 2006-02-10 20:51:35Z ambrisko $
27155517Sambrisko */
28155517Sambrisko
29155517Sambriskostruct ipmi_get_info {
30155517Sambrisko	int		kcs_mode;
31155517Sambrisko	int		smic_mode;
32155517Sambrisko	uint64_t	address;
33155517Sambrisko	int		offset;
34155517Sambrisko	int		io_mode;
35155517Sambrisko};
36155517Sambrisko
37155517Sambriskostruct ipmi_softc {
38155517Sambrisko	device_t		ipmi_dev;
39155517Sambrisko	device_t		ipmi_smbios_dev;
40155517Sambrisko	struct cdev		*ipmi_dev_t;
41155517Sambrisko	int			ipmi_refcnt;
42155517Sambrisko	struct smbios_table_entry *ipmi_smbios;
43155517Sambrisko	struct ipmi_get_info	ipmi_bios_info;
44155517Sambrisko	int			ipmi_kcs_status_reg;
45155517Sambrisko	int			ipmi_kcs_command_reg;
46155517Sambrisko	int			ipmi_kcs_data_out_reg;
47155517Sambrisko	int			ipmi_kcs_data_in_reg;
48155517Sambrisko	int			ipmi_smic_data;
49155517Sambrisko	int			ipmi_smic_ctl_sts;
50155517Sambrisko	int			ipmi_smic_flags;
51155517Sambrisko	int			ipmi_io_rid;
52155517Sambrisko	struct resource	*	ipmi_io_res;
53155517Sambrisko	int			ipmi_mem_rid;
54155517Sambrisko	struct resource	*	ipmi_mem_res;
55155517Sambrisko	int			ipmi_irq_rid;
56155517Sambrisko	struct resource	*	ipmi_irq_res;
57155517Sambrisko	void			*ipmi_irq;
58155517Sambrisko	u_char			ipmi_address;
59155517Sambrisko	u_char			ipmi_lun;
60155517Sambrisko	int			ipmi_busy;
61155517Sambrisko	struct selinfo		ipmi_select;
62155517Sambrisko	int			ipmi_timestamp;
63155517Sambrisko	int 			ipmi_requests;
64155517Sambrisko	struct callout_handle   ipmi_timeout_handle;
65155517Sambrisko	TAILQ_HEAD(,ipmi_done_list)	ipmi_done;
66155517Sambrisko	eventhandler_tag	ipmi_ev_tag;
67155517Sambrisko};
68155517Sambrisko
69155517Sambriskostruct ipmi_ipmb {
70155517Sambrisko	u_char foo;
71155517Sambrisko};
72155517Sambrisko
73155517Sambrisko/* KCS status flags */
74155517Sambrisko#define KCS_STATUS_OBF			0x01 /* Data Out ready from BMC */
75155517Sambrisko#define KCS_STATUS_IBF			0x02 /* Data In from System */
76155517Sambrisko#define KCS_STATUS_SMS_ATN		0x04 /* Ready in RX queue */
77155517Sambrisko#define KCS_STATUS_C_D			0x08 /* Command/Data register write*/
78155517Sambrisko#define KCS_STATUS_OEM1			0x10
79155517Sambrisko#define KCS_STATUS_OEM2			0x20
80155517Sambrisko#define KCS_STATUS_S0			0x40
81155517Sambrisko#define KCS_STATUS_S1			0x80
82155517Sambrisko #define KCS_STATUS_STATE(x)		((x)>>6)
83155517Sambrisko #define KCS_STATUS_STATE_IDLE		0x0
84155517Sambrisko #define KCS_STATUS_STATE_READ		0x1
85155517Sambrisko #define KCS_STATUS_STATE_WRITE		0x2
86155517Sambrisko #define KCS_STATUS_STATE_ERROR		0x3
87155517Sambrisko#define KCS_IFACE_STATUS_ABORT		0x01
88155517Sambrisko#define KCS_IFACE_STATUS_ILLEGAL	0x02
89155517Sambrisko#define KCS_IFACE_STATUS_LENGTH_ERR	0x06
90155517Sambrisko
91155517Sambrisko/* KCD control codes */
92155517Sambrisko#define KCS_CONTROL_GET_STATUS_ABORT	0x60
93155517Sambrisko#define KCS_CONTROL_WRITE_START		0x61
94155517Sambrisko#define KCS_CONTROL_WRITE_END		0x62
95155517Sambrisko#define KCS_DATA_IN_READ		0x68
96155517Sambrisko
97155517Sambrisko/* SMIC status flags */
98155517Sambrisko#define SMIC_STATUS_BUSY		0x01 /* System set and BMC clears it */
99155517Sambrisko#define SMIC_STATUS_SMS_ATN		0x04 /* BMC has a message */
100155517Sambrisko#define SMIC_STATUS_EVT_ATN		0x08 /* Event has been RX */
101155517Sambrisko#define SMIC_STATUS_SMI			0x08 /* asserted SMI */
102155517Sambrisko#define SMIC_STATUS_TX_RDY		0x40 /* Ready to accept WRITE */
103155517Sambrisko#define SMIC_STATUS_RX_RDY		0x80 /* Ready to read */
104155517Sambrisko
105155517Sambrisko/* SMIC control codes */
106155517Sambrisko#define SMIC_CC_SMS_GET_STATUS		0x40
107155517Sambrisko#define SMIC_CC_SMS_WR_START		0x41
108155517Sambrisko#define SMIC_CC_SMS_WR_NEXT		0x42
109155517Sambrisko#define SMIC_CC_SMS_WR_END		0x43
110155517Sambrisko#define SMIC_CC_SMS_RD_START		0x44
111155517Sambrisko#define SMIC_CC_SMS_RD_NEXT		0x45
112155517Sambrisko#define SMIC_CC_SMS_RD_END		0x46
113155517Sambrisko
114155517Sambrisko/* SMIC status codes */
115155517Sambrisko#define SMIC_SC_SMS_RDY			0xc0
116155517Sambrisko#define SMIC_SC_SMS_WR_START		0xc1
117155517Sambrisko#define SMIC_SC_SMS_WR_NEXT		0xc2
118155517Sambrisko#define SMIC_SC_SMS_WR_END		0xc3
119155517Sambrisko#define SMIC_SC_SMS_RD_START		0xc4
120155517Sambrisko#define SMIC_SC_SMS_RD_NEXT		0xc5
121155517Sambrisko#define SMIC_SC_SMS_RD_END		0xc6
122155517Sambrisko
123155517Sambrisko#define RES(x) (x)->ipmi_io_res ? (x)->ipmi_io_res : (x)->ipmi_mem_res
124155517Sambrisko#define INB(sc, x) bus_space_read_1(rman_get_bustag(RES(sc)),	\
125155517Sambrisko    rman_get_bushandle(RES(sc)), (x))
126155517Sambrisko#define OUTB(sc, x, value) bus_space_write_1(rman_get_bustag(RES(sc)), \
127155517Sambrisko    rman_get_bushandle(RES(sc)), (x), value)
128155517Sambrisko
129155517Sambriskoint ipmi_attach(device_t);
130155517Sambriskoint ipmi_detach(device_t);
131155517Sambriskoint ipmi_smbios_query(device_t);
132155517Sambriskoint ipmi_smbios_probe(device_t);
133155517Sambriskoint ipmi_read(device_t, u_char *, int);
134155517Sambriskovoid ipmi_intr(void *);
135155517Sambrisko
136155517Sambriskodevice_t ipmi_smbios_identify (driver_t *driver, device_t parent);
137155517Sambriskoextern devclass_t ipmi_devclass;
138155517Sambriskoextern int ipmi_attached;
139