Lines Matching full:card

3  * Cyclades PC300 synchronous serial card driver for Linux
55 enum { PC300_RSV = 1, PC300_X21, PC300_TE }; /* card types */
75 struct card_s *card; member
104 #define get_port(card, port) ((port) < (card)->n_ports ? \ argument
105 (&(card)->ports[port]) : (NULL))
111 card_t *card = port->card; in pc300_set_iface() local
112 u32 __iomem *init_ctrl = &card->plxbase->init_ctrl; in pc300_set_iface()
118 port->card); in pc300_set_iface()
143 sca_out(rxs, msci + RXS, card); in pc300_set_iface()
144 sca_out(txs, msci + TXS, card); in pc300_set_iface()
147 if (port->card->type == PC300_RSV) { in pc300_set_iface()
149 writel(card->init_ctrl_value | in pc300_set_iface()
152 writel(card->init_ctrl_value & in pc300_set_iface()
208 if (port->card->type == PC300_X21 && in pc300_ioctl()
213 else if (port->card->type == PC300_RSV && in pc300_ioctl()
218 else if (port->card->type == PC300_RSV && in pc300_ioctl()
249 card_t *card = pci_get_drvdata(pdev); in pc300_pci_remove_one() local
252 if (card->ports[i].card) in pc300_pci_remove_one()
253 unregister_hdlc_device(card->ports[i].netdev); in pc300_pci_remove_one()
255 if (card->irq) in pc300_pci_remove_one()
256 free_irq(card->irq, card); in pc300_pci_remove_one()
258 if (card->rambase) in pc300_pci_remove_one()
259 iounmap(card->rambase); in pc300_pci_remove_one()
260 if (card->scabase) in pc300_pci_remove_one()
261 iounmap(card->scabase); in pc300_pci_remove_one()
262 if (card->plxbase) in pc300_pci_remove_one()
263 iounmap(card->plxbase); in pc300_pci_remove_one()
267 if (card->ports[0].netdev) in pc300_pci_remove_one()
268 free_netdev(card->ports[0].netdev); in pc300_pci_remove_one()
269 if (card->ports[1].netdev) in pc300_pci_remove_one()
270 free_netdev(card->ports[1].netdev); in pc300_pci_remove_one()
271 kfree(card); in pc300_pci_remove_one()
285 card_t *card; in pc300_pci_init_one() local
303 card = kzalloc(sizeof(card_t), GFP_KERNEL); in pc300_pci_init_one()
304 if (!card) { in pc300_pci_init_one()
309 pci_set_drvdata(pdev, card); in pc300_pci_init_one()
314 pr_err("invalid card EEPROM parameters\n"); in pc300_pci_init_one()
320 card->plxbase = ioremap(plxphys, PC300_PLX_SIZE); in pc300_pci_init_one()
323 card->scabase = ioremap(scaphys, PC300_SCA_SIZE); in pc300_pci_init_one()
326 card->rambase = pci_ioremap_bar(pdev, 3); in pc300_pci_init_one()
328 if (!card->plxbase || !card->scabase || !card->rambase) { in pc300_pci_init_one()
336 card->init_ctrl_value = readl(&((plx9050 __iomem *)card->scabase)->init_ctrl); in pc300_pci_init_one()
341 card->type = PC300_TE; /* not fully supported */ in pc300_pci_init_one()
342 else if (card->init_ctrl_value & PC300_CTYPE_MASK) in pc300_pci_init_one()
343 card->type = PC300_X21; in pc300_pci_init_one()
345 card->type = PC300_RSV; in pc300_pci_init_one()
349 card->n_ports = 1; in pc300_pci_init_one()
351 card->n_ports = 2; in pc300_pci_init_one()
353 for (i = 0; i < card->n_ports; i++) { in pc300_pci_init_one()
354 card->ports[i].netdev = alloc_hdlcdev(&card->ports[i]); in pc300_pci_init_one()
355 if (!card->ports[i].netdev) { in pc300_pci_init_one()
363 p = &card->plxbase->init_ctrl; in pc300_pci_init_one()
364 writel(card->init_ctrl_value | 0x40000000, p); in pc300_pci_init_one()
368 writel(card->init_ctrl_value, p); in pc300_pci_init_one()
373 writel(card->init_ctrl_value | 0x20000000, p); in pc300_pci_init_one()
377 writel(card->init_ctrl_value, p); in pc300_pci_init_one()
381 ramsize = sca_detect_ram(card, card->rambase, in pc300_pci_init_one()
385 card->init_ctrl_value &= ~PC300_CLKSEL_MASK; in pc300_pci_init_one()
387 card->init_ctrl_value |= PC300_CLKSEL_MASK; in pc300_pci_init_one()
389 writel(card->init_ctrl_value, &card->plxbase->init_ctrl); in pc300_pci_init_one()
391 i = ramsize / (card->n_ports * (sizeof(pkt_desc) + HDLC_MAX_MRU)); in pc300_pci_init_one()
392 card->tx_ring_buffers = min(i / 2, MAX_TX_BUFFERS); in pc300_pci_init_one()
393 card->rx_ring_buffers = i - card->tx_ring_buffers; in pc300_pci_init_one()
395 card->buff_offset = card->n_ports * sizeof(pkt_desc) * in pc300_pci_init_one()
396 (card->tx_ring_buffers + card->rx_ring_buffers); in pc300_pci_init_one()
399 card->type == PC300_X21 ? "X21" : in pc300_pci_init_one()
400 card->type == PC300_TE ? "TE" : "RSV", in pc300_pci_init_one()
402 card->tx_ring_buffers, card->rx_ring_buffers); in pc300_pci_init_one()
404 if (card->tx_ring_buffers < 1) { in pc300_pci_init_one()
411 writew(0x0041, &card->plxbase->intr_ctrl_stat); in pc300_pci_init_one()
414 if (request_irq(pdev->irq, sca_intr, IRQF_SHARED, "pc300", card)) { in pc300_pci_init_one()
419 card->irq = pdev->irq; in pc300_pci_init_one()
421 sca_init(card, 0); in pc300_pci_init_one()
424 // sca_out(sca_in(PCR, card) | PCR_COTE, PCR, card); in pc300_pci_init_one()
426 sca_out(0x10, BTCR, card); in pc300_pci_init_one()
428 for (i = 0; i < card->n_ports; i++) { in pc300_pci_init_one()
429 port_t *port = &card->ports[i]; in pc300_pci_init_one()
436 dev->irq = card->irq; in pc300_pci_init_one()
444 port->card = card; in pc300_pci_init_one()
445 if (card->type == PC300_X21) in pc300_pci_init_one()
453 port->card = NULL; in pc300_pci_init_one()