Lines Matching full:sc

114 fifo_init(struct ps2mouse_softc *sc)  in fifo_init()  argument
118 fifo = &sc->fifo; in fifo_init()
123 fifo_reset(struct ps2mouse_softc *sc) in fifo_reset() argument
127 fifo = &sc->fifo; in fifo_reset()
133 fifo_put(struct ps2mouse_softc *sc, uint8_t val) in fifo_put() argument
137 fifo = &sc->fifo; in fifo_put()
146 fifo_get(struct ps2mouse_softc *sc, uint8_t *val) in fifo_get() argument
150 fifo = &sc->fifo; in fifo_get()
162 movement_reset(struct ps2mouse_softc *sc) in movement_reset() argument
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()
171 movement_update(struct ps2mouse_softc *sc, int x, int y) in movement_update() argument
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()
180 movement_get(struct ps2mouse_softc *sc) in movement_get() argument
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()
223 fifo_put(sc, val0); in movement_get()
224 fifo_put(sc, val1); in movement_get()
225 fifo_put(sc, val2); in movement_get()
230 ps2mouse_reset(struct ps2mouse_softc *sc) in ps2mouse_reset() argument
232 assert(pthread_mutex_isowned_np(&sc->mtx)); in ps2mouse_reset()
233 fifo_reset(sc); in ps2mouse_reset()
234 movement_reset(sc); 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()
246 ps2mouse_read(struct ps2mouse_softc *sc, uint8_t *val) in ps2mouse_read() argument
250 pthread_mutex_lock(&sc->mtx); in ps2mouse_read()
251 retval = fifo_get(sc, val); in ps2mouse_read()
252 pthread_mutex_unlock(&sc->mtx); in ps2mouse_read()
258 ps2mouse_fifocnt(struct ps2mouse_softc *sc) in ps2mouse_fifocnt() argument
260 return (sc->fifo.num); in ps2mouse_fifocnt()
264 ps2mouse_toggle(struct ps2mouse_softc *sc, int enable) in ps2mouse_toggle() argument
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()
279 ps2mouse_write(struct ps2mouse_softc *sc, uint8_t val, int insert) in ps2mouse_write() argument
281 pthread_mutex_lock(&sc->mtx); in ps2mouse_write()
282 fifo_reset(sc); 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()
287 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
290 sc->resolution = val; in ps2mouse_write()
291 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
298 sc->curcmd = 0; in ps2mouse_write()
301 fifo_put(sc, val); in ps2mouse_write()
305 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
308 ps2mouse_reset(sc); in ps2mouse_write()
309 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
310 fifo_put(sc, PS2MC_BAT_SUCCESS); in ps2mouse_write()
311 fifo_put(sc, PS2MOUSE_DEV_ID); in ps2mouse_write()
314 ps2mouse_reset(sc); in ps2mouse_write()
315 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
318 fifo_reset(sc); in ps2mouse_write()
319 sc->status &= ~PS2M_STS_ENABLE_DEV; in ps2mouse_write()
320 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
323 fifo_reset(sc); in ps2mouse_write()
324 sc->status |= PS2M_STS_ENABLE_DEV; in ps2mouse_write()
325 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
328 sc->curcmd = val; in ps2mouse_write()
329 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
332 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
333 fifo_put(sc, PS2MOUSE_DEV_ID); in ps2mouse_write()
336 sc->status |= PS2M_STS_REMOTE_MODE; in ps2mouse_write()
337 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
340 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
341 movement_get(sc); in ps2mouse_write()
344 sc->status &= ~PS2M_STS_REMOTE_MODE; in ps2mouse_write()
345 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
348 fifo_put(sc, PS2MC_ACK); 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()
355 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
359 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
362 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
368 pthread_mutex_unlock(&sc->mtx); in ps2mouse_write()
374 struct ps2mouse_softc *sc = arg; in ps2mouse_event() local
376 pthread_mutex_lock(&sc->mtx); in ps2mouse_event()
377 movement_update(sc, x, y); 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()
394 movement_get(sc); 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()
404 struct ps2mouse_softc *sc; in ps2mouse_init() local
406 sc = calloc(1, sizeof (struct ps2mouse_softc)); in ps2mouse_init()
407 pthread_mutex_init(&sc->mtx, NULL); in ps2mouse_init()
408 fifo_init(sc); in ps2mouse_init()
409 sc->atkbdc_sc = atkbdc_sc; in ps2mouse_init()
411 pthread_mutex_lock(&sc->mtx); in ps2mouse_init()
412 ps2mouse_reset(sc); in ps2mouse_init()
413 pthread_mutex_unlock(&sc->mtx); in ps2mouse_init()
415 console_ptr_register(ps2mouse_event, sc, 1); in ps2mouse_init()
417 return (sc); in ps2mouse_init()
422 ps2mouse_snapshot(struct ps2mouse_softc *sc, struct vm_snapshot_meta *meta) in ps2mouse_snapshot() argument
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()