Lines Matching refs:port

45 #define get_msci(port)	  (phy_node(port) ?   MSCI1_OFFSET :   MSCI0_OFFSET)  argument
46 #define get_dmac_rx(port) (phy_node(port) ? DMAC1RX_OFFSET : DMAC0RX_OFFSET) argument
47 #define get_dmac_tx(port) (phy_node(port) ? DMAC1TX_OFFSET : DMAC0TX_OFFSET) argument
54 static inline struct net_device *port_to_dev(port_t *port) in port_to_dev() argument
56 return port->dev; in port_to_dev()
87 static inline u16 next_desc(port_t *port, u16 desc, int transmit) in next_desc() argument
89 return (desc + 1) % (transmit ? port_to_card(port)->tx_ring_buffers in next_desc()
90 : port_to_card(port)->rx_ring_buffers); in next_desc()
94 static inline u16 desc_abs_number(port_t *port, u16 desc, int transmit) in desc_abs_number() argument
96 u16 rx_buffs = port_to_card(port)->rx_ring_buffers; in desc_abs_number()
97 u16 tx_buffs = port_to_card(port)->tx_ring_buffers; in desc_abs_number()
100 return log_node(port) * (rx_buffs + tx_buffs) + in desc_abs_number()
105 static inline u16 desc_offset(port_t *port, u16 desc, int transmit) in desc_offset() argument
108 return desc_abs_number(port, desc, transmit) * sizeof(pkt_desc); in desc_offset()
112 static inline pkt_desc __iomem *desc_address(port_t *port, u16 desc, in desc_address() argument
116 return (pkt_desc __iomem *)(win0base(port_to_card(port)) in desc_address()
117 + desc_offset(port, desc, transmit)); in desc_address()
119 return (pkt_desc __iomem *)(winbase(port_to_card(port)) in desc_address()
120 + desc_offset(port, desc, transmit)); in desc_address()
125 static inline u32 buffer_offset(port_t *port, u16 desc, int transmit) in buffer_offset() argument
127 return port_to_card(port)->buff_offset + in buffer_offset()
128 desc_abs_number(port, desc, transmit) * (u32)HDLC_MAX_MRU; in buffer_offset()
132 static inline void sca_set_carrier(port_t *port) in sca_set_carrier() argument
134 if (!(sca_in(get_msci(port) + ST3, port_to_card(port)) & ST3_DCD)) { in sca_set_carrier()
137 port_to_dev(port)->name); in sca_set_carrier()
139 netif_carrier_on(port_to_dev(port)); in sca_set_carrier()
143 port_to_dev(port)->name); in sca_set_carrier()
145 netif_carrier_off(port_to_dev(port)); in sca_set_carrier()
150 static void sca_init_port(port_t *port) in sca_init_port() argument
152 card_t *card = port_to_card(port); in sca_init_port()
155 port->rxin = 0; in sca_init_port()
156 port->txin = 0; in sca_init_port()
157 port->txlast = 0; in sca_init_port()
164 u16 dmac = transmit ? get_dmac_tx(port) : get_dmac_rx(port); in sca_init_port()
169 pkt_desc __iomem *desc = desc_address(port, i, transmit); in sca_init_port()
170 u16 chain_off = desc_offset(port, i + 1, transmit); in sca_init_port()
171 u32 buff_off = buffer_offset(port, i, transmit); in sca_init_port()
180 sca_out(0, transmit ? DSR_TX(phy_node(port)) : in sca_init_port()
181 DSR_RX(phy_node(port)), card); in sca_init_port()
183 sca_out(DCR_ABORT, transmit ? DCR_TX(phy_node(port)) : in sca_init_port()
184 DCR_RX(phy_node(port)), card); in sca_init_port()
188 sca_outw(desc_offset(port, 0, transmit), dmac + CDAL, card); in sca_init_port()
190 sca_outw(desc_offset(port, buffs - 1, transmit), in sca_init_port()
193 sca_outw(desc_offset(port, 0, transmit), dmac + EDAL, in sca_init_port()
197 sca_out(DCR_CLEAR_EOF, transmit ? DCR_TX(phy_node(port)) : in sca_init_port()
198 DCR_RX(phy_node(port)), card); in sca_init_port()
204 sca_out(0x14, DMR_RX(phy_node(port)), card); in sca_init_port()
205 sca_out(DIR_EOME | DIR_BOFE, DIR_RX(phy_node(port)), in sca_init_port()
208 sca_out(DSR_DE, DSR_RX(phy_node(port)), card); in sca_init_port()
211 sca_out(0x14, DMR_TX(phy_node(port)), card); in sca_init_port()
213 sca_out(DIR_BOFE, DIR_TX(phy_node(port)), card); in sca_init_port()
216 sca_set_carrier(port); in sca_init_port()
222 static inline void sca_msci_intr(port_t *port) in sca_msci_intr() argument
224 u16 msci = get_msci(port); in sca_msci_intr()
225 card_t* card = port_to_card(port); in sca_msci_intr()
233 port_to_dev(port)->stats.tx_errors++; in sca_msci_intr()
234 port_to_dev(port)->stats.tx_fifo_errors++; in sca_msci_intr()
238 sca_set_carrier(port); in sca_msci_intr()
243 static inline void sca_rx(card_t *card, port_t *port, pkt_desc __iomem *desc, in sca_rx() argument
246 struct net_device *dev = port_to_dev(port); in sca_rx()
260 buff = buffer_offset(port, rxin, 0); in sca_rx()
290 static inline void sca_rx_intr(port_t *port) in sca_rx_intr() argument
292 struct net_device *dev = port_to_dev(port); in sca_rx_intr()
293 u16 dmac = get_dmac_rx(port); in sca_rx_intr()
294 card_t *card = port_to_card(port); in sca_rx_intr()
295 u8 stat = sca_in(DSR_RX(phy_node(port)), card); /* read DMA Status */ in sca_rx_intr()
299 DSR_RX(phy_node(port)), card); in sca_rx_intr()
306 u32 desc_off = desc_offset(port, port->rxin, 0); in sca_rx_intr()
313 desc = desc_address(port, port->rxin, 0); in sca_rx_intr()
316 port->rxpart = 1; /* partial frame received */ in sca_rx_intr()
317 else if ((stat & ST_ERROR_MASK) || port->rxpart) { in sca_rx_intr()
322 ST_RX_RESBIT)) || port->rxpart) in sca_rx_intr()
327 port->rxpart = 0; /* received last fragment */ in sca_rx_intr()
329 sca_rx(card, port, desc, port->rxin); in sca_rx_intr()
333 port->rxin = next_desc(port, port->rxin, 0); in sca_rx_intr()
337 sca_out(DSR_DE, DSR_RX(phy_node(port)), card); in sca_rx_intr()
342 static inline void sca_tx_intr(port_t *port) in sca_tx_intr() argument
344 struct net_device *dev = port_to_dev(port); in sca_tx_intr()
345 u16 dmac = get_dmac_tx(port); in sca_tx_intr()
346 card_t* card = port_to_card(port); in sca_tx_intr()
349 spin_lock(&port->lock); in sca_tx_intr()
351 stat = sca_in(DSR_TX(phy_node(port)), card); /* read DMA Status */ in sca_tx_intr()
355 DSR_TX(phy_node(port)), card); in sca_tx_intr()
360 u32 desc_off = desc_offset(port, port->txlast, 1); in sca_tx_intr()
365 desc = desc_address(port, port->txlast, 1); in sca_tx_intr()
369 port->txlast = next_desc(port, port->txlast, 1); in sca_tx_intr()
373 spin_unlock(&port->lock); in sca_tx_intr()
388 port_t *port = get_port(card, i); in sca_intr() local
389 if (port) { in sca_intr()
391 sca_msci_intr(port); in sca_intr()
394 sca_rx_intr(port); in sca_intr()
397 sca_tx_intr(port); in sca_intr()
407 static void sca_set_port(port_t *port) in sca_set_port() argument
409 card_t* card = port_to_card(port); in sca_set_port()
410 u16 msci = get_msci(port); in sca_set_port()
415 if (port->settings.clock_rate > 0) { in sca_set_port()
422 tmc = CLOCK_BASE / brv / port->settings.clock_rate; in sca_set_port()
432 port->settings.clock_rate = CLOCK_BASE / brv / tmc; in sca_set_port()
436 port->settings.clock_rate = CLOCK_BASE / (256 * 512); in sca_set_port()
439 port->rxs = (port->rxs & ~CLK_BRG_MASK) | br; in sca_set_port()
440 port->txs = (port->txs & ~CLK_BRG_MASK) | br; in sca_set_port()
441 port->tmc = tmc; in sca_set_port()
444 sca_out(port->tmc, msci + TMC, card); in sca_set_port()
447 sca_out(port->rxs, msci + RXS, card); in sca_set_port()
448 sca_out(port->txs, msci + TXS, card); in sca_set_port()
450 if (port->settings.loopback) in sca_set_port()
462 port_t *port = dev_to_port(dev); in sca_open() local
463 card_t* card = port_to_card(port); in sca_open()
464 u16 msci = get_msci(port); in sca_open()
467 switch(port->encoding) { in sca_open()
475 if (port->settings.loopback) in sca_open()
478 switch(port->parity) { in sca_open()
503 sca_set_carrier(port); in sca_open()
508 sca_out(sca_in(IER0, card) | (phy_node(port) ? 0xC0 : 0x0C), in sca_open()
511 sca_out(sca_in(IER1, card) | (phy_node(port) ? 0xF0 : 0x0F), in sca_open()
514 sca_out(port->tmc, msci + TMC, card); /* Restore registers */ in sca_open()
515 sca_out(port->rxs, msci + RXS, card); in sca_open()
516 sca_out(port->txs, msci + TXS, card); in sca_open()
526 port_t *port = dev_to_port(dev); in sca_close() local
527 card_t* card = port_to_card(port); in sca_close()
530 sca_out(CMD_RESET, get_msci(port) + CMD, port_to_card(port)); in sca_close()
532 sca_out(sca_in(IER0, card) & (phy_node(port) ? 0x0F : 0xF0), in sca_close()
535 sca_out(sca_in(IER1, card) & (phy_node(port) ? 0x0F : 0xF0), in sca_close()
568 port_t *port = dev_to_port(dev); in sca_dump_rings() local
569 card_t *card = port_to_card(port); in sca_dump_rings()
578 sca_inw(get_dmac_rx(port) + CDAL, card), in sca_dump_rings()
579 sca_inw(get_dmac_rx(port) + EDAL, card), in sca_dump_rings()
580 sca_in(DSR_RX(phy_node(port)), card), port->rxin, in sca_dump_rings()
581 sca_in(DSR_RX(phy_node(port)), card) & DSR_DE ? "" : "in"); in sca_dump_rings()
582 for (cnt = 0; cnt < port_to_card(port)->rx_ring_buffers; cnt++) in sca_dump_rings()
583 pr_cont(" %02X", readb(&(desc_address(port, cnt, 0)->stat))); in sca_dump_rings()
588 sca_inw(get_dmac_tx(port) + CDAL, card), in sca_dump_rings()
589 sca_inw(get_dmac_tx(port) + EDAL, card), in sca_dump_rings()
590 sca_in(DSR_TX(phy_node(port)), card), port->txin, port->txlast, in sca_dump_rings()
591 sca_in(DSR_TX(phy_node(port)), card) & DSR_DE ? "" : "in"); in sca_dump_rings()
593 for (cnt = 0; cnt < port_to_card(port)->tx_ring_buffers; cnt++) in sca_dump_rings()
594 pr_cont(" %02X", readb(&(desc_address(port, cnt, 1)->stat))); in sca_dump_rings()
599 sca_in(get_msci(port) + MD0, card), in sca_dump_rings()
600 sca_in(get_msci(port) + MD1, card), in sca_dump_rings()
601 sca_in(get_msci(port) + MD2, card), in sca_dump_rings()
602 sca_in(get_msci(port) + ST0, card), in sca_dump_rings()
603 sca_in(get_msci(port) + ST1, card), in sca_dump_rings()
604 sca_in(get_msci(port) + ST2, card), in sca_dump_rings()
605 sca_in(get_msci(port) + ST3, card), in sca_dump_rings()
606 sca_in(get_msci(port) + FST, card), in sca_dump_rings()
607 sca_in(get_msci(port) + CST0, card), in sca_dump_rings()
608 sca_in(get_msci(port) + CST1, card)); in sca_dump_rings()
622 port_t *port = dev_to_port(dev); in sca_xmit() local
623 card_t *card = port_to_card(port); in sca_xmit()
629 spin_lock_irq(&port->lock); in sca_xmit()
631 desc = desc_address(port, port->txin + 1, 1); in sca_xmit()
639 desc = desc_address(port, port->txin, 1); in sca_xmit()
640 buff = buffer_offset(port, port->txin, 1); in sca_xmit()
660 port->txin = next_desc(port, port->txin, 1); in sca_xmit()
661 sca_outw(desc_offset(port, port->txin, 1), in sca_xmit()
662 get_dmac_tx(port) + EDAL, card); in sca_xmit()
664 sca_out(DSR_DE, DSR_TX(phy_node(port)), card); /* Enable TX DMA */ in sca_xmit()
666 desc = desc_address(port, port->txin + 1, 1); in sca_xmit()
670 spin_unlock_irq(&port->lock); in sca_xmit()