Lines Matching refs:sc
112 fifo_init(struct ps2mouse_softc *sc) in fifo_init() argument
116 fifo = &sc->fifo; in fifo_init()
121 fifo_reset(struct ps2mouse_softc *sc) in fifo_reset() argument
125 fifo = &sc->fifo; in fifo_reset()
131 fifo_put(struct ps2mouse_softc *sc, uint8_t val) in fifo_put() argument
135 fifo = &sc->fifo; in fifo_put()
144 fifo_get(struct ps2mouse_softc *sc, uint8_t *val) in fifo_get() argument
148 fifo = &sc->fifo; in fifo_get()
160 movement_reset(struct ps2mouse_softc *sc) in movement_reset() argument
162 assert(pthread_mutex_isowned_np(&sc->mtx)); in movement_reset()
164 sc->delta_x = 0; in movement_reset()
165 sc->delta_y = 0; in movement_reset()
169 movement_update(struct ps2mouse_softc *sc, int x, int y) in movement_update() argument
171 sc->delta_x += x - sc->cur_x; in movement_update()
172 sc->delta_y += sc->cur_y - y; in movement_update()
173 sc->cur_x = x; in movement_update()
174 sc->cur_y = y; in movement_update()
178 movement_get(struct ps2mouse_softc *sc) in movement_get() argument
182 assert(pthread_mutex_isowned_np(&sc->mtx)); in movement_get()
185 val0 |= sc->status & (PS2M_DATA_LEFT_BUTTON | in movement_get()
188 if (sc->delta_x >= 0) { in movement_get()
189 if (sc->delta_x > 255) { in movement_get()
193 val1 = sc->delta_x; in movement_get()
196 if (sc->delta_x < -255) { in movement_get()
200 val1 = sc->delta_x; in movement_get()
202 sc->delta_x = 0; in movement_get()
204 if (sc->delta_y >= 0) { in movement_get()
205 if (sc->delta_y > 255) { in movement_get()
209 val2 = sc->delta_y; in movement_get()
212 if (sc->delta_y < -255) { in movement_get()
216 val2 = sc->delta_y; in movement_get()
218 sc->delta_y = 0; in movement_get()
220 if (sc->fifo.num < (sc->fifo.size - 3)) { in movement_get()
221 fifo_put(sc, val0); in movement_get()
222 fifo_put(sc, val1); in movement_get()
223 fifo_put(sc, val2); in movement_get()
228 ps2mouse_reset(struct ps2mouse_softc *sc) in ps2mouse_reset() argument
230 assert(pthread_mutex_isowned_np(&sc->mtx)); in ps2mouse_reset()
231 fifo_reset(sc); in ps2mouse_reset()
232 movement_reset(sc); in ps2mouse_reset()
233 sc->status = PS2M_STS_ENABLE_DEV; in ps2mouse_reset()
234 sc->resolution = 4; in ps2mouse_reset()
235 sc->sampling_rate = 100; in ps2mouse_reset()
237 sc->cur_x = 0; in ps2mouse_reset()
238 sc->cur_y = 0; in ps2mouse_reset()
239 sc->delta_x = 0; in ps2mouse_reset()
240 sc->delta_y = 0; in ps2mouse_reset()
244 ps2mouse_read(struct ps2mouse_softc *sc, uint8_t *val) in ps2mouse_read() argument
248 pthread_mutex_lock(&sc->mtx); in ps2mouse_read()
249 retval = fifo_get(sc, val); in ps2mouse_read()
250 pthread_mutex_unlock(&sc->mtx); in ps2mouse_read()
256 ps2mouse_fifocnt(struct ps2mouse_softc *sc) in ps2mouse_fifocnt() argument
258 return (sc->fifo.num); in ps2mouse_fifocnt()
262 ps2mouse_toggle(struct ps2mouse_softc *sc, int enable) in ps2mouse_toggle() argument
264 pthread_mutex_lock(&sc->mtx); in ps2mouse_toggle()
266 sc->ctrlenable = 1; in ps2mouse_toggle()
268 sc->ctrlenable = 0; in ps2mouse_toggle()
269 sc->fifo.rindex = 0; in ps2mouse_toggle()
270 sc->fifo.windex = 0; in ps2mouse_toggle()
271 sc->fifo.num = 0; in ps2mouse_toggle()
273 pthread_mutex_unlock(&sc->mtx); in ps2mouse_toggle()
277 ps2mouse_write(struct ps2mouse_softc *sc, uint8_t val, int insert) in ps2mouse_write() argument
279 pthread_mutex_lock(&sc->mtx); in ps2mouse_write()
280 fifo_reset(sc); in ps2mouse_write()
281 if (sc->curcmd) { in ps2mouse_write()
282 switch (sc->curcmd) { in ps2mouse_write()
284 sc->sampling_rate = val; in ps2mouse_write()
285 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
288 sc->resolution = val; in ps2mouse_write()
289 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
296 sc->curcmd = 0; in ps2mouse_write()
299 fifo_put(sc, val); in ps2mouse_write()
303 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
306 ps2mouse_reset(sc); in ps2mouse_write()
307 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
308 fifo_put(sc, PS2MC_BAT_SUCCESS); in ps2mouse_write()
309 fifo_put(sc, PS2MOUSE_DEV_ID); in ps2mouse_write()
312 ps2mouse_reset(sc); in ps2mouse_write()
313 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
316 fifo_reset(sc); in ps2mouse_write()
317 sc->status &= ~PS2M_STS_ENABLE_DEV; in ps2mouse_write()
318 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
321 fifo_reset(sc); in ps2mouse_write()
322 sc->status |= PS2M_STS_ENABLE_DEV; in ps2mouse_write()
323 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
326 sc->curcmd = val; in ps2mouse_write()
327 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
330 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
331 fifo_put(sc, PS2MOUSE_DEV_ID); in ps2mouse_write()
334 sc->status |= PS2M_STS_REMOTE_MODE; in ps2mouse_write()
335 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
338 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
339 movement_get(sc); in ps2mouse_write()
342 sc->status &= ~PS2M_STS_REMOTE_MODE; in ps2mouse_write()
343 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
346 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
347 fifo_put(sc, sc->status); in ps2mouse_write()
348 fifo_put(sc, sc->resolution); in ps2mouse_write()
349 fifo_put(sc, sc->sampling_rate); in ps2mouse_write()
352 sc->curcmd = val; in ps2mouse_write()
353 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
357 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
360 fifo_put(sc, PS2MC_ACK); in ps2mouse_write()
366 pthread_mutex_unlock(&sc->mtx); in ps2mouse_write()
372 struct ps2mouse_softc *sc = arg; in ps2mouse_event() local
374 pthread_mutex_lock(&sc->mtx); in ps2mouse_event()
375 movement_update(sc, x, y); in ps2mouse_event()
377 sc->status &= ~(PS2M_STS_LEFT_BUTTON | in ps2mouse_event()
380 sc->status |= PS2M_STS_LEFT_BUTTON; in ps2mouse_event()
382 sc->status |= PS2M_STS_MID_BUTTON; in ps2mouse_event()
384 sc->status |= PS2M_STS_RIGHT_BUTTON; in ps2mouse_event()
386 if ((sc->status & PS2M_STS_ENABLE_DEV) == 0 || !sc->ctrlenable) { in ps2mouse_event()
388 pthread_mutex_unlock(&sc->mtx); in ps2mouse_event()
392 movement_get(sc); in ps2mouse_event()
393 pthread_mutex_unlock(&sc->mtx); in ps2mouse_event()
395 if (sc->fifo.num > 0) in ps2mouse_event()
396 atkbdc_event(sc->atkbdc_sc, 0); in ps2mouse_event()
402 struct ps2mouse_softc *sc; in ps2mouse_init() local
404 sc = calloc(1, sizeof (struct ps2mouse_softc)); in ps2mouse_init()
405 pthread_mutex_init(&sc->mtx, NULL); in ps2mouse_init()
406 fifo_init(sc); in ps2mouse_init()
407 sc->atkbdc_sc = atkbdc_sc; in ps2mouse_init()
409 pthread_mutex_lock(&sc->mtx); in ps2mouse_init()
410 ps2mouse_reset(sc); in ps2mouse_init()
411 pthread_mutex_unlock(&sc->mtx); in ps2mouse_init()
413 console_ptr_register(ps2mouse_event, sc, 1); in ps2mouse_init()
415 return (sc); in ps2mouse_init()