17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19 #include <linux/module.h>
20 #include <linux/kernel.h>
21 #include <linux/capability.h>
22 #include <linux/slab.h>
23 #include <linux/types.h>
24 #include <linux/fcntl.h>
26 #include <linux/string.h>
27 #include <linux/errno.h>
31 #include <linux/netdevice.h>
32 #include <linux/hdlc.h>
33 #include <linux/pci.h>
42 #define PCI200SYN_PLX_SIZE 0x80
43 #define PCI200SYN_SCA_SIZE 0x400
44 #define MAX_TX_BUFFERS 10
46 static int pci_clock_freq = 33000000;
47 #define CLOCK_BASE pci_clock_freq
54 u32 loc_addr_range[4];
98 #define get_port(card, port) (&card->ports[port])
99 #define sca_flush(card) (sca_in(IER0, card));
105 len = length > 256 ? 256 :
length;
115 #define memcpy_toio new_memcpy_toio
169 pci200_set_iface(port);
176 static int pci200_close(
struct net_device *dev)
202 switch(ifr->ifr_settings.type) {
205 if (ifr->ifr_settings.size < size) {
206 ifr->ifr_settings.size =
size;
230 memcpy(&port->settings, &new_line, size);
231 pci200_set_iface(port);
242 static void pci200_pci_remove_one(
struct pci_dev *pdev)
247 for (i = 0; i < 2; i++)
263 pci_set_drvdata(pdev,
NULL);
264 if (card->
ports[0].netdev)
266 if (card->
ports[1].netdev)
272 .ndo_open = pci200_open,
273 .ndo_stop = pci200_close,
276 .ndo_do_ioctl = pci200_ioctl,
306 pci_set_drvdata(pdev, card);
309 if (!card->
ports[0].netdev || !card->
ports[1].netdev) {
310 pr_err(
"unable to allocate memory\n");
311 pci200_pci_remove_one(pdev);
318 pr_err(
"invalid card EEPROM parameters\n");
319 pci200_pci_remove_one(pdev);
332 if (card->plxbase ==
NULL ||
333 card->scabase ==
NULL ||
334 card->rambase ==
NULL) {
335 pr_err(
"ioremap() failed\n");
336 pci200_pci_remove_one(pdev);
341 p = &card->plxbase->init_ctrl;
350 ramsize = sca_detect_ram(card, card->rambase,
356 card->rx_ring_buffers = i - card->tx_ring_buffers;
358 card->buff_offset = 2 *
sizeof(
pkt_desc) * (card->tx_ring_buffers +
359 card->rx_ring_buffers);
361 pr_info(
"%u KB RAM at 0x%x, IRQ%u, using %u TX + %u RX packets rings\n",
362 ramsize / 1024, ramphys,
363 pdev->
irq, card->tx_ring_buffers, card->rx_ring_buffers);
365 if (card->tx_ring_buffers < 1) {
366 pr_err(
"RAM test failed\n");
367 pci200_pci_remove_one(pdev);
372 p = &card->plxbase->intr_ctrl_stat;
377 pr_warn(
"could not allocate IRQ%d\n", pdev->
irq);
378 pci200_pci_remove_one(pdev);
385 for (i = 0; i < 2; i++) {
394 dev->
mem_end = ramphys + ramsize - 1;
397 hdlc->
attach = sca_attach;
398 hdlc->
xmit = sca_xmit;
403 pr_err(
"unable to register hdlc device\n");
405 pci200_pci_remove_one(pdev);
409 netdev_info(dev,
"PCI200SYN channel %d\n", port->chan);
425 static struct pci_driver pci200_pci_driver = {
427 .id_table = pci200_pci_tbl,
428 .probe = pci200_pci_init_one,
429 .remove = pci200_pci_remove_one,
433 static int __init pci200_init_module(
void)
435 if (pci_clock_freq < 1000000 || pci_clock_freq > 80000000) {
436 pr_err(
"Invalid PCI clock frequency\n");
439 return pci_register_driver(&pci200_pci_driver);
444 static void __exit pci200_cleanup_module(
void)