/* Driver poll routine. This routine polls the boards in use and passes messages back up to host when necessary. This is actually very CPU efficient, since we will always have the kernel poll clock, it adds only a few cycles when idle (since board service can be determined very easily), but when loaded generates no interrupts (with their expensive associated context change).  */
static void stli_poll(unsigned long arg)
/* Driver poll routine. This routine polls the boards in use and passes messages back up to host when necessary. This is actually very CPU efficient, since we will always have the kernel poll clock, it adds only a few cycles when idle (since board service can be determined very easily), but when loaded generates no interrupts (with their expensive associated context change).  */
static void stli_poll(unsigned long arg)
{
	cdkhdr_t __iomem *hdrp;
	struct stlibrd *brdp;
	unsigned int brdnr;
	mod_timer(&stli_timerlist, STLI_TIMEOUT);
	for (brdnr = 0; (brdnr < stli_nrbrds); brdnr++) {
		brdp = stli_brds[brdnr];
		if (brdp == NULL)
			continue;
		if ((brdp->state & BST_STARTED) == 0)
			continue;
		spin_lock(&brd_lock);
		EBRDENABLE(brdp);
		hdrp = (cdkhdr_t __iomem *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
		if (readb(&hdrp->hostreq))
			stli_brdpoll(brdp, hdrp);
		EBRDDISABLE(brdp);
		spin_unlock(&brd_lock);
	}
}