Lines Matching refs:sc

114 fifo_init(struct ps2mouse_softc *sc)
118 fifo = &sc->fifo;
123 fifo_reset(struct ps2mouse_softc *sc)
127 fifo = &sc->fifo;
133 fifo_put(struct ps2mouse_softc *sc, uint8_t val)
137 fifo = &sc->fifo;
146 fifo_get(struct ps2mouse_softc *sc, uint8_t *val)
150 fifo = &sc->fifo;
162 movement_reset(struct ps2mouse_softc *sc)
164 assert(pthread_mutex_isowned_np(&sc->mtx));
166 sc->delta_x = 0;
167 sc->delta_y = 0;
171 movement_update(struct ps2mouse_softc *sc, int x, int y)
173 sc->delta_x += x - sc->cur_x;
174 sc->delta_y += sc->cur_y - y;
175 sc->cur_x = x;
176 sc->cur_y = y;
180 movement_get(struct ps2mouse_softc *sc)
184 assert(pthread_mutex_isowned_np(&sc->mtx));
187 val0 |= sc->status & (PS2M_DATA_LEFT_BUTTON |
190 if (sc->delta_x >= 0) {
191 if (sc->delta_x > 255) {
195 val1 = sc->delta_x;
198 if (sc->delta_x < -255) {
202 val1 = sc->delta_x;
204 sc->delta_x = 0;
206 if (sc->delta_y >= 0) {
207 if (sc->delta_y > 255) {
211 val2 = sc->delta_y;
214 if (sc->delta_y < -255) {
218 val2 = sc->delta_y;
220 sc->delta_y = 0;
222 if (sc->fifo.num < (sc->fifo.size - 3)) {
223 fifo_put(sc, val0);
224 fifo_put(sc, val1);
225 fifo_put(sc, val2);
230 ps2mouse_reset(struct ps2mouse_softc *sc)
232 assert(pthread_mutex_isowned_np(&sc->mtx));
233 fifo_reset(sc);
234 movement_reset(sc);
235 sc->status = PS2M_STS_ENABLE_DEV;
236 sc->resolution = 4;
237 sc->sampling_rate = 100;
239 sc->cur_x = 0;
240 sc->cur_y = 0;
241 sc->delta_x = 0;
242 sc->delta_y = 0;
246 ps2mouse_read(struct ps2mouse_softc *sc, uint8_t *val)
250 pthread_mutex_lock(&sc->mtx);
251 retval = fifo_get(sc, val);
252 pthread_mutex_unlock(&sc->mtx);
258 ps2mouse_fifocnt(struct ps2mouse_softc *sc)
260 return (sc->fifo.num);
264 ps2mouse_toggle(struct ps2mouse_softc *sc, int enable)
266 pthread_mutex_lock(&sc->mtx);
268 sc->ctrlenable = 1;
270 sc->ctrlenable = 0;
271 sc->fifo.rindex = 0;
272 sc->fifo.windex = 0;
273 sc->fifo.num = 0;
275 pthread_mutex_unlock(&sc->mtx);
279 ps2mouse_write(struct ps2mouse_softc *sc, uint8_t val, int insert)
281 pthread_mutex_lock(&sc->mtx);
282 fifo_reset(sc);
283 if (sc->curcmd) {
284 switch (sc->curcmd) {
286 sc->sampling_rate = val;
287 fifo_put(sc, PS2MC_ACK);
290 sc->resolution = val;
291 fifo_put(sc, PS2MC_ACK);
298 sc->curcmd = 0;
301 fifo_put(sc, val);
305 fifo_put(sc, PS2MC_ACK);
308 ps2mouse_reset(sc);
309 fifo_put(sc, PS2MC_ACK);
310 fifo_put(sc, PS2MC_BAT_SUCCESS);
311 fifo_put(sc, PS2MOUSE_DEV_ID);
314 ps2mouse_reset(sc);
315 fifo_put(sc, PS2MC_ACK);
318 fifo_reset(sc);
319 sc->status &= ~PS2M_STS_ENABLE_DEV;
320 fifo_put(sc, PS2MC_ACK);
323 fifo_reset(sc);
324 sc->status |= PS2M_STS_ENABLE_DEV;
325 fifo_put(sc, PS2MC_ACK);
328 sc->curcmd = val;
329 fifo_put(sc, PS2MC_ACK);
332 fifo_put(sc, PS2MC_ACK);
333 fifo_put(sc, PS2MOUSE_DEV_ID);
336 sc->status |= PS2M_STS_REMOTE_MODE;
337 fifo_put(sc, PS2MC_ACK);
340 fifo_put(sc, PS2MC_ACK);
341 movement_get(sc);
344 sc->status &= ~PS2M_STS_REMOTE_MODE;
345 fifo_put(sc, PS2MC_ACK);
348 fifo_put(sc, PS2MC_ACK);
349 fifo_put(sc, sc->status);
350 fifo_put(sc, sc->resolution);
351 fifo_put(sc, sc->sampling_rate);
354 sc->curcmd = val;
355 fifo_put(sc, PS2MC_ACK);
359 fifo_put(sc, PS2MC_ACK);
362 fifo_put(sc, PS2MC_ACK);
368 pthread_mutex_unlock(&sc->mtx);
374 struct ps2mouse_softc *sc = arg;
376 pthread_mutex_lock(&sc->mtx);
377 movement_update(sc, x, y);
379 sc->status &= ~(PS2M_STS_LEFT_BUTTON |
382 sc->status |= PS2M_STS_LEFT_BUTTON;
384 sc->status |= PS2M_STS_MID_BUTTON;
386 sc->status |= PS2M_STS_RIGHT_BUTTON;
388 if ((sc->status & PS2M_STS_ENABLE_DEV) == 0 || !sc->ctrlenable) {
390 pthread_mutex_unlock(&sc->mtx);
394 movement_get(sc);
395 pthread_mutex_unlock(&sc->mtx);
397 if (sc->fifo.num > 0)
398 atkbdc_event(sc->atkbdc_sc, 0);
404 struct ps2mouse_softc *sc;
406 sc = calloc(1, sizeof (struct ps2mouse_softc));
407 pthread_mutex_init(&sc->mtx, NULL);
408 fifo_init(sc);
409 sc->atkbdc_sc = atkbdc_sc;
411 pthread_mutex_lock(&sc->mtx);
412 ps2mouse_reset(sc);
413 pthread_mutex_unlock(&sc->mtx);
415 console_ptr_register(ps2mouse_event, sc, 1);
417 return (sc);
422 ps2mouse_snapshot(struct ps2mouse_softc *sc, struct vm_snapshot_meta *meta)
426 SNAPSHOT_VAR_OR_LEAVE(sc->status, meta, ret, done);
427 SNAPSHOT_VAR_OR_LEAVE(sc->resolution, meta, ret, done);
428 SNAPSHOT_VAR_OR_LEAVE(sc->sampling_rate, meta, ret, done);
429 SNAPSHOT_VAR_OR_LEAVE(sc->ctrlenable, meta, ret, done);
430 SNAPSHOT_VAR_OR_LEAVE(sc->curcmd, meta, ret, done);
431 SNAPSHOT_VAR_OR_LEAVE(sc->cur_x, meta, ret, done);
432 SNAPSHOT_VAR_OR_LEAVE(sc->cur_y, meta, ret, done);
433 SNAPSHOT_VAR_OR_LEAVE(sc->delta_x, meta, ret, done);
434 SNAPSHOT_VAR_OR_LEAVE(sc->delta_y, meta, ret, done);