Lines Matching refs:port

168 struct port {  struct
235 #define rx_desc_phys(port, n) ((port)->desc_tab_phys + \ argument
237 #define rx_desc_ptr(port, n) (&(port)->desc_tab[n]) argument
239 #define tx_desc_phys(port, n) ((port)->desc_tab_phys + \ argument
241 #define tx_desc_ptr(port, n) (&(port)->desc_tab[(n) + RX_DESCS]) argument
256 static struct port *npe_port_tab[MAX_NPES];
284 static void ixp_rx_timestamp(struct port *port, struct sk_buff *skb) in ixp_rx_timestamp() argument
292 if (!port->hwts_rx_en) in ixp_rx_timestamp()
295 ch = PORT2CHANNEL(port); in ixp_rx_timestamp()
326 static void ixp_tx_timestamp(struct port *port, struct sk_buff *skb) in ixp_tx_timestamp() argument
335 if (unlikely(shtx->tx_flags & SKBTX_HW_TSTAMP && port->hwts_tx_en)) in ixp_tx_timestamp()
340 ch = PORT2CHANNEL(port); in ixp_tx_timestamp()
376 struct port *port = netdev_priv(netdev); in hwtstamp_set() local
385 ch = PORT2CHANNEL(port); in hwtstamp_set()
393 port->hwts_rx_en = 0; in hwtstamp_set()
396 port->hwts_rx_en = PTP_SLAVE_MODE; in hwtstamp_set()
400 port->hwts_rx_en = PTP_MASTER_MODE; in hwtstamp_set()
407 port->hwts_tx_en = cfg.tx_type == HWTSTAMP_TX_ON; in hwtstamp_set()
419 struct port *port = netdev_priv(netdev); in hwtstamp_get() local
422 cfg.tx_type = port->hwts_tx_en ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF; in hwtstamp_get()
424 switch (port->hwts_rx_en) { in hwtstamp_get()
564 struct port *port = netdev_priv(dev); in ixp4xx_adjust_link() local
565 struct phy_device *phydev = port->phydev; in ixp4xx_adjust_link()
568 if (port->speed) { in ixp4xx_adjust_link()
569 port->speed = 0; in ixp4xx_adjust_link()
575 if (port->speed == phydev->speed && port->duplex == phydev->duplex) in ixp4xx_adjust_link()
578 port->speed = phydev->speed; in ixp4xx_adjust_link()
579 port->duplex = phydev->duplex; in ixp4xx_adjust_link()
581 if (port->duplex) in ixp4xx_adjust_link()
583 &port->regs->tx_control[0]); in ixp4xx_adjust_link()
586 &port->regs->tx_control[0]); in ixp4xx_adjust_link()
589 dev->name, port->speed, port->duplex ? "full" : "half"); in ixp4xx_adjust_link()
627 static inline int queue_get_desc(unsigned int queue, struct port *port, in queue_get_desc() argument
637 tab_phys = is_tx ? tx_desc_phys(port, 0) : rx_desc_phys(port, 0); in queue_get_desc()
638 tab = is_tx ? tx_desc_ptr(port, 0) : rx_desc_ptr(port, 0); in queue_get_desc()
657 static inline void dma_unmap_tx(struct port *port, struct desc *desc) in dma_unmap_tx() argument
660 dma_unmap_single(&port->netdev->dev, desc->data, in dma_unmap_tx()
663 dma_unmap_single(&port->netdev->dev, desc->data & ~3, in dma_unmap_tx()
673 struct port *port = netdev_priv(dev); in eth_rx_irq() local
678 qmgr_disable_irq(port->plat->rxq); in eth_rx_irq()
679 napi_schedule(&port->napi); in eth_rx_irq()
684 struct port *port = container_of(napi, struct port, napi); in eth_poll() local
685 struct net_device *dev = port->netdev; in eth_poll()
686 unsigned int rxq = port->plat->rxq, rxfreeq = RXFREE_QUEUE(port->id); in eth_poll()
702 if ((n = queue_get_desc(rxq, port, 0)) < 0) { in eth_poll()
726 desc = rx_desc_ptr(port, n); in eth_poll()
747 queue_put_desc(rxfreeq, rx_desc_phys(port, n), desc); in eth_poll()
754 skb = port->rx_buff_tab[n]; in eth_poll()
760 memcpy_swab32((u32 *)skb->data, (u32 *)port->rx_buff_tab[n], in eth_poll()
768 ixp_rx_timestamp(port, skb); in eth_poll()
776 port->rx_buff_tab[n] = temp; in eth_poll()
781 queue_put_desc(rxfreeq, rx_desc_phys(port, n), desc); in eth_poll()
801 struct port *port; in eth_txdone_irq() local
807 port = npe_port_tab[npe_id]; in eth_txdone_irq()
808 BUG_ON(!port); in eth_txdone_irq()
810 n_desc = (phys - tx_desc_phys(port, 0)) / sizeof(struct desc); in eth_txdone_irq()
812 desc = tx_desc_ptr(port, n_desc); in eth_txdone_irq()
815 if (port->tx_buff_tab[n_desc]) { /* not the draining packet */ in eth_txdone_irq()
816 port->netdev->stats.tx_packets++; in eth_txdone_irq()
817 port->netdev->stats.tx_bytes += desc->pkt_len; in eth_txdone_irq()
819 dma_unmap_tx(port, desc); in eth_txdone_irq()
822 port->netdev->name, port->tx_buff_tab[n_desc]); in eth_txdone_irq()
824 free_buffer_irq(port->tx_buff_tab[n_desc]); in eth_txdone_irq()
825 port->tx_buff_tab[n_desc] = NULL; in eth_txdone_irq()
828 start = qmgr_stat_below_low_watermark(port->plat->txreadyq); in eth_txdone_irq()
829 queue_put_desc(port->plat->txreadyq, phys, desc); in eth_txdone_irq()
833 port->netdev->name); in eth_txdone_irq()
835 netif_wake_queue(port->netdev); in eth_txdone_irq()
842 struct port *port = netdev_priv(dev); in eth_xmit() local
843 unsigned int txreadyq = port->plat->txreadyq; in eth_xmit()
887 n = queue_get_desc(txreadyq, port, 1); in eth_xmit()
889 desc = tx_desc_ptr(port, n); in eth_xmit()
892 port->tx_buff_tab[n] = skb; in eth_xmit()
894 port->tx_buff_tab[n] = mem; in eth_xmit()
901 queue_put_desc(TX_QUEUE(port->id), tx_desc_phys(port, n), desc); in eth_xmit()
923 ixp_tx_timestamp(port, skb); in eth_xmit()
935 struct port *port = netdev_priv(dev); in eth_set_mcast_list() local
943 __raw_writel(allmulti[i], &port->regs->mcast_addr[i]); in eth_set_mcast_list()
944 __raw_writel(allmulti[i], &port->regs->mcast_mask[i]); in eth_set_mcast_list()
947 &port->regs->rx_control[0]); in eth_set_mcast_list()
953 &port->regs->rx_control[0]); in eth_set_mcast_list()
968 __raw_writel(addr[i], &port->regs->mcast_addr[i]); in eth_set_mcast_list()
969 __raw_writel(~diffs[i], &port->regs->mcast_mask[i]); in eth_set_mcast_list()
973 &port->regs->rx_control[0]); in eth_set_mcast_list()
979 struct port *port = netdev_priv(dev); in eth_ioctl() local
991 return phy_mii_ioctl(port->phydev, req, cmd); in eth_ioctl()
999 struct port *port = netdev_priv(dev); in ixp4xx_get_drvinfo() local
1003 port->firmware[0], port->firmware[1], in ixp4xx_get_drvinfo()
1004 port->firmware[2], port->firmware[3]); in ixp4xx_get_drvinfo()
1010 struct port *port = netdev_priv(dev); in ixp4xx_get_settings() local
1011 return phy_ethtool_gset(port->phydev, cmd); in ixp4xx_get_settings()
1016 struct port *port = netdev_priv(dev); in ixp4xx_set_settings() local
1017 return phy_ethtool_sset(port->phydev, cmd); in ixp4xx_set_settings()
1022 struct port *port = netdev_priv(dev); in ixp4xx_nway_reset() local
1023 return phy_start_aneg(port->phydev); in ixp4xx_nway_reset()
1065 static int request_queues(struct port *port) in request_queues() argument
1069 err = qmgr_request_queue(RXFREE_QUEUE(port->id), RX_DESCS, 0, 0, in request_queues()
1070 "%s:RX-free", port->netdev->name); in request_queues()
1074 err = qmgr_request_queue(port->plat->rxq, RX_DESCS, 0, 0, in request_queues()
1075 "%s:RX", port->netdev->name); in request_queues()
1079 err = qmgr_request_queue(TX_QUEUE(port->id), TX_DESCS, 0, 0, in request_queues()
1080 "%s:TX", port->netdev->name); in request_queues()
1084 err = qmgr_request_queue(port->plat->txreadyq, TX_DESCS, 0, 0, in request_queues()
1085 "%s:TX-ready", port->netdev->name); in request_queues()
1099 qmgr_release_queue(port->plat->txreadyq); in request_queues()
1101 qmgr_release_queue(TX_QUEUE(port->id)); in request_queues()
1103 qmgr_release_queue(port->plat->rxq); in request_queues()
1105 qmgr_release_queue(RXFREE_QUEUE(port->id)); in request_queues()
1107 port->netdev->name); in request_queues()
1111 static void release_queues(struct port *port) in release_queues() argument
1113 qmgr_release_queue(RXFREE_QUEUE(port->id)); in release_queues()
1114 qmgr_release_queue(port->plat->rxq); in release_queues()
1115 qmgr_release_queue(TX_QUEUE(port->id)); in release_queues()
1116 qmgr_release_queue(port->plat->txreadyq); in release_queues()
1122 static int init_queues(struct port *port) in init_queues() argument
1127 dma_pool = dma_pool_create(DRV_NAME, &port->netdev->dev, in init_queues()
1133 if (!(port->desc_tab = dma_pool_alloc(dma_pool, GFP_KERNEL, in init_queues()
1134 &port->desc_tab_phys))) in init_queues()
1136 memset(port->desc_tab, 0, POOL_ALLOC_SIZE); in init_queues()
1137 memset(port->rx_buff_tab, 0, sizeof(port->rx_buff_tab)); /* tables */ in init_queues()
1138 memset(port->tx_buff_tab, 0, sizeof(port->tx_buff_tab)); in init_queues()
1142 struct desc *desc = rx_desc_ptr(port, i); in init_queues()
1146 if (!(buff = netdev_alloc_skb(port->netdev, RX_BUFF_SIZE))) in init_queues()
1155 desc->data = dma_map_single(&port->netdev->dev, data, in init_queues()
1157 if (dma_mapping_error(&port->netdev->dev, desc->data)) { in init_queues()
1162 port->rx_buff_tab[i] = buff; in init_queues()
1168 static void destroy_queues(struct port *port) in destroy_queues() argument
1172 if (port->desc_tab) { in destroy_queues()
1174 struct desc *desc = rx_desc_ptr(port, i); in destroy_queues()
1175 buffer_t *buff = port->rx_buff_tab[i]; in destroy_queues()
1177 dma_unmap_single(&port->netdev->dev, in destroy_queues()
1184 struct desc *desc = tx_desc_ptr(port, i); in destroy_queues()
1185 buffer_t *buff = port->tx_buff_tab[i]; in destroy_queues()
1187 dma_unmap_tx(port, desc); in destroy_queues()
1191 dma_pool_free(dma_pool, port->desc_tab, port->desc_tab_phys); in destroy_queues()
1192 port->desc_tab = NULL; in destroy_queues()
1203 struct port *port = netdev_priv(dev); in eth_open() local
1204 struct npe *npe = port->npe; in eth_open()
1218 port->firmware[0] = msg.byte4; in eth_open()
1219 port->firmware[1] = msg.byte5; in eth_open()
1220 port->firmware[2] = msg.byte6; in eth_open()
1221 port->firmware[3] = msg.byte7; in eth_open()
1226 msg.eth_id = port->id; in eth_open()
1227 msg.byte5 = port->plat->rxq | 0x80; in eth_open()
1228 msg.byte7 = port->plat->rxq << 4; in eth_open()
1231 if (npe_send_recv_message(port->npe, &msg, "ETH_SET_RXQ")) in eth_open()
1236 msg.eth_id = PHYSICAL_ID(port->id); in eth_open()
1243 if (npe_send_recv_message(port->npe, &msg, "ETH_SET_MAC")) in eth_open()
1248 msg.eth_id = port->id; in eth_open()
1249 if (npe_send_recv_message(port->npe, &msg, "ETH_SET_FIREWALL_MODE")) in eth_open()
1252 if ((err = request_queues(port)) != 0) in eth_open()
1255 if ((err = init_queues(port)) != 0) { in eth_open()
1256 destroy_queues(port); in eth_open()
1257 release_queues(port); in eth_open()
1261 port->speed = 0; /* force "link up" message */ in eth_open()
1262 phy_start(port->phydev); in eth_open()
1265 __raw_writel(dev->dev_addr[i], &port->regs->hw_addr[i]); in eth_open()
1266 __raw_writel(0x08, &port->regs->random_seed); in eth_open()
1267 __raw_writel(0x12, &port->regs->partial_empty_threshold); in eth_open()
1268 __raw_writel(0x30, &port->regs->partial_full_threshold); in eth_open()
1269 __raw_writel(0x08, &port->regs->tx_start_bytes); in eth_open()
1270 __raw_writel(0x15, &port->regs->tx_deferral); in eth_open()
1271 __raw_writel(0x08, &port->regs->tx_2part_deferral[0]); in eth_open()
1272 __raw_writel(0x07, &port->regs->tx_2part_deferral[1]); in eth_open()
1273 __raw_writel(0x80, &port->regs->slot_time); in eth_open()
1274 __raw_writel(0x01, &port->regs->int_clock_threshold); in eth_open()
1278 queue_put_desc(port->plat->txreadyq, in eth_open()
1279 tx_desc_phys(port, i), tx_desc_ptr(port, i)); in eth_open()
1282 queue_put_desc(RXFREE_QUEUE(port->id), in eth_open()
1283 rx_desc_phys(port, i), rx_desc_ptr(port, i)); in eth_open()
1285 __raw_writel(TX_CNTRL1_RETRIES, &port->regs->tx_control[1]); in eth_open()
1286 __raw_writel(DEFAULT_TX_CNTRL0, &port->regs->tx_control[0]); in eth_open()
1287 __raw_writel(0, &port->regs->rx_control[1]); in eth_open()
1288 __raw_writel(DEFAULT_RX_CNTRL0, &port->regs->rx_control[0]); in eth_open()
1290 napi_enable(&port->napi); in eth_open()
1294 qmgr_set_irq(port->plat->rxq, QUEUE_IRQ_SRC_NOT_EMPTY, in eth_open()
1303 napi_schedule(&port->napi); in eth_open()
1309 struct port *port = netdev_priv(dev); in eth_close() local
1315 qmgr_disable_irq(port->plat->rxq); in eth_close()
1316 napi_disable(&port->napi); in eth_close()
1319 while (queue_get_desc(RXFREE_QUEUE(port->id), port, 0) >= 0) in eth_close()
1324 msg.eth_id = port->id; in eth_close()
1326 if (npe_send_recv_message(port->npe, &msg, "ETH_ENABLE_LOOPBACK")) in eth_close()
1331 while (queue_get_desc(port->plat->rxq, port, 0) >= 0) in eth_close()
1335 if (qmgr_stat_empty(TX_QUEUE(port->id))) { in eth_close()
1339 int n = queue_get_desc(port->plat->txreadyq, port, 1); in eth_close()
1341 desc = tx_desc_ptr(port, n); in eth_close()
1342 phys = tx_desc_phys(port, n); in eth_close()
1345 queue_put_desc(TX_QUEUE(port->id), phys, desc); in eth_close()
1359 while (queue_get_desc(TX_QUEUE(port->id), port, 1) >= 0) in eth_close()
1364 while (queue_get_desc(port->plat->txreadyq, port, 1) >= 0) in eth_close()
1379 if (npe_send_recv_message(port->npe, &msg, "ETH_DISABLE_LOOPBACK")) in eth_close()
1383 phy_stop(port->phydev); in eth_close()
1387 destroy_queues(port); in eth_close()
1388 release_queues(port); in eth_close()
1405 struct port *port; in eth_init_one() local
1412 if (!(dev = alloc_etherdev(sizeof(struct port)))) in eth_init_one()
1416 port = netdev_priv(dev); in eth_init_one()
1417 port->netdev = dev; in eth_init_one()
1418 port->id = pdev->id; in eth_init_one()
1420 switch (port->id) { in eth_init_one()
1422 port->regs = (struct eth_regs __iomem *)IXP4XX_EthA_BASE_VIRT; in eth_init_one()
1426 port->regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT; in eth_init_one()
1430 port->regs = (struct eth_regs __iomem *)IXP4XX_EthC_BASE_VIRT; in eth_init_one()
1442 netif_napi_add(dev, &port->napi, eth_poll, NAPI_WEIGHT); in eth_init_one()
1444 if (!(port->npe = npe_request(NPE_ID(port->id)))) { in eth_init_one()
1449 port->mem_res = request_mem_region(regs_phys, REGS_SIZE, dev->name); in eth_init_one()
1450 if (!port->mem_res) { in eth_init_one()
1455 port->plat = plat; in eth_init_one()
1456 npe_port_tab[NPE_ID(port->id)] = port; in eth_init_one()
1462 &port->regs->core_control); in eth_init_one()
1464 __raw_writel(DEFAULT_CORE_CNTRL, &port->regs->core_control); in eth_init_one()
1469 port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, in eth_init_one()
1471 if (IS_ERR(port->phydev)) { in eth_init_one()
1472 err = PTR_ERR(port->phydev); in eth_init_one()
1476 port->phydev->irq = PHY_POLL; in eth_init_one()
1482 npe_name(port->npe)); in eth_init_one()
1487 phy_disconnect(port->phydev); in eth_init_one()
1489 npe_port_tab[NPE_ID(port->id)] = NULL; in eth_init_one()
1490 release_resource(port->mem_res); in eth_init_one()
1492 npe_release(port->npe); in eth_init_one()
1501 struct port *port = netdev_priv(dev); in eth_remove_one() local
1504 phy_disconnect(port->phydev); in eth_remove_one()
1505 npe_port_tab[NPE_ID(port->id)] = NULL; in eth_remove_one()
1506 npe_release(port->npe); in eth_remove_one()
1507 release_resource(port->mem_res); in eth_remove_one()