conskbd
static int conskbd(di_minor_t minor, di_node_t node);
TYPE_EXACT | DRV_EXACT, ILEVEL_0, conskbd
if (conskbd.conskbd_layout == -1)
*(int *)datap->b_wptr = conskbd.conskbd_layout;
ASSERT(conskbd.conskbd_lqueue_nums == 1);
*(int *)datap->b_wptr = conskbd.conskbd_directio;
conskbd.conskbd_directio = *(int *)mp->b_cont->b_rptr;
if (conskbd.conskbd_lqueue_nums > 0) {
lq = conskbd.conskbd_lqueue_list;
if (conskbd.conskbd_lqueue_nums > 0) {
lq = conskbd.conskbd_lqueue_list;
if (conskbd.conskbd_directio)
if (conskbd.conskbd_bypassed == B_FALSE) {
kbtrans_streams_key(conskbd.conskbd_kbtrans,
if (conskbd.conskbd_directio)
if (conskbd.conskbd_lqueue_nums == 0) {
lqs = conskbd.conskbd_lqueue_list;
msg->kpm_req_nums = conskbd.conskbd_lqueue_nums;
for (retry = 0, lqs = conskbd.conskbd_lqueue_list; lqs; ) {
prev = conskbd.conskbd_lqueue_list;
conskbd.conskbd_lqueue_list =
conskbd.conskbd_lqueue_nums --;
if (conskbd.conskbd_lqueue_nums == 0) {
kbd_layout_bak = conskbd.conskbd_layout;
conskbd.conskbd_layout = -1;
conskbd.conskbd_kbtrans,
if (conskbd.conskbd_lqueue_nums > 0) {
if (layout != -1 && conskbd.conskbd_layout == -1) {
conskbd.conskbd_layout = kbd_layout_bak;
conskbd.conskbd_layout = layout;
if (conskbd.conskbd_directio) {
if (conskbd.conskbd_led_state == -1)
if (conskbd.conskbd_led_state != -1) {
conskbd.conskbd_led_state;
if (conskbd.conskbd_led_state == -1) {
conskbd.conskbd_led_state = led_state;
kbtrans_streams_setled(conskbd.conskbd_kbtrans,
&conskbd.conskbd_polledio;
conskbd.conskbd_bypassed = B_TRUE;
lqs->lqs_next = conskbd.conskbd_lqueue_list;
conskbd.conskbd_lqueue_list = lqs;
conskbd.conskbd_lqueue_nums++;
lqs->lqs_next = conskbd.conskbd_lqueue_list;
conskbd.conskbd_lqueue_nums++;
conskbd.conskbd_lqueue_list = lqs;
ASSERT(&conskbd == conskbdp);
if (conskbd.conskbd_bypassed == B_TRUE)
*(int *)datap->b_wptr = conskbd.conskbd_directio;
conskbd.conskbd_directio = directio;
if (conskbd.conskbd_directio) {
conskbd.conskbd_kbtrans, conskbd_regqueue);
conskbd.conskbd_kbtrans, conskbd_consqueue);
static conskbd_state_t conskbd = { 0 };
conskbd.conskbd_layout = -1; /* invalid layout */
conskbd.conskbd_led_state = -1;
conskbd.conskbd_bypassed = B_FALSE;
&conskbd, &conskbd_callbacks, &conskbd.conskbd_kbtrans, 0, 0);
kbtrans_streams_set_keyboard(conskbd.conskbd_kbtrans, KB_USB,
conskbd.conskbd_polledio.cons_polledio_version = CONSPOLLEDIO_V1;
conskbd.conskbd_polledio.cons_polledio_argument =
(cons_polledio_arg_t)&conskbd;
conskbd.conskbd_polledio.cons_polledio_putchar = NULL;
conskbd.conskbd_polledio.cons_polledio_getchar =
conskbd.conskbd_polledio.cons_polledio_ischar =
conskbd.conskbd_polledio.cons_polledio_enter = conskbd_polledio_enter;
conskbd.conskbd_polledio.cons_polledio_exit = conskbd_polledio_exit;
conskbd.conskbd_directio = B_FALSE;
kbtrans_streams_untimeout(conskbd.conskbd_kbtrans);
kbtrans_streams_set_queue(conskbd.conskbd_kbtrans,
if (conskbd.conskbd_bypassed == B_FALSE) {
conskbd.conskbd_kbtrans);
conskbd.conskbd_kbtrans, RD(q));
conskbd.conskbd_kbtrans, mp);
conskbd.conskbd_kbtrans, oldq);
if ((conskbd.conskbd_bypassed) &&
(conskbd.conskbd_lqueue_nums > 0)) {
if (putq(conskbd.conskbd_lqueue_list->
if (conskbd.conskbd_bypassed == B_TRUE) {
if (conskbd.conskbd_bypassed == B_TRUE) {
if (conskbd.conskbd_layout == -1)
*(int *)datap->b_wptr = conskbd.conskbd_layout;
kbd_layout_bak = conskbd.conskbd_layout;
conskbd.conskbd_layout = *(intptr_t *)(mp->b_cont->b_rptr);
if (conskbd.conskbd_layout != kbd_layout_bak) {
conskbd.conskbd_layout)) != NULL) {
if (conskbd.conskbd_directio) {
if (conskbd.conskbd_lqueue_list == NULL) {
if (conskbd.conskbd_lqueue_list == NULL) {
if (conskbd.conskbd_lqueue_list == NULL ||