From owner-p4-projects@FreeBSD.ORG Fri Oct 24 10:28:15 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A8770106567C; Fri, 24 Oct 2008 10:28:15 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 486ED1065679 for ; Fri, 24 Oct 2008 10:28:15 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 373768FC25 for ; Fri, 24 Oct 2008 10:28:15 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id m9OASFrB016500 for ; Fri, 24 Oct 2008 10:28:15 GMT (envelope-from ed@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id m9OASFYw016498 for perforce@freebsd.org; Fri, 24 Oct 2008 10:28:15 GMT (envelope-from ed@FreeBSD.org) Date: Fri, 24 Oct 2008 10:28:15 GMT Message-Id: <200810241028.m9OASFYw016498@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to ed@FreeBSD.org using -f From: Ed Schouten To: Perforce Change Reviews Cc: Subject: PERFORCE change 151846 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Oct 2008 10:28:16 -0000 http://perforce.freebsd.org/chv.cgi?CH=151846 Change 151846 by ed@ed_dull on 2008/10/24 10:28:11 Add clist routine prototypes. Affected files ... .. //depot/projects/mpsafetty/sys/conf/files#20 edit .. //depot/projects/mpsafetty/sys/dev/kbdmux/kbdmux.c#5 edit .. //depot/projects/mpsafetty/sys/kern/subr_clist.c#8 add .. //depot/projects/mpsafetty/sys/sys/clist.h#7 edit Differences ... ==== //depot/projects/mpsafetty/sys/conf/files#20 (text+ko) ==== @@ -1662,6 +1662,7 @@ kern/subr_autoconf.c standard kern/subr_blist.c standard kern/subr_bus.c standard +kern/subr_clist.c standard kern/subr_clock.c standard kern/subr_devstat.c standard kern/subr_disk.c standard ==== //depot/projects/mpsafetty/sys/dev/kbdmux/kbdmux.c#5 (text+ko) ==== @@ -36,6 +36,7 @@ #include #include +#include #include #include #include @@ -204,7 +205,7 @@ callout_deactivate(&state->ks_timo); /* queue interrupt task if needed */ - if (state->ks_inq.c_cc > 0 && !(state->ks_flags & TASK) && + if (clist_usage(&state->ks_inq) > 0 && !(state->ks_flags & TASK) && KBDMUX_QUEUE_INTR(state) == 0) state->ks_flags |= TASK; @@ -223,6 +224,7 @@ switch (event) { case KBDIO_KEYINPUT: { int c; + char cq; KBDMUX_LOCK(state); @@ -245,12 +247,13 @@ if (!KBD_IS_BUSY(kbd)) continue; /* not open - discard the input */ - putc(c, &state->ks_inq); + cq = c; + clist_write(&state->ks_inq, &cq, 1); } /* queue interrupt task if needed */ - if (state->ks_inq.c_cc > 0 && !(state->ks_flags & TASK) && - KBDMUX_QUEUE_INTR(state) == 0) + if (clist_usage(&state->ks_inq) > 0 && + !(state->ks_flags & TASK) && KBDMUX_QUEUE_INTR(state) == 0) state->ks_flags |= TASK; KBDMUX_UNLOCK(state); @@ -383,8 +386,7 @@ } KBDMUX_LOCK_INIT(state); - clist_alloc_cblocks(&state->ks_inq, - KBDMUX_Q_SIZE, KBDMUX_Q_SIZE / 2); + clist_alloc(&state->ks_inq, KBDMUX_Q_SIZE); TASK_INIT(&state->ks_task, 0, kbdmux_kbd_intr, (void *) kbd); KBDMUX_CALLOUT_INIT(state); SLIST_INIT(&state->ks_kbds); @@ -448,7 +450,7 @@ bad: if (needfree) { if (state != NULL) { - clist_free_cblocks(&state->ks_inq); + clist_free(&state->ks_inq); free(state, M_KBDMUX); } if (keymap != NULL) @@ -495,8 +497,7 @@ } /* flush input queue */ - ndflush(&state->ks_inq, state->ks_inq.c_cc); - clist_free_cblocks(&state->ks_inq); + clist_free(&state->ks_inq); KBDMUX_UNLOCK(state); @@ -573,14 +574,15 @@ kbdmux_read(keyboard_t *kbd, int wait) { kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; - int c; + char c; KBDMUX_LOCK(state); - c = getc(&state->ks_inq); + if (clist_read(&state->ks_inq, &c, 1) != 1) { + KBDMUX_UNLOCK(state); + return (-1); + } KBDMUX_UNLOCK(state); - - if (c != -1) - kbd->kb_count ++; + kbd->kb_count++; return (KBD_IS_ACTIVE(kbd)? c : -1); } @@ -598,7 +600,7 @@ return (FALSE); KBDMUX_LOCK(state); - ready = (state->ks_inq.c_cc > 0)? TRUE : FALSE; + ready = clist_usage(&state->ks_inq) > 0 ? TRUE : FALSE; KBDMUX_UNLOCK(state); return (ready); @@ -612,7 +614,8 @@ { kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; u_int action; - int scancode, keycode; + int scancode = -1, keycode; + char cq; KBDMUX_LOCK(state); @@ -634,8 +637,7 @@ } /* see if there is something in the keyboard queue */ - scancode = getc(&state->ks_inq); - if (scancode == -1) { + if (clist_read(&state->ks_inq, &cq, 1) == 1) { if (state->ks_flags & POLLING) { kbdmux_kbd_t *k; @@ -649,11 +651,12 @@ if (!KBD_IS_BUSY(k->kbd)) continue; - putc(scancode, &state->ks_inq); + cq = scancode; + clist_write(&state->ks_inq, &cq, 1); } } - if (state->ks_inq.c_cc > 0) + if (clist_usage(&state->ks_inq) > 0) goto next_code; } @@ -894,7 +897,7 @@ if (!(state->ks_flags & COMPOSE) && (state->ks_composed_char != 0)) ready = TRUE; else - ready = (state->ks_inq.c_cc > 0)? TRUE : FALSE; + ready = clist_usage(&state->ks_inq) > 0 ? TRUE : FALSE; KBDMUX_UNLOCK(state); @@ -1219,7 +1222,7 @@ state->ks_composed_char = 0; /* state->ks_prefix = 0; XXX */ - ndflush(&state->ks_inq, state->ks_inq.c_cc); + clist_flush(&state->ks_inq); } static void ==== //depot/projects/mpsafetty/sys/sys/clist.h#7 (text+ko) ==== @@ -40,7 +40,7 @@ size_t cl_len; }; -void clist_alloc(struct clist *cl, unsigned int len); +void clist_alloc(struct clist *cl, size_t len); void clist_free(struct clist *cl); size_t clist_read(struct clist *cl, void *buf, size_t len); size_t clist_write(struct clist *cl, const void *buf, size_t len);