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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (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 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_USB_CONSOLE_INPUT_H
#define _SYS_USB_CONSOLE_INPUT_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* Opaque handle which is used above the usba level.
*/
typedef struct usb_console_info *usb_console_info_t;
/*
* Opaque handle which is used above the ohci level.
*/
typedef struct usb_console_info_private *usb_console_info_private_t;
/*
* This is the structure definition for the console input handle.
* This structure is passed down from hid and is used keep track
* of state information for the USB OBP support.
*/
typedef struct usb_console_info_impl {
/*
* The dip for the device that is going to be used as input.
*/
dev_info_t *uci_dip;
/*
* Private data that ohci uses for state information.
*/
usb_console_info_private_t uci_private;
} usb_console_info_impl_t;
_NOTE(SCHEME_PROTECTS_DATA("Data only written during attach",
usb_console_info_impl_t::uci_private))
_NOTE(SCHEME_PROTECTS_DATA("Data only written during attach",
usb_console_info_impl_t::uci_dip))
/*
* The initialization routine for handling the USB keyboard in OBP mode.
* This routine saves off state information and calls down to the lower
* layers to initialize any state information.
*/
int usb_console_input_init(
dev_info_t *dip,
usb_pipe_handle_t pipe_handle,
uchar_t **obp_buf,
usb_console_info_t *console_info_handle
);
/*
* Free up any resources that we allocated in the above initialization
* routine.
*/
int usb_console_input_fini(
usb_console_info_t console_input_info
);
/*
* This is the routine that OBP calls to save the USB state information
* before using the USB keyboard as an input device. This routine,
* and all of the routines that it calls, are responsible for saving
* any state information so that it can be restored when OBP mode is
* over.
*/
int usb_console_input_enter(
usb_console_info_t console_info_handle
);
/*
* This is the routine that OBP calls when it wants to read a character.
* We will call to the lower layers to see if there is any input data
* available.
*/
int usb_console_read(
usb_console_info_t console_info_handle,
uint_t *num_characters
);
/*
* This is the routine that OBP calls when it is giving up control of the
* USB keyboard. This routine, and the lower layer routines that it calls,
* are responsible for restoring the controller state to the state it was
* in before OBP took control.
*/
int usb_console_input_exit(
usb_console_info_t console_info_handle
);
int usb_console_output_init(
dev_info_t *dip,
usb_pipe_handle_t pipe_handle,
usb_console_info_t *console_info_handle
);
int usb_console_output_fini(
usb_console_info_t console_output_info
);
int usb_console_output_enter(
usb_console_info_t console_info_handle
);
int usb_console_write(
usb_console_info_t console_info_handle,
uchar_t *buf,
uint_t num_characters,
uint_t *num_characters_written
);
int usb_console_output_exit(
usb_console_info_t console_info_handle
);
#ifdef __cplusplus
}
#endif
#endif /* _SYS_USB_CONSOLE_INPUT_H */
|