Lines Matching +full:fifo +full:- +full:size

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
89 struct fifo { struct
93 int num; /* number of bytes in the fifo */ argument
94 int size; /* size of the fifo */ argument
105 struct fifo fifo; member
116 struct fifo *fifo; in fifo_init() local
118 fifo = &sc->fifo; in fifo_init()
119 fifo->size = sizeof(((struct fifo *)0)->buf); in fifo_init()
125 struct fifo *fifo; in fifo_reset() local
127 fifo = &sc->fifo; in fifo_reset()
128 bzero(fifo, sizeof(struct fifo)); in fifo_reset()
129 fifo->size = sizeof(((struct fifo *)0)->buf); in fifo_reset()
135 struct fifo *fifo; in fifo_put() local
137 fifo = &sc->fifo; in fifo_put()
138 if (fifo->num < fifo->size) { in fifo_put()
139 fifo->buf[fifo->windex] = val; in fifo_put()
140 fifo->windex = (fifo->windex + 1) % fifo->size; in fifo_put()
141 fifo->num++; in fifo_put()
148 struct fifo *fifo; in fifo_get() local
150 fifo = &sc->fifo; in fifo_get()
151 if (fifo->num > 0) { in fifo_get()
152 *val = fifo->buf[fifo->rindex]; in fifo_get()
153 fifo->rindex = (fifo->rindex + 1) % fifo->size; in fifo_get()
154 fifo->num--; in fifo_get()
158 return (-1); in fifo_get()
164 assert(pthread_mutex_isowned_np(&sc->mtx)); in movement_reset()
166 sc->delta_x = 0; in movement_reset()
167 sc->delta_y = 0; in movement_reset()
173 sc->delta_x += x - sc->cur_x; in movement_update()
174 sc->delta_y += sc->cur_y - y; in movement_update()
175 sc->cur_x = x; in movement_update()
176 sc->cur_y = y; in movement_update()
184 assert(pthread_mutex_isowned_np(&sc->mtx)); in movement_get()
187 val0 |= sc->status & (PS2M_DATA_LEFT_BUTTON | in movement_get()
190 if (sc->delta_x >= 0) { in movement_get()
191 if (sc->delta_x > 255) { in movement_get()
195 val1 = sc->delta_x; in movement_get()
198 if (sc->delta_x < -255) { in movement_get()
202 val1 = sc->delta_x; in movement_get()
204 sc->delta_x = 0; in movement_get()
206 if (sc->delta_y >= 0) { in movement_get()
207 if (sc->delta_y > 255) { in movement_get()
211 val2 = sc->delta_y; in movement_get()
214 if (sc->delta_y < -255) { in movement_get()
218 val2 = sc->delta_y; in movement_get()
220 sc->delta_y = 0; in movement_get()
222 if (sc->fifo.num < (sc->fifo.size - 3)) { in movement_get()
232 assert(pthread_mutex_isowned_np(&sc->mtx)); in ps2mouse_reset()
235 sc->status = PS2M_STS_ENABLE_DEV; in ps2mouse_reset()
236 sc->resolution = 4; in ps2mouse_reset()
237 sc->sampling_rate = 100; in ps2mouse_reset()
239 sc->cur_x = 0; in ps2mouse_reset()
240 sc->cur_y = 0; in ps2mouse_reset()
241 sc->delta_x = 0; in ps2mouse_reset()
242 sc->delta_y = 0; in ps2mouse_reset()
250 pthread_mutex_lock(&sc->mtx); in ps2mouse_read()
252 pthread_mutex_unlock(&sc->mtx); in ps2mouse_read()
260 return (sc->fifo.num); in ps2mouse_fifocnt()
266 pthread_mutex_lock(&sc->mtx); in ps2mouse_toggle()
268 sc->ctrlenable = 1; in ps2mouse_toggle()
270 sc->ctrlenable = 0; in ps2mouse_toggle()
271 sc->fifo.rindex = 0; in ps2mouse_toggle()
272 sc->fifo.windex = 0; in ps2mouse_toggle()
273 sc->fifo.num = 0; in ps2mouse_toggle()
275 pthread_mutex_unlock(&sc->mtx); in ps2mouse_toggle()
281 pthread_mutex_lock(&sc->mtx); in ps2mouse_write()
283 if (sc->curcmd) { in ps2mouse_write()
284 switch (sc->curcmd) { in ps2mouse_write()
286 sc->sampling_rate = val; in ps2mouse_write()
290 sc->resolution = val; in ps2mouse_write()
298 sc->curcmd = 0; in ps2mouse_write()
319 sc->status &= ~PS2M_STS_ENABLE_DEV; in ps2mouse_write()
324 sc->status |= PS2M_STS_ENABLE_DEV; in ps2mouse_write()
328 sc->curcmd = val; in ps2mouse_write()
336 sc->status |= PS2M_STS_REMOTE_MODE; in ps2mouse_write()
344 sc->status &= ~PS2M_STS_REMOTE_MODE; in ps2mouse_write()
349 fifo_put(sc, sc->status); in ps2mouse_write()
350 fifo_put(sc, sc->resolution); in ps2mouse_write()
351 fifo_put(sc, sc->sampling_rate); in ps2mouse_write()
354 sc->curcmd = val; in ps2mouse_write()
368 pthread_mutex_unlock(&sc->mtx); in ps2mouse_write()
376 pthread_mutex_lock(&sc->mtx); in ps2mouse_event()
379 sc->status &= ~(PS2M_STS_LEFT_BUTTON | in ps2mouse_event()
382 sc->status |= PS2M_STS_LEFT_BUTTON; in ps2mouse_event()
384 sc->status |= PS2M_STS_MID_BUTTON; in ps2mouse_event()
386 sc->status |= PS2M_STS_RIGHT_BUTTON; in ps2mouse_event()
388 if ((sc->status & PS2M_STS_ENABLE_DEV) == 0 || !sc->ctrlenable) { in ps2mouse_event()
390 pthread_mutex_unlock(&sc->mtx); in ps2mouse_event()
395 pthread_mutex_unlock(&sc->mtx); in ps2mouse_event()
397 if (sc->fifo.num > 0) in ps2mouse_event()
398 atkbdc_event(sc->atkbdc_sc, 0); in ps2mouse_event()
407 pthread_mutex_init(&sc->mtx, NULL); in ps2mouse_init()
409 sc->atkbdc_sc = atkbdc_sc; in ps2mouse_init()
411 pthread_mutex_lock(&sc->mtx); in ps2mouse_init()
413 pthread_mutex_unlock(&sc->mtx); in ps2mouse_init()
426 SNAPSHOT_VAR_OR_LEAVE(sc->status, meta, ret, done); in ps2mouse_snapshot()
427 SNAPSHOT_VAR_OR_LEAVE(sc->resolution, meta, ret, done); in ps2mouse_snapshot()
428 SNAPSHOT_VAR_OR_LEAVE(sc->sampling_rate, meta, ret, done); in ps2mouse_snapshot()
429 SNAPSHOT_VAR_OR_LEAVE(sc->ctrlenable, meta, ret, done); in ps2mouse_snapshot()
430 SNAPSHOT_VAR_OR_LEAVE(sc->curcmd, meta, ret, done); in ps2mouse_snapshot()
431 SNAPSHOT_VAR_OR_LEAVE(sc->cur_x, meta, ret, done); in ps2mouse_snapshot()
432 SNAPSHOT_VAR_OR_LEAVE(sc->cur_y, meta, ret, done); in ps2mouse_snapshot()
433 SNAPSHOT_VAR_OR_LEAVE(sc->delta_x, meta, ret, done); in ps2mouse_snapshot()
434 SNAPSHOT_VAR_OR_LEAVE(sc->delta_y, meta, ret, done); in ps2mouse_snapshot()