Lines Matching refs:uec

58 static int uec_mac_enable(uec_private_t *uec, comm_dir_e mode)  in uec_mac_enable()  argument
63 if (!uec) { in uec_mac_enable()
67 uec_regs = uec->uec_regs; in uec_mac_enable()
74 uec->mac_tx_enabled = 1; in uec_mac_enable()
80 uec->mac_rx_enabled = 1; in uec_mac_enable()
86 static int uec_mac_disable(uec_private_t *uec, comm_dir_e mode) in uec_mac_disable() argument
91 if (!uec) { in uec_mac_disable()
95 uec_regs = uec->uec_regs; in uec_mac_disable()
102 uec->mac_tx_enabled = 0; in uec_mac_disable()
108 uec->mac_rx_enabled = 0; in uec_mac_disable()
114 static int uec_graceful_stop_tx(uec_private_t *uec) in uec_graceful_stop_tx() argument
120 if (!uec || !uec->uccf) { in uec_graceful_stop_tx()
125 uf_regs = uec->uccf->uf_regs; in uec_graceful_stop_tx()
132 ucc_fast_get_qe_cr_subblock(uec->uec_info->uf_info.ucc_num); in uec_graceful_stop_tx()
141 uec->grace_stopped_tx = 1; in uec_graceful_stop_tx()
146 static int uec_graceful_stop_rx(uec_private_t *uec) in uec_graceful_stop_rx() argument
151 if (!uec) { in uec_graceful_stop_rx()
156 if (!uec->p_rx_glbl_pram) { in uec_graceful_stop_rx()
162 ack = uec->p_rx_glbl_pram->rxgstpack; in uec_graceful_stop_rx()
164 uec->p_rx_glbl_pram->rxgstpack = ack; in uec_graceful_stop_rx()
170 ucc_fast_get_qe_cr_subblock(uec->uec_info->uf_info.ucc_num); in uec_graceful_stop_rx()
173 ack = uec->p_rx_glbl_pram->rxgstpack; in uec_graceful_stop_rx()
176 uec->grace_stopped_rx = 1; in uec_graceful_stop_rx()
181 static int uec_restart_tx(uec_private_t *uec) in uec_restart_tx() argument
185 if (!uec || !uec->uec_info) { in uec_restart_tx()
191 ucc_fast_get_qe_cr_subblock(uec->uec_info->uf_info.ucc_num); in uec_restart_tx()
195 uec->grace_stopped_tx = 0; in uec_restart_tx()
200 static int uec_restart_rx(uec_private_t *uec) in uec_restart_rx() argument
204 if (!uec || !uec->uec_info) { in uec_restart_rx()
210 ucc_fast_get_qe_cr_subblock(uec->uec_info->uf_info.ucc_num); in uec_restart_rx()
214 uec->grace_stopped_rx = 0; in uec_restart_rx()
219 static int uec_open(uec_private_t *uec, comm_dir_e mode) in uec_open() argument
223 if (!uec || !uec->uccf) { in uec_open()
227 uccf = uec->uccf; in uec_open()
230 if (uec->uec_info->uf_info.ucc_num >= UCC_MAX_NUM) { in uec_open()
236 uec_mac_enable(uec, mode); in uec_open()
242 if ((mode & COMM_DIR_TX) && uec->grace_stopped_tx) { in uec_open()
243 uec_restart_tx(uec); in uec_open()
245 if ((mode & COMM_DIR_RX) && uec->grace_stopped_rx) { in uec_open()
246 uec_restart_rx(uec); in uec_open()
252 static int uec_stop(uec_private_t *uec, comm_dir_e mode) in uec_stop() argument
254 if (!uec || !uec->uccf) { in uec_stop()
260 if (uec->uec_info->uf_info.ucc_num >= UCC_MAX_NUM) { in uec_stop()
265 if ((mode & COMM_DIR_TX) && !uec->grace_stopped_tx) { in uec_stop()
266 uec_graceful_stop_tx(uec); in uec_stop()
269 if ((mode & COMM_DIR_RX) && !uec->grace_stopped_rx) { in uec_stop()
270 uec_graceful_stop_rx(uec); in uec_stop()
274 ucc_fast_disable(uec->uccf, mode); in uec_stop()
277 uec_mac_disable(uec, mode); in uec_stop()
282 static int uec_set_mac_duplex(uec_private_t *uec, int duplex) in uec_set_mac_duplex() argument
287 if (!uec) { in uec_set_mac_duplex()
291 uec_regs = uec->uec_regs; in uec_set_mac_duplex()
308 static int uec_set_mac_if_mode(uec_private_t *uec, in uec_set_mac_if_mode() argument
316 if (!uec) { in uec_set_mac_if_mode()
321 uec_regs = uec->uec_regs; in uec_set_mac_if_mode()
327 upsmr = in_be32(&uec->uccf->uf_regs->upsmr); in uec_set_mac_if_mode()
394 out_be32(&uec->uccf->uf_regs->upsmr, upsmr); in uec_set_mac_if_mode()
420 uec_private_t *uec; in init_phy() local
426 uec = (uec_private_t *)dev->priv; in init_phy()
427 umii_regs = uec->uec_mii_regs; in init_phy()
429 uec->oldlink = 0; in init_phy()
430 uec->oldspeed = 0; in init_phy()
431 uec->oldduplex = -1; in init_phy()
440 if (uec->uec_info->uf_info.eth_type == GIGA_ETH) { in init_phy()
456 mii_info->mii_id = uec->uec_info->phy_address; in init_phy()
462 uec->mii_info = mii_info; in init_phy()
464 qe_set_mii_clk_src(uec->uec_info->uf_info.ucc_num); in init_phy()
473 curphy = uec_get_phy_info(uec->mii_info); in init_phy()
484 err = curphy->init(uec->mii_info); in init_phy()
500 uec_private_t *uec = (uec_private_t *)dev->priv; in adjust_link() local
501 struct uec_mii_info *mii_info = uec->mii_info; in adjust_link()
509 if (mii_info->duplex != uec->oldduplex) { in adjust_link()
511 uec_set_mac_duplex(uec, DUPLEX_HALF); in adjust_link()
514 uec_set_mac_duplex(uec, DUPLEX_FULL); in adjust_link()
517 uec->oldduplex = mii_info->duplex; in adjust_link()
520 if (mii_info->speed != uec->oldspeed) { in adjust_link()
522 uec->uec_info->enet_interface_type; in adjust_link()
523 if (uec->uec_info->uf_info.eth_type == GIGA_ETH) { in adjust_link()
545 uec_set_mac_if_mode(uec, mode, mii_info->speed); in adjust_link()
548 uec->oldspeed = mii_info->speed; in adjust_link()
551 if (!uec->oldlink) { in adjust_link()
553 uec->oldlink = 1; in adjust_link()
557 if (uec->oldlink) { in adjust_link()
559 uec->oldlink = 0; in adjust_link()
560 uec->oldspeed = 0; in adjust_link()
561 uec->oldduplex = -1; in adjust_link()
568 uec_private_t *uec = (uec_private_t *)dev->priv; in phy_change() local
579 uec->mii_info->phyinfo->read_status(uec->mii_info); in phy_change()
665 static int uec_set_mac_address(uec_private_t *uec, u8 *mac_addr) in uec_set_mac_address() argument
671 if (!uec) { in uec_set_mac_address()
676 uec_regs = uec->uec_regs; in uec_set_mac_address()
724 static void uec_init_tx_parameter(uec_private_t *uec, int num_threads_tx) in uec_init_tx_parameter() argument
731 uec_info = uec->uec_info; in uec_init_tx_parameter()
734 uec->tx_glbl_pram_offset = qe_muram_alloc( in uec_init_tx_parameter()
737 uec->p_tx_glbl_pram = (uec_tx_global_pram_t *) in uec_init_tx_parameter()
738 qe_muram_addr(uec->tx_glbl_pram_offset); in uec_init_tx_parameter()
741 memset(uec->p_tx_glbl_pram, 0, sizeof(uec_tx_global_pram_t)); in uec_init_tx_parameter()
746 out_be16(&uec->p_tx_glbl_pram->temoder, TEMODER_INIT_VALUE); in uec_init_tx_parameter()
749 uec->send_q_mem_reg_offset = qe_muram_alloc( in uec_init_tx_parameter()
752 uec->p_send_q_mem_reg = (uec_send_queue_mem_region_t *) in uec_init_tx_parameter()
753 qe_muram_addr(uec->send_q_mem_reg_offset); in uec_init_tx_parameter()
754 out_be32(&uec->p_tx_glbl_pram->sqptr, uec->send_q_mem_reg_offset); in uec_init_tx_parameter()
757 end_bd = (u32)uec->p_tx_bd_ring + (uec_info->tx_bd_ring_len - 1) in uec_init_tx_parameter()
759 out_be32(&uec->p_send_q_mem_reg->sqqd[0].bd_ring_base, in uec_init_tx_parameter()
760 (u32)(uec->p_tx_bd_ring)); in uec_init_tx_parameter()
761 out_be32(&uec->p_send_q_mem_reg->sqqd[0].last_bd_completed_address, in uec_init_tx_parameter()
765 out_be32(&uec->p_tx_glbl_pram->schedulerbasepointer, 0); in uec_init_tx_parameter()
768 out_be32(&uec->p_tx_glbl_pram->txrmonbaseptr, 0); in uec_init_tx_parameter()
772 out_be32(&uec->p_tx_glbl_pram->tstate, ((u32)(bmrx) << BMR_SHIFT)); in uec_init_tx_parameter()
776 out_8(&uec->p_tx_glbl_pram->iphoffset[i], 0); in uec_init_tx_parameter()
781 out_be32(&uec->p_tx_glbl_pram->vtagtable[i], 0); in uec_init_tx_parameter()
785 uec->thread_dat_tx_offset = qe_muram_alloc( in uec_init_tx_parameter()
789 uec->p_thread_data_tx = (uec_thread_data_tx_t *) in uec_init_tx_parameter()
790 qe_muram_addr(uec->thread_dat_tx_offset); in uec_init_tx_parameter()
791 out_be32(&uec->p_tx_glbl_pram->tqptr, uec->thread_dat_tx_offset); in uec_init_tx_parameter()
794 static void uec_init_rx_parameter(uec_private_t *uec, int num_threads_rx) in uec_init_rx_parameter() argument
801 uec->rx_glbl_pram_offset = qe_muram_alloc( in uec_init_rx_parameter()
803 uec->p_rx_glbl_pram = (uec_rx_global_pram_t *) in uec_init_rx_parameter()
804 qe_muram_addr(uec->rx_glbl_pram_offset); in uec_init_rx_parameter()
807 memset(uec->p_rx_glbl_pram, 0, sizeof(uec_rx_global_pram_t)); in uec_init_rx_parameter()
816 out_be32(&uec->p_rx_glbl_pram->remoder, REMODER_INIT_VALUE); in uec_init_rx_parameter()
819 uec->thread_dat_rx_offset = qe_muram_alloc( in uec_init_rx_parameter()
822 uec->p_thread_data_rx = (uec_thread_data_rx_t *) in uec_init_rx_parameter()
823 qe_muram_addr(uec->thread_dat_rx_offset); in uec_init_rx_parameter()
824 out_be32(&uec->p_rx_glbl_pram->rqptr, uec->thread_dat_rx_offset); in uec_init_rx_parameter()
827 out_be16(&uec->p_rx_glbl_pram->typeorlen, 3072); in uec_init_rx_parameter()
830 out_be32(&uec->p_rx_glbl_pram->rxrmonbaseptr, 0); in uec_init_rx_parameter()
833 out_be32(&uec->p_rx_glbl_pram->intcoalescingptr, 0); in uec_init_rx_parameter()
837 out_8(&uec->p_rx_glbl_pram->rstate, bmrx); in uec_init_rx_parameter()
840 out_be16(&uec->p_rx_glbl_pram->mrblr, MAX_RXBUF_LEN); in uec_init_rx_parameter()
843 uec->rx_bd_qs_tbl_offset = qe_muram_alloc( in uec_init_rx_parameter()
847 uec->p_rx_bd_qs_tbl = (uec_rx_bd_queues_entry_t *) in uec_init_rx_parameter()
848 qe_muram_addr(uec->rx_bd_qs_tbl_offset); in uec_init_rx_parameter()
851 memset(uec->p_rx_bd_qs_tbl, 0, sizeof(uec_rx_bd_queues_entry_t) + \ in uec_init_rx_parameter()
853 out_be32(&uec->p_rx_glbl_pram->rbdqptr, uec->rx_bd_qs_tbl_offset); in uec_init_rx_parameter()
854 out_be32(&uec->p_rx_bd_qs_tbl->externalbdbaseptr, in uec_init_rx_parameter()
855 (u32)uec->p_rx_bd_ring); in uec_init_rx_parameter()
858 out_be16(&uec->p_rx_glbl_pram->mflr, MAX_FRAME_LEN); in uec_init_rx_parameter()
860 out_be16(&uec->p_rx_glbl_pram->minflr, MIN_FRAME_LEN); in uec_init_rx_parameter()
862 out_be16(&uec->p_rx_glbl_pram->maxd1, MAX_DMA1_LEN); in uec_init_rx_parameter()
864 out_be16(&uec->p_rx_glbl_pram->maxd2, MAX_DMA2_LEN); in uec_init_rx_parameter()
866 out_be32(&uec->p_rx_glbl_pram->ecamptr, 0); in uec_init_rx_parameter()
868 out_be32(&uec->p_rx_glbl_pram->l2qt, 0); in uec_init_rx_parameter()
871 out_be32(&uec->p_rx_glbl_pram->l3qt[i], 0); in uec_init_rx_parameter()
875 out_be16(&uec->p_rx_glbl_pram->vlantype, 0x8100); in uec_init_rx_parameter()
877 out_be16(&uec->p_rx_glbl_pram->vlantci, 0); in uec_init_rx_parameter()
881 uec->p_rx_glbl_pram->addressfiltering; in uec_init_rx_parameter()
889 static int uec_issue_init_enet_rxtx_cmd(uec_private_t *uec, in uec_issue_init_enet_rxtx_cmd() argument
902 uec_info = uec->uec_info; in uec_issue_init_enet_rxtx_cmd()
905 uec->init_enet_param_offset = qe_muram_alloc( in uec_issue_init_enet_rxtx_cmd()
907 init_enet_param_offset = uec->init_enet_param_offset; in uec_issue_init_enet_rxtx_cmd()
908 uec->p_init_enet_param = (uec_init_cmd_pram_t *) in uec_issue_init_enet_rxtx_cmd()
909 qe_muram_addr(uec->init_enet_param_offset); in uec_issue_init_enet_rxtx_cmd()
912 memset((void *)uec->p_init_enet_param, 0, sizeof(uec_init_cmd_pram_t)); in uec_issue_init_enet_rxtx_cmd()
915 p_init_enet_param = uec->p_init_enet_param; in uec_issue_init_enet_rxtx_cmd()
929 p_init_enet_param->rgftgfrxglobal |= uec->rx_glbl_pram_offset | in uec_issue_init_enet_rxtx_cmd()
953 p_init_enet_param->txglobal = uec->tx_glbl_pram_offset | in uec_issue_init_enet_rxtx_cmd()
976 uec->uec_info->uf_info.ucc_num); in uec_issue_init_enet_rxtx_cmd()
983 static int uec_startup(uec_private_t *uec) in uec_startup() argument
999 if (!uec || !uec->uec_info) { in uec_startup()
1004 uec_info = uec->uec_info; in uec_startup()
1030 uec->grace_stopped_rx = 1; in uec_startup()
1031 uec->grace_stopped_tx = 1; in uec_startup()
1040 uec->uccf = uccf; in uec_startup()
1060 uec->uec_regs = uec_regs; in uec_startup()
1063 out_be32(&uec->uccf->uf_regs->upsmr, UPSMR_INIT_VALUE); in uec_startup()
1072 uec_set_mac_if_mode(uec, uec_info->enet_interface_type, uec_info->speed); in uec_startup()
1076 uec->uec_mii_regs = (uec_mii_t *)(&uec_regs->miimcfg); in uec_startup()
1078 uec->uec_mii_regs = (uec_mii_t *) CONFIG_MIIM_ADDRESS; in uec_startup()
1095 if ((uec->uec_info->enet_interface_type == PHY_INTERFACE_MODE_SGMII) && in uec_startup()
1096 (uec->uec_info->speed == SPEED_1000)) { in uec_startup()
1097 uec_write_phy_reg(uec->dev, uec_regs->utbipar, in uec_startup()
1100 uec_write_phy_reg(uec->dev, uec_regs->utbipar, in uec_startup()
1103 uec_write_phy_reg(uec->dev, uec_regs->utbipar, in uec_startup()
1117 uec->tx_bd_ring_offset = (u32)malloc((u32)(length + align)); in uec_startup()
1118 if (uec->tx_bd_ring_offset != 0) { in uec_startup()
1119 uec->p_tx_bd_ring = (u8 *)((uec->tx_bd_ring_offset + align) in uec_startup()
1124 memset((void *)(uec->tx_bd_ring_offset), 0, length + align); in uec_startup()
1129 uec->rx_bd_ring_offset = (u32)(malloc((u32)(length + align))); in uec_startup()
1130 if (uec->rx_bd_ring_offset != 0) { in uec_startup()
1131 uec->p_rx_bd_ring = (u8 *)((uec->rx_bd_ring_offset + align) in uec_startup()
1136 memset((void *)(uec->rx_bd_ring_offset), 0, length + align); in uec_startup()
1141 uec->rx_buf_offset = (u32)malloc(length + align); in uec_startup()
1142 if (uec->rx_buf_offset != 0) { in uec_startup()
1143 uec->p_rx_buf = (u8 *)((uec->rx_buf_offset + align) in uec_startup()
1148 memset((void *)(uec->rx_buf_offset), 0, length + align); in uec_startup()
1151 bd = (qe_bd_t *)uec->p_tx_bd_ring; in uec_startup()
1152 uec->txBd = bd; in uec_startup()
1163 bd = (qe_bd_t *)uec->p_rx_bd_ring; in uec_startup()
1164 uec->rxBd = bd; in uec_startup()
1165 buf = uec->p_rx_buf; in uec_startup()
1176 uec_init_tx_parameter(uec, num_threads_tx); in uec_startup()
1179 uec_init_rx_parameter(uec, num_threads_rx); in uec_startup()
1182 if (uec_issue_init_enet_rxtx_cmd(uec, num_threads_tx, in uec_startup()
1193 uec_private_t *uec; in uec_init() local
1200 uec = (uec_private_t *)dev->priv; in uec_init()
1202 if (uec->the_first_run == 0) { in uec_init()
1216 curphy = uec->mii_info->phyinfo; in uec_init()
1219 err = curphy->config_aneg(uec->mii_info); in uec_init()
1229 err = curphy->read_status(uec->mii_info); in uec_init()
1230 if (!(((i-- > 0) && !uec->mii_info->link) || err)) in uec_init()
1244 uec->the_first_run = 1; in uec_init()
1253 uec_set_mac_address(uec, dev->enetaddr); in uec_init()
1256 err = uec_open(uec, COMM_DIR_RX_AND_TX); in uec_init()
1264 return (uec->mii_info->link ? 0 : -1); in uec_init()
1269 uec_private_t *uec = (uec_private_t *)dev->priv; in uec_halt() local
1270 uec_stop(uec, COMM_DIR_RX_AND_TX); in uec_halt()
1275 uec_private_t *uec; in uec_send() local
1282 uec = (uec_private_t *)dev->priv; in uec_send()
1283 uccf = uec->uccf; in uec_send()
1284 bd = uec->txBd; in uec_send()
1314 BD_ADVANCE(bd, status, uec->p_tx_bd_ring); in uec_send()
1315 uec->txBd = bd; in uec_send()
1323 uec_private_t *uec = dev->priv; in uec_recv() local
1329 bd = uec->rxBd; in uec_recv()
1343 BD_ADVANCE(bd, status, uec->p_rx_bd_ring); in uec_recv()
1346 uec->rxBd = bd; in uec_recv()
1355 uec_private_t *uec; in uec_initialize() local
1364 uec = (uec_private_t *)malloc(sizeof(uec_private_t)); in uec_initialize()
1365 if (!uec) { in uec_initialize()
1368 memset(uec, 0, sizeof(uec_private_t)); in uec_initialize()
1378 uec->uec_info = uec_info; in uec_initialize()
1379 uec->dev = dev; in uec_initialize()
1383 dev->priv = (void *)uec; in uec_initialize()
1395 err = uec_startup(uec); in uec_initialize()