Lines Matching refs:mlc
65 hil_mlc *mlc = &hp_sdc_mlc; in hp_sdc_mlc_isr() local
67 write_lock(&mlc->lock); in hp_sdc_mlc_isr()
68 if (mlc->icount < 0) { in hp_sdc_mlc_isr()
70 up(&mlc->isem); in hp_sdc_mlc_isr()
73 idx = 15 - mlc->icount; in hp_sdc_mlc_isr()
75 mlc->ipacket[idx] |= data | HIL_ERR_INT; in hp_sdc_mlc_isr()
76 mlc->icount--; in hp_sdc_mlc_isr()
79 if ((mlc->ipacket[idx - 1] & HIL_PKT_ADDR_MASK) != in hp_sdc_mlc_isr()
80 (mlc->ipacket[idx] & HIL_PKT_ADDR_MASK)) { in hp_sdc_mlc_isr()
81 mlc->ipacket[idx] &= ~HIL_PKT_ADDR_MASK; in hp_sdc_mlc_isr()
82 mlc->ipacket[idx] |= (mlc->ipacket[idx - 1] in hp_sdc_mlc_isr()
90 mlc->ipacket[idx] = in hp_sdc_mlc_isr()
97 if (mlc->imatch == 0) in hp_sdc_mlc_isr()
99 if ((mlc->imatch == (HIL_ERR_INT | HIL_PKT_CMD | HIL_CMD_POL)) in hp_sdc_mlc_isr()
100 && (mlc->ipacket[idx] == (mlc->imatch | idx))) in hp_sdc_mlc_isr()
102 if (mlc->ipacket[idx] == mlc->imatch) in hp_sdc_mlc_isr()
115 mlc->ipacket[idx] |= HIL_ERR_INT | HIL_ERR_PERR | in hp_sdc_mlc_isr()
120 mlc->ipacket[idx] |= HIL_ERR_INT | HIL_ERR_LERR; in hp_sdc_mlc_isr()
134 tasklet_schedule(mlc->tasklet); in hp_sdc_mlc_isr()
135 up(&mlc->isem); in hp_sdc_mlc_isr()
137 write_unlock(&mlc->lock); in hp_sdc_mlc_isr()
143 static int hp_sdc_mlc_in(hil_mlc *mlc, suseconds_t timeout) in hp_sdc_mlc_in() argument
148 priv = mlc->priv; in hp_sdc_mlc_in()
151 if (down_trylock(&mlc->isem)) { in hp_sdc_mlc_in()
154 mlc->ipacket[0] = in hp_sdc_mlc_in()
155 HIL_ERR_INT | (mlc->opacket & in hp_sdc_mlc_in()
159 mlc->icount = 14; in hp_sdc_mlc_in()
164 tv.tv_usec += USEC_PER_SEC * (tv.tv_sec - mlc->instart.tv_sec); in hp_sdc_mlc_in()
165 if (tv.tv_usec - mlc->instart.tv_usec > mlc->intimeout) { in hp_sdc_mlc_in()
171 up(&mlc->isem); in hp_sdc_mlc_in()
176 up(&mlc->isem); in hp_sdc_mlc_in()
182 static int hp_sdc_mlc_cts(hil_mlc *mlc) in hp_sdc_mlc_cts() argument
186 priv = mlc->priv; in hp_sdc_mlc_cts()
189 BUG_ON(down_trylock(&mlc->isem)); in hp_sdc_mlc_cts()
190 BUG_ON(down_trylock(&mlc->osem)); in hp_sdc_mlc_cts()
192 up(&mlc->isem); in hp_sdc_mlc_cts()
193 up(&mlc->osem); in hp_sdc_mlc_cts()
195 if (down_trylock(&mlc->csem)) { in hp_sdc_mlc_cts()
196 if (priv->trans.act.semaphore != &mlc->csem) in hp_sdc_mlc_cts()
206 priv->trans.act.semaphore = &mlc->csem; in hp_sdc_mlc_cts()
220 priv->trans.act.semaphore = &mlc->osem; in hp_sdc_mlc_cts()
221 up(&mlc->csem); in hp_sdc_mlc_cts()
225 static void hp_sdc_mlc_out(hil_mlc *mlc) in hp_sdc_mlc_out() argument
229 priv = mlc->priv; in hp_sdc_mlc_out()
232 BUG_ON(down_trylock(&mlc->osem)); in hp_sdc_mlc_out()
234 if (mlc->opacket & HIL_DO_ALTER_CTRL) in hp_sdc_mlc_out()
239 up(&mlc->osem); in hp_sdc_mlc_out()
243 BUG_ON(down_trylock(&mlc->csem)); in hp_sdc_mlc_out()
244 up(&mlc->csem); in hp_sdc_mlc_out()
248 priv->trans.act.semaphore = &mlc->osem; in hp_sdc_mlc_out()
254 (mlc->opacket & in hp_sdc_mlc_out()
258 (mlc->opacket & HIL_PKT_DATA_MASK) in hp_sdc_mlc_out()
267 priv->emtestmode = mlc->opacket & HIL_CTRL_TEST; in hp_sdc_mlc_out()
270 BUG_ON((mlc->opacket & (HIL_CTRL_APE | HIL_CTRL_IPF)) == HIL_CTRL_APE); in hp_sdc_mlc_out()
272 if ((mlc->opacket & HIL_CTRL_ONLY) == HIL_CTRL_ONLY) in hp_sdc_mlc_out()
276 BUG_ON(mlc->opacket & HIL_CTRL_APE); in hp_sdc_mlc_out()
289 priv->trans.act.semaphore = &mlc->osem; in hp_sdc_mlc_out()
297 if (mlc->opacket & HIL_CTRL_APE) { in hp_sdc_mlc_out()
299 BUG_ON(down_trylock(&mlc->csem)); in hp_sdc_mlc_out()
307 hil_mlc *mlc = &hp_sdc_mlc; in hp_sdc_mlc_init() local
319 hp_sdc_mlc_priv.trans.act.semaphore = &mlc->osem; in hp_sdc_mlc_init()
322 mlc->cts = &hp_sdc_mlc_cts; in hp_sdc_mlc_init()
323 mlc->in = &hp_sdc_mlc_in; in hp_sdc_mlc_init()
324 mlc->out = &hp_sdc_mlc_out; in hp_sdc_mlc_init()
325 mlc->priv = &hp_sdc_mlc_priv; in hp_sdc_mlc_init()
327 err = hil_mlc_register(mlc); in hp_sdc_mlc_init()
335 if (hil_mlc_unregister(mlc)) in hp_sdc_mlc_init()
346 hil_mlc *mlc = &hp_sdc_mlc; in hp_sdc_mlc_exit() local
352 if (hil_mlc_unregister(mlc)) in hp_sdc_mlc_exit()