• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/input/serio/

Lines Matching defs:mlc

87 static void hil_mlc_clear_di_map(hil_mlc *mlc, int val)
92 mlc->di_map[j] = -1;
95 static void hil_mlc_clear_di_scratch(hil_mlc *mlc)
97 memset(&mlc->di_scratch, 0, sizeof(mlc->di_scratch));
100 static void hil_mlc_copy_di_scratch(hil_mlc *mlc, int idx)
102 memcpy(&mlc->di[idx], &mlc->di_scratch, sizeof(mlc->di_scratch));
105 static int hil_mlc_match_di_scratch(hil_mlc *mlc)
114 if (mlc->di_map[j] == idx)
120 if (!memcmp(mlc->di + idx, &mlc->di_scratch,
121 sizeof(mlc->di_scratch)))
127 static int hil_mlc_find_free_di(hil_mlc *mlc)
138 if (mlc->di_map[j] == idx)
148 static inline void hil_mlc_clean_serio_map(hil_mlc *mlc)
156 if (mlc->di_map[j] == idx)
160 mlc->serio_map[idx].di_revmap = -1;
164 static void hil_mlc_send_polls(hil_mlc *mlc)
171 did = (mlc->ipacket[0] & HIL_PKT_ADDR_MASK) >> 8;
172 serio = did ? mlc->serio[mlc->di_map[did - 1]] : NULL;
175 while (mlc->icount < 15 - i) {
178 p = mlc->ipacket[i];
188 serio = did ? mlc->serio[mlc->di_map[did-1]] : NULL;
240 static int hilse_match(hil_mlc *mlc, int unused)
244 rc = hil_mlc_match_di_scratch(mlc);
246 rc = hil_mlc_find_free_di(mlc);
253 hil_mlc_copy_di_scratch(mlc, rc);
254 mlc->di_map[mlc->ddi] = rc;
255 mlc->serio_map[rc].di_revmap = mlc->ddi;
256 hil_mlc_clean_serio_map(mlc);
257 serio_rescan(mlc->serio[rc]);
261 mlc->di_map[mlc->ddi] = rc;
265 mlc->serio_map[rc].di_revmap = mlc->ddi;
266 hil_mlc_clean_serio_map(mlc);
275 static int hilse_init_lcv(hil_mlc *mlc, int unused)
281 if (mlc->lcv && (tv.tv_sec - mlc->lcv_tv.tv_sec) < 5)
284 mlc->lcv_tv = tv;
285 mlc->lcv = 0;
290 static int hilse_inc_lcv(hil_mlc *mlc, int lim)
292 return mlc->lcv++ >= lim ? -1 : 0;
297 static int hilse_set_ddi(hil_mlc *mlc, int val)
299 mlc->ddi = val;
300 hil_mlc_clear_di_map(mlc, val + 1);
305 static int hilse_dec_ddi(hil_mlc *mlc, int unused)
307 mlc->ddi--;
308 if (mlc->ddi <= -1) {
309 mlc->ddi = -1;
310 hil_mlc_clear_di_map(mlc, 0);
313 hil_mlc_clear_di_map(mlc, mlc->ddi + 1);
318 static int hilse_inc_ddi(hil_mlc *mlc, int unused)
320 BUG_ON(mlc->ddi >= 6);
321 mlc->ddi++;
326 static int hilse_take_idd(hil_mlc *mlc, int unused)
335 if (mlc->ipacket[0] & HIL_PKT_CMD)
340 if (((mlc->ipacket[i] & HIL_PKT_ADDR_MASK) ==
341 (mlc->ipacket[0] & HIL_PKT_ADDR_MASK)) &&
342 (mlc->ipacket[i] & HIL_PKT_CMD) &&
343 ((mlc->ipacket[i] & HIL_PKT_DATA_MASK) == HIL_CMD_IDD))
351 if (mlc->ipacket[i])
358 mlc->di_scratch.idd[i] =
359 mlc->ipacket[i] & HIL_PKT_DATA_MASK;
362 if (mlc->di_scratch.idd[1] & HIL_IDD_HEADER_RSC)
365 if (mlc->di_scratch.idd[1] & HIL_IDD_HEADER_EXD)
371 mlc->ddi--;
376 static int hilse_take_rsc(hil_mlc *mlc, int unused)
381 mlc->di_scratch.rsc[i] =
382 mlc->ipacket[i] & HIL_PKT_DATA_MASK;
385 if (mlc->di_scratch.idd[1] & HIL_IDD_HEADER_EXD)
391 static int hilse_take_exd(hil_mlc *mlc, int unused)
396 mlc->di_scratch.exd[i] =
397 mlc->ipacket[i] & HIL_PKT_DATA_MASK;
400 if (mlc->di_scratch.exd[0] & HIL_EXD_HEADER_RNM)
406 static int hilse_take_rnm(hil_mlc *mlc, int unused)
411 mlc->di_scratch.rnm[i] =
412 mlc->ipacket[i] & HIL_PKT_DATA_MASK;
415 mlc->di_scratch.rnm);
420 static int hilse_operate(hil_mlc *mlc, int repoll)
423 if (mlc->opercnt == 0)
425 mlc->opercnt = 1;
427 hil_mlc_send_polls(mlc);
432 mlc->opercnt = 0;
577 static inline void hilse_setup_input(hil_mlc *mlc, const struct hilse_node *node)
582 mlc->imatch = node->object.packet;
583 mlc->imatch |= ((mlc->ddi + 2) << HIL_PKT_ADDR_SHIFT);
586 mlc->imatch = node->object.packet;
587 mlc->imatch |= ((mlc->ddi + 1) << HIL_PKT_ADDR_SHIFT);
590 mlc->imatch = node->object.packet;
593 mlc->imatch = 0;
598 mlc->istarted = 1;
599 mlc->intimeout = node->arg;
600 do_gettimeofday(&(mlc->instart));
601 mlc->icount = 15;
602 memset(mlc->ipacket, 0, 16 * sizeof(hil_packet));
603 BUG_ON(down_trylock(&mlc->isem));
611 static int hilse_donode(hil_mlc *mlc)
619 if (mlc->seidx && mlc->seidx != seidx &&
620 mlc->seidx != 41 && mlc->seidx != 42 && mlc->seidx != 43) {
621 printk(KERN_DEBUG PREFIX "z%i \n {%i}", doze, mlc->seidx);
625 seidx = mlc->seidx;
627 node = hil_mlc_se + mlc->seidx;
635 rc = node->object.func(mlc, node->arg);
647 write_lock_irqsave(&mlc->lock, flags);
648 rc = mlc->in(mlc, node->arg);
652 write_unlock_irqrestore(&mlc->lock, flags);
661 mlc->istarted = 0;
662 write_unlock_irqrestore(&mlc->lock, flags);
666 write_lock_irqsave(&mlc->lock, flags);
668 pack |= ((mlc->ddi + 1) << HIL_PKT_ADDR_SHIFT);
672 write_lock_irqsave(&mlc->lock, flags);
674 pack |= ((mlc->ddi + 2) << HIL_PKT_ADDR_SHIFT);
678 write_lock_irqsave(&mlc->lock, flags);
681 if (mlc->istarted)
685 hilse_setup_input(mlc, node + 1);
688 write_unlock_irqrestore(&mlc->lock, flags);
690 if (down_trylock(&mlc->osem)) {
694 up(&mlc->osem);
696 write_lock_irqsave(&mlc->lock, flags);
697 if (!mlc->ostarted) {
698 mlc->ostarted = 1;
699 mlc->opacket = pack;
700 mlc->out(mlc);
702 write_unlock_irqrestore(&mlc->lock, flags);
705 mlc->ostarted = 0;
706 do_gettimeofday(&(mlc->instart));
707 write_unlock_irqrestore(&mlc->lock, flags);
712 write_lock_irqsave(&mlc->lock, flags);
713 nextidx = mlc->cts(mlc) ? node->bad : node->good;
714 write_unlock_irqrestore(&mlc->lock, flags);
733 tv.tv_usec += USEC_PER_SEC * (tv.tv_sec - mlc->instart.tv_sec);
734 tv.tv_usec -= mlc->instart.tv_usec;
735 if (tv.tv_usec >= mlc->intimeout) goto sched;
736 tv.tv_usec = (mlc->intimeout - tv.tv_usec) * HZ / USEC_PER_SEC;
746 mlc->seidx += nextidx & HILSEN_MASK;
748 mlc->seidx -= nextidx & HILSEN_MASK;
750 mlc->seidx = nextidx & HILSEN_MASK;
765 struct hil_mlc *mlc = list_entry(tmp, hil_mlc, list);
766 while (hilse_donode(mlc) == 0) {
768 if (mlc->seidx != 41 &&
769 mlc->seidx != 42 &&
770 mlc->seidx != 43)
794 struct hil_mlc *mlc;
801 mlc = map->mlc;
802 BUG_ON(mlc == NULL);
804 mlc->serio_opacket[map->didx] |=
805 ((hil_packet)c) << (8 * (3 - mlc->serio_oidx[map->didx]));
807 if (mlc->serio_oidx[map->didx] >= 3) {
809 if (!(mlc->serio_opacket[map->didx] & HIL_PKT_CMD))
811 switch (mlc->serio_opacket[map->didx] & HIL_PKT_DATA_MASK) {
813 idx = mlc->di[map->didx].idd;
816 idx = mlc->di[map->didx].rsc;
819 idx = mlc->di[map->didx].exd;
822 idx = mlc->di[map->didx].rnm;
827 mlc->serio_oidx[map->didx] = 0;
828 mlc->serio_opacket[map->didx] = 0;
831 mlc->serio_oidx[map->didx]++;
853 mlc->serio_oidx[map->didx] = 0;
854 mlc->serio_opacket[map->didx] = 0;
862 struct hil_mlc *mlc;
870 mlc = map->mlc;
871 BUG_ON(mlc == NULL);
879 struct hil_mlc *mlc;
884 mlc = map->mlc;
885 BUG_ON(mlc == NULL);
899 int hil_mlc_register(hil_mlc *mlc)
904 BUG_ON(mlc == NULL);
906 mlc->istarted = 0;
907 mlc->ostarted = 0;
909 rwlock_init(&mlc->lock);
910 init_MUTEX(&mlc->osem);
912 init_MUTEX(&mlc->isem);
913 mlc->icount = -1;
914 mlc->imatch = 0;
916 mlc->opercnt = 0;
918 init_MUTEX_LOCKED(&(mlc->csem));
920 hil_mlc_clear_di_scratch(mlc);
921 hil_mlc_clear_di_map(mlc, 0);
924 hil_mlc_copy_di_scratch(mlc, i);
926 mlc->serio[i] = mlc_serio;
934 mlc_serio->port_data = &(mlc->serio_map[i]);
935 mlc->serio_map[i].mlc = mlc;
936 mlc->serio_map[i].didx = i;
937 mlc->serio_map[i].di_revmap = -1;
938 mlc->serio_opacket[i] = 0;
939 mlc->serio_oidx[i] = 0;
943 mlc->tasklet = &hil_mlcs_tasklet;
946 list_add_tail(&mlc->list, &hil_mlcs);
947 mlc->seidx = HILSEN_START;
954 int hil_mlc_unregister(hil_mlc *mlc)
960 BUG_ON(mlc == NULL);
964 if (list_entry(tmp, hil_mlc, list) == mlc)
977 serio_unregister_port(mlc->serio[i]);
978 mlc->serio[i] = NULL;