#undef BLOCKMOVE
#define Z_WAKE
#undef Z_EXT_CHARS_IN_BUFFER
-static char rcsid[] = "$Revision: 2.3.2.20 $$Date: 2004/02/25 18:14:16 $";
/*
* linux/drivers/char/cyclades.c
*
*/
+#define CY_VERSION "2.4"
+
/* If you need to install more boards than NR_CARDS, change the constant
in the definition below. No other change is necessary to support up to
eight boards. Beyond that you'll have to extend cy_isa_addresses. */
#undef CY_PCI_DEBUG
#if 0
-#define PAUSE __asm__("nop");
+#define PAUSE __asm__("nop")
#else
-#define PAUSE ;
+#define PAUSE do {} while (0)
#endif
/*
#define STD_COM_FLAGS (0)
-#define JIFFIES_DIFF(n, j) ((j) - (n))
-
static struct tty_driver *cy_serial_driver;
#ifdef CONFIG_ISA
char *name, const char *routine)
{
#ifdef SERIAL_PARANOIA_CHECK
- static const char *badmagic =
- "cyc Warning: bad magic number for serial struct (%s) in %s\n";
- static const char *badinfo =
- "cyc Warning: null cyclades_port for (%s) in %s\n";
- static const char *badrange =
- "cyc Warning: cyclades_port out of range for (%s) in %s\n";
-
if (!info) {
- printk(badinfo, name, routine);
+ printk("cyc Warning: null cyclades_port for (%s) in %s\n",
+ name, routine);
return 1;
}
if ((long)info < (long)(&cy_port[0]) ||
(long)(&cy_port[NR_PORTS]) < (long)info) {
- printk(badrange, name, routine);
+ printk("cyc Warning: cyclades_port out of range for (%s) in "
+ "%s\n", name, routine);
return 1;
}
if (info->magic != CYCLADES_MAGIC) {
- printk(badmagic, name, routine);
+ printk("cyc Warning: bad magic number for serial struct (%s) "
+ "in %s\n", name, routine);
return 1;
}
#endif
/* if the CCR never cleared, the previous command
didn't finish within the "reasonable time" */
if (i == 100)
- return (-1);
+ return -1;
/* Issue the new command */
cy_writeb(base_addr + (CyCCR << index), cmd);
- return (0);
+ return 0;
} /* cyy_issue_cmd */
#ifdef CONFIG_ISA
firm_id = cinfo->base_addr + ID_ADDRESS;
if (!ISZLOADED(*cinfo)) {
- return (-1);
+ return -1;
}
zfw_ctrl = cinfo->base_addr + (cy_readl(&firm_id->zfwctrl_addr) &
0xfffff);
firm_id = cinfo->base_addr + ID_ADDRESS;
if (!ISZLOADED(*cinfo)) {
- return (-1);
+ return -1;
}
zfw_ctrl = cinfo->base_addr + (cy_readl(&firm_id->zfwctrl_addr) &
0xfffff);
&((struct RUNTIME_9060 __iomem *)(cinfo->ctl_addr))->pci_doorbell;
while ((cy_readl(pci_doorbell) & 0xff) != 0) {
if (index++ == 1000) {
- return ((int)(cy_readl(pci_doorbell) & 0xff));
+ return (int)(cy_readl(pci_doorbell) & 0xff);
}
udelay(50L);
}
cy_writel(&board_ctrl->hcmd_param, param);
cy_writel(pci_doorbell, (long)cmd);
- return (0);
+ return 0;
} /* cyz_issue_cmd */
static void
cyz_timerlist.expires = jiffies + cyz_polling_cycle;
}
add_timer(&cyz_timerlist);
-
- return;
} /* cyz_poll */
#endif /* CONFIG_CYZ_INTR */
#ifdef CY_DEBUG_OPEN
printk(" cyc shutdown done\n");
#endif
- return;
} /* shutdown */
/*
if (info->flags & ASYNC_CLOSING) {
interruptible_sleep_on(&info->close_wait);
}
- return ((info->
- flags & ASYNC_HUP_NOTIFY) ? -EAGAIN : -ERESTARTSYS);
+ return (info->flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS;
}
/*
if (tty_hung_up_p(filp) || (info->flags & ASYNC_CLOSING)) {
if (info->flags & ASYNC_CLOSING)
interruptible_sleep_on(&info->close_wait);
- return ((info->
- flags & ASYNC_HUP_NOTIFY) ? -EAGAIN : -ERESTARTSYS);
+ return (info->flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS;
}
/*
break;
}
} else {
- // Nothing to do!
+ /* Nothing to do! */
}
/* Run one more char cycle */
msleep_interruptible(jiffies_to_msecs(char_time * 5));
#endif
CY_UNLOCK(info, flags);
- return;
} /* cy_close */
/* This routine gets called when tty_write has put something into
#ifdef CY_DEBUG_IO
printk("cyc:cy_chars_in_buffer ttyC%d %d\n", info->line, info->xmit_cnt + char_count); /* */
#endif
- return (info->xmit_cnt + char_count);
+ return info->xmit_cnt + char_count;
}
#endif /* Z_EXT_CHARS_IN_BUFFER */
} /* cy_chars_in_buffer */
cyy_issue_cmd(base_addr, CyCOR_CHANGE | CyCOR3ch, index);
CY_UNLOCK(info, flags);
} else {
- // Nothing to do!
+ /* Nothing to do! */
}
return 0;
} /* set_threshold */
tmp = cy_readb(base_addr + (CyCOR3 << index)) & CyREC_FIFO;
return put_user(tmp, value);
} else {
- // Nothing to do!
+ /* Nothing to do! */
return 0;
}
} /* get_threshold */
cy_writeb(base_addr + (CyRTPR << index), value & 0xff);
CY_UNLOCK(info, flags);
} else {
- // Nothing to do!
+ /* Nothing to do! */
}
return 0;
} /* set_timeout */
tmp = cy_readb(base_addr + (CyRTPR << index));
return put_user(tmp, value);
} else {
- // Nothing to do!
+ /* Nothing to do! */
return 0;
}
} /* get_timeout */
(tty->termios->c_cflag & CLOCAL))
wake_up_interruptible(&info->open_wait);
#endif
-
- return;
} /* cy_set_termios */
/* This function is used to send a high-priority XON/XOFF character to
info->throttle = 1;
}
}
-
- return;
} /* cy_throttle */
/*
info->throttle = 0;
}
}
-
- return;
} /* cy_unthrottle */
/* cy_start and cy_stop provide software output flow control as a
cy_readb(base_addr + (CySRER << index)) & ~CyTxRdy);
CY_UNLOCK(info, flags);
} else {
- // Nothing to do!
+ /* Nothing to do! */
}
-
- return;
} /* cy_stop */
static void cy_start(struct tty_struct *tty)
cy_readb(base_addr + (CySRER << index)) | CyTxRdy);
CY_UNLOCK(info, flags);
} else {
- // Nothing to do!
+ /* Nothing to do! */
}
-
- return;
} /* cy_start */
static void cy_flush_buffer(struct tty_struct *tty)
for (i = 0; i < NR_ISA_ADDRS; i++) {
unsigned int isa_address = cy_isa_addresses[i];
if (isa_address == 0x0000) {
- return (nboard);
+ return nboard;
}
/* probe for CD1400... */
printk("but no more channels are available.\n");
printk("Change NR_PORTS in cyclades.c and recompile "
"kernel.\n");
- return (nboard);
+ return nboard;
}
/* fill the next cy_card structure available */
for (j = 0; j < NR_CARDS; j++) {
printk("but no more cards can be used .\n");
printk("Change NR_CARDS in cyclades.c and recompile "
"kernel.\n");
- return (nboard);
+ return nboard;
}
/* allocate IRQ */
printk("Cyclom-Y/ISA found at 0x%lx ",
(unsigned long)cy_isa_address);
printk("but could not allocate IRQ#%d.\n", cy_isa_irq);
- return (nboard);
+ return nboard;
}
/* set cy_card */
cy_isa_nchan, cy_next_channel);
cy_next_channel += cy_isa_nchan;
}
- return (nboard);
+ return nboard;
#else
- return (0);
+ return 0;
#endif /* CONFIG_ISA */
} /* cy_detect_isa */
printk("but no channels are available.\n");
printk("Change NR_PORTS in cyclades.c and "
"recompile kernel.\n");
- return (i);
+ return i;
}
/* fill the next cy_card structure available */
for (j = 0; j < NR_CARDS; j++) {
printk("but no more cards can be used.\n");
printk("Change NR_CARDS in cyclades.c and "
"recompile kernel.\n");
- return (i);
+ return i;
}
/* allocate IRQ */
(ulong) cy_pci_phys2);
printk("but could not allocate IRQ%d.\n",
cy_pci_irq);
- return (i);
+ return i;
}
/* set cy_card */
cy_writel(&((struct RUNTIME_9060 *)
(cy_pci_addr0))->loc_addr_base,
WIN_CREG);
- PAUSE
+ PAUSE;
printk("Cyclades-8Zo/PCI: FPGA id %lx, ver "
"%lx\n", (ulong) (0xff &
cy_readl(&((struct CUSTOM_REG *)
ensures that the driver will not attempt to talk to
the board until it has been properly initialized.
*/
- PAUSE
+ PAUSE;
if ((mailbox == ZO_V1) || (mailbox == ZO_V2))
cy_writel(cy_pci_addr2 + ID_ADDRESS, 0L);
"no channels are available.\nChange "
"NR_PORTS in cyclades.c and recompile "
"kernel.\n", (ulong)cy_pci_phys2);
- return (i);
+ return i;
}
/* fill the next cy_card structure available */
"no more cards can be used.\nChange "
"NR_CARDS in cyclades.c and recompile "
"kernel.\n", (ulong)cy_pci_phys2);
- return (i);
+ return i;
}
#ifdef CONFIG_CYZ_INTR
/* allocate IRQ only if board has an IRQ */
"but could not allocate "
"IRQ%d.\n", (ulong)cy_pci_phys2,
cy_pci_irq);
- return (i);
+ return i;
}
}
#endif /* CONFIG_CYZ_INTR */
printk("Cyclades-Z/PCI: New Cyclades-Z board. FPGA not "
"loaded\n");
#endif
- PAUSE
+ PAUSE;
/* This must be the new Cyclades-Ze/PCI. */
cy_pci_nchan = ZE_V1_NPORTS;
"are available.\nChange NR_PORTS in cyclades.c "
"and recompile kernel.\n",
(ulong) cy_pci_phys2);
- return (i);
+ return i;
}
/* fill the next cy_card structure available */
"cards can be used.\nChange NR_CARDS in "
"cyclades.c and recompile kernel.\n",
(ulong) cy_pci_phys2);
- return (i);
+ return i;
}
#ifdef CONFIG_CYZ_INTR
/* allocate IRQ only if board has an IRQ */
(ulong) cy_pci_phys2);
printk("but could not allocate IRQ%d.\n",
cy_pci_irq);
- return (i);
+ return i;
}
}
#endif /* CONFIG_CYZ_INTR */
"used.\nChange NR_CARDS in cyclades.c and recompile "
"kernel.\n", (unsigned int)Ze_phys2[0]);
}
- return (i);
+ return i;
#else
- return (0);
+ return 0;
#endif /* ifdef CONFIG_PCI */
} /* cy_detect_pci */
*/
static inline void show_version(void)
{
- char *rcsvers, *rcsdate, *tmp;
- rcsvers = strchr(rcsid, ' ');
- rcsvers++;
- tmp = strchr(rcsvers, ' ');
- *tmp++ = '\0';
- rcsdate = strchr(tmp, ' ');
- rcsdate++;
- tmp = strrchr(rcsdate, ' ');
- *tmp = '\0';
- printk("Cyclades driver %s %s\n", rcsvers, rcsdate);
+ printk("Cyclades driver " CY_VERSION "\n");
printk(" built %s %s\n", __DATE__, __TIME__);
} /* show_version */
if (info->count)
size = sprintf(buf + len, "%3d %8lu %10lu %8lu %10lu "
"%8lu %9lu %6ld\n", info->line,
- JIFFIES_DIFF(info->idle_stats.in_use,
- cur_jifs) / HZ,
+ (cur_jifs - info->idle_stats.in_use) / HZ,
info->idle_stats.xmit_bytes,
- JIFFIES_DIFF(info->idle_stats.xmit_idle,
- cur_jifs) / HZ,
+ (cur_jifs - info->idle_stats.xmit_idle) / HZ,
info->idle_stats.recv_bytes,
- JIFFIES_DIFF(info->idle_stats.recv_idle,
- cur_jifs) / HZ,
+ (cur_jifs - info->idle_stats.recv_idle) / HZ,
info->idle_stats.overruns,
(long)info->tty->ldisc.num);
else