Lines Matching defs:oct

98 static int	lio_chip_specific_setup(struct octeon_device *oct);
100 static int lio_load_firmware(struct octeon_device *oct);
101 static int lio_nic_starter(struct octeon_device *oct);
102 static int lio_init_nic_module(struct octeon_device *oct);
105 static void lio_if_cfg_callback(struct octeon_device *oct, uint32_t status,
109 static int lio_setup_glists(struct octeon_device *oct, struct lio *lio,
111 static void lio_destroy_nic_device(struct octeon_device *oct, int ifidx);
115 static int lio_stop_nic_module(struct octeon_device *oct);
116 static void lio_destroy_resources(struct octeon_device *oct);
123 lio_get_other_octeon_device(struct octeon_device *oct);
125 static int lio_wait_for_oq_pkts(struct octeon_device *oct);
128 static int lio_dbg_console_print(struct octeon_device *oct,
683 * @param oct octeon device
686 lio_pci_flr(struct octeon_device *oct)
690 pci_find_cap(oct->device, PCIY_EXPRESS, &exppos);
692 pci_save_state(oct->device);
695 pci_write_config(oct->device, PCIR_COMMAND, PCIM_CMD_INTxDIS, 2);
700 status = pci_read_config(oct->device, exppos + PCIER_DEVICE_STA, 2);
702 lio_dev_info(oct, "Function reset incomplete after 100ms, sleeping for 5 seconds\n");
705 status = pci_read_config(oct->device, exppos + PCIER_DEVICE_STA, 2);
707 lio_dev_info(oct, "Function reset still incomplete after 5s, reset anyway\n");
710 pci_write_config(oct->device, exppos + PCIER_DEVICE_CTL, PCIEM_CTL_INITIATE_FLR, 2);
713 pci_restore_state(oct->device);
730 lio_dbg_console_print(struct octeon_device *oct, uint32_t console_num,
735 lio_dev_info(oct, "%u: %s%s\n", console_num, prefix, suffix);
737 lio_dev_info(oct, "%u: %s\n", console_num, prefix);
739 lio_dev_info(oct, "%u: %s\n", console_num, suffix);
749 struct octeon_device *oct = param;
755 kproc_suspend_check(oct->watchdog_task);
757 (uint16_t)lio_read_csr64(oct, LIO_CN23XX_SLI_SCRATCH2);
762 oct->cores_crashed = true;
763 other_oct = lio_get_other_octeon_device(oct);
776 lio_dev_err(oct,
777 "ERROR: Octeon core %d crashed or got stuck! See oct-fwdump for details.\n",
791 lio_chip_specific_setup(struct octeon_device *oct)
797 dev_id = lio_read_pci_cfg(oct, 0);
798 oct->subdevice_id = pci_get_subdevice(oct->device);
802 oct->chip_id = LIO_CN23XX_PF_VID;
803 if (pci_get_function(oct->device) == 0) {
805 lio_dev_info(oct, "Invalid num_queues_per_pf0: %d, Setting it to default\n",
810 oct->sriov_info.num_pf_rings = num_queues_per_pf0;
813 lio_dev_info(oct, "Invalid num_queues_per_pf1: %d, Setting it to default\n",
818 oct->sriov_info.num_pf_rings = num_queues_per_pf1;
821 ret = lio_cn23xx_pf_setup_device(oct);
827 lio_dev_err(oct, "Unknown device found (dev_id: %x)\n", dev_id);
831 lio_dev_info(oct, "%s PASS%d.%d %s Version: %s\n", s,
832 OCTEON_MAJOR_REV(oct), OCTEON_MINOR_REV(oct),
833 lio_get_conf(oct)->card_name, LIO_VERSION);
839 lio_get_other_octeon_device(struct octeon_device *oct)
843 other_oct = lio_get_device(oct->octeon_id + 1);
848 oct_busnum = pci_get_bus(oct->device);
854 oct_slot = pci_get_slot(oct->device);
866 * @param oct octeon device
871 lio_load_firmware(struct octeon_device *oct)
884 lio_get_conf(oct)->card_name, tmp_fw_type, LIO_FW_NAME_SUFFIX);
888 lio_dev_err(oct, "Request firmware failed. Could not find file %s.\n",
893 ret = lio_download_firmware(oct, fw->data, fw->datasize);
901 lio_nic_starter(struct octeon_device *oct)
905 atomic_store_rel_int(&oct->status, LIO_DEV_RUNNING);
907 if (oct->app_mode && oct->app_mode == LIO_DRV_NIC_APP) {
908 if (lio_init_nic_module(oct)) {
909 lio_dev_err(oct, "NIC initialization failed\n");
913 if (octeon_enable_sriov(oct) < 0)
918 lio_dev_err(oct,
920 oct->app_mode);
928 lio_init_nic_module(struct octeon_device *oct)
930 int num_nic_ports = LIO_GET_NUM_NIC_PORTS_CFG(lio_get_conf(oct));
933 lio_dev_dbg(oct, "Initializing network interfaces\n");
941 oct->ifcount = num_nic_ports;
943 bzero(&oct->props, sizeof(struct lio_if_props));
945 oct->props.gmxport = -1;
947 retval = lio_setup_nic_devices(oct);
949 lio_dev_err(oct, "Setup NIC devices failed\n");
953 lio_dev_dbg(oct, "Network interfaces ready\n");
959 oct->ifcount = 0;
994 lio_get_media_subtype(struct octeon_device *oct)
997 switch(oct->subdevice_id) {
1012 lio_get_baudrate(struct octeon_device *oct)
1015 switch(oct->subdevice_id) {
1063 struct octeon_device *oct = lio->oct_dev;
1069 for (i = 0; i < oct->num_oqs; i++) {
1071 counter += oct->droq[q_no]->stats.rx_pkts_received;
1075 for (i = 0; i < oct->num_iqs; i++) {
1077 counter += oct->instr_queue[q_no]->stats.tx_done;
1081 for (i = 0; i < oct->num_oqs; i++) {
1083 counter += oct->droq[q_no]->stats.rx_bytes_received;
1087 for (i = 0; i < oct->num_iqs; i++) {
1089 counter += oct->instr_queue[q_no]->stats.tx_tot_bytes;
1093 for (i = 0; i < oct->num_oqs; i++) {
1095 counter += oct->droq[q_no]->stats.rx_dropped;
1099 for (i = 0; i < oct->num_iqs; i++) {
1101 counter += oct->instr_queue[q_no]->stats.tx_dropped;
1105 counter = oct->link_stats.fromwire.total_mcst;
1108 counter = oct->link_stats.fromhost.mcast_pkts_sent;
1111 counter = oct->link_stats.fromhost.total_collisions;
1114 counter = oct->link_stats.fromwire.fcs_err +
1115 oct->link_stats.fromwire.l2_err +
1116 oct->link_stats.fromwire.frame_err;
1128 struct octeon_device *oct = lio->oct_dev;
1137 (IFM_ETHER | IFM_FDX | lio_get_media_subtype(oct)),
1143 lio_dev_dbg(oct, "IFMEDIA flags : %x\n", lio->ifmedia.ifm_media);
1145 if_initname(ifp, device_get_name(oct->device),
1146 device_get_unit(oct->device));
1166 if_setbaudrate(ifp, lio_get_baudrate(oct));
1486 struct octeon_device *oct = (struct octeon_device *)ptr;
1491 lio_dev_dbg(oct, "%s Called\n", __func__);
1493 lio_dev_err(oct, "Malformed NIC_INFO, len=%d, ifidx=%d\n",
1504 if (oct->props.gmxport == gmxport)
1505 lio_update_link_status(oct->props.ifp, ls);
1528 struct octeon_device *oct;
1534 oct = iq->oct_dev;
1535 lio = if_getsoftc(oct->props.ifp);
1547 lio_if_cfg_callback(struct octeon_device *oct, uint32_t status, void *buf)
1556 oct = lio_get_device(ctx->octeon_id);
1558 lio_dev_err(oct, "nic if cfg instruction failed. Status: %llx (0x%08x)\n",
1562 snprintf(oct->fw_info.lio_firmware_version, 32, "%s",
1586 struct octeon_device *oct = lio->oct_dev;
1595 lio_dev_info(oct, "Interface Open, ready for traffic\n");
1606 lio_dev_err(oct, "MAC change failed, error: %d\n", ret);
1612 lio_dev_info(oct, "Interface is opened\n");
1620 struct octeon_device *oct = lio->oct_dev;
1633 lio_dev_err(oct, "DEVFLAGS RXCSUM change failed in core(ret:0x%x)\n",
1641 lio_stop_nic_module(struct octeon_device *oct)
1646 lio_dev_dbg(oct, "Stopping network interfaces\n");
1647 if (!oct->ifcount) {
1648 lio_dev_err(oct, "Init for Octeon was not completed\n");
1652 mtx_lock(&oct->cmd_resp_wqlock);
1653 oct->cmd_resp_state = LIO_DRV_OFFLINE;
1654 mtx_unlock(&oct->cmd_resp_wqlock);
1656 for (i = 0; i < oct->ifcount; i++) {
1657 lio = if_getsoftc(oct->props.ifp);
1658 for (j = 0; j < oct->num_oqs; j++)
1659 lio_unregister_droq_ops(oct,
1665 for (i = 0; i < oct->ifcount; i++)
1666 lio_destroy_nic_device(oct, i);
1668 lio_dev_dbg(oct, "Network interface stopped\n");
1674 lio_delete_glists(struct octeon_device *oct, struct lio *lio)
1712 lio_setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs)
1741 lio_delete_glists(oct, lio);
1754 lio_delete_glists(oct, lio);
1772 lio_delete_glists(oct, lio);
1784 struct octeon_device *oct = lio->oct_dev;
1798 lio_dev_info(oct, "Interface is stopped\n");
1805 struct octeon_device *oct = lio->oct_dev;
1809 for (q = 0; q < oct->num_oqs; q++) {
1811 droq = oct->droq[q_no];
1814 if (lio_read_csr32(oct, droq->pkts_credit_reg) <= 0x40) {
1816 desc_refilled = lio_droq_refill(oct, droq);
1823 lio_write_csr32(oct, droq->pkts_credit_reg,
1849 struct octeon_device *oct = lio->oct_dev;
1865 oct->octeon_id);
1891 lio_destroy_nic_device(struct octeon_device *oct, int ifidx)
1893 if_t ifp = oct->props.ifp;
1897 lio_dev_err(oct, "%s No ifp ptr for index %d\n",
1906 lio_dev_dbg(oct, "NIC device cleanup\n");
1911 if (lio_wait_for_pending_requests(oct))
1912 lio_dev_err(oct, "There were pending requests\n");
1914 if (lio_wait_for_instr_fetch(oct))
1915 lio_dev_err(oct, "IQ had pending instructions\n");
1917 if (lio_wait_for_oq_pkts(oct))
1918 lio_dev_err(oct, "OQ had pending packets\n");
1923 lio_tcp_lro_free(oct, ifp);
1927 lio_delete_glists(oct, lio);
1936 oct->props.gmxport = -1;
1938 oct->props.ifp = NULL;
1984 lio_rx_ctl_callback(struct octeon_device *oct, uint32_t status, void *buf)
1991 oct = lio_get_device(ctx->octeon_id);
1993 lio_dev_err(oct, "rx ctl instruction failed. Status: %llx\n",
2010 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev;
2014 if (oct->props.rx_on == start_stop)
2017 sc = lio_alloc_soft_command(oct, OCTEON_CMD_SIZE, 16, ctx_size);
2025 ctx->octeon_id = lio_get_device_id(oct);
2034 lio_prepare_soft_command(oct, sc, LIO_OPCODE_NIC, LIO_OPCODE_NIC_CMD, 0,
2041 retval = lio_send_soft_command(oct, sc);
2043 lio_dev_err(oct, "Failed to send RX Control message\n");
2049 lio_sleep_cond(oct, &ctx->cond);
2050 oct->props.rx_on = start_stop;
2053 lio_free_soft_command(oct, sc);
2061 struct octeon_device *oct = lio->oct_dev;
2082 lio_dev_err(oct, "Add VLAN filter failed in core (ret: 0x%x)\n",
2092 struct octeon_device *oct = lio->oct_dev;
2113 lio_dev_err(oct,
2120 lio_wait_for_oq_pkts(struct octeon_device *oct)
2127 for (i = 0; i < LIO_MAX_OUTPUT_QUEUES(oct); i++) {
2128 if (!(oct->io_qmask.oq & BIT_ULL(i)))
2131 pkt_cnt = lio_droq_check_hw_for_pkts(oct->droq[i]);
2134 taskqueue_enqueue(oct->droq[i]->droq_taskqueue,
2135 &oct->droq[i]->droq_task);
2147 lio_destroy_resources(struct octeon_device *oct)
2151 switch (atomic_load_acq_int(&oct->status)) {
2155 atomic_store_rel_int(&oct->status, LIO_DEV_IN_RESET);
2157 oct->app_mode = LIO_DRV_INVALID_APP;
2158 lio_dev_dbg(oct, "Device state is now %s\n",
2159 lio_get_state_string(&oct->status));
2169 lio_remove_consoles(oct);
2173 if (lio_wait_for_pending_requests(oct))
2174 lio_dev_err(oct, "There were pending requests\n");
2176 if (lio_wait_for_instr_fetch(oct))
2177 lio_dev_err(oct, "IQ had pending instructions\n");
2184 oct->fn_list.disable_io_queues(oct);
2186 if (lio_wait_for_oq_pkts(oct))
2187 lio_dev_err(oct, "OQ had pending packets\n");
2192 oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR);
2194 if (oct->msix_on) {
2195 for (i = 0; i < oct->num_msix_irqs - 1; i++) {
2196 if (oct->ioq_vector[i].tag != NULL) {
2197 bus_teardown_intr(oct->device,
2198 oct->ioq_vector[i].msix_res,
2199 oct->ioq_vector[i].tag);
2200 oct->ioq_vector[i].tag = NULL;
2202 if (oct->ioq_vector[i].msix_res != NULL) {
2203 bus_release_resource(oct->device,
2205 oct->ioq_vector[i].vector,
2206 oct->ioq_vector[i].msix_res);
2207 oct->ioq_vector[i].msix_res = NULL;
2210 /* non-iov vector's argument is oct struct */
2211 if (oct->tag != NULL) {
2212 bus_teardown_intr(oct->device, oct->msix_res,
2213 oct->tag);
2214 oct->tag = NULL;
2217 if (oct->msix_res != NULL) {
2218 bus_release_resource(oct->device, SYS_RES_IRQ,
2219 oct->aux_vector,
2220 oct->msix_res);
2221 oct->msix_res = NULL;
2224 pci_release_msi(oct->device);
2231 for (i = 0; i < LIO_MAX_OUTPUT_QUEUES(oct); i++) {
2232 if (!(oct->io_qmask.oq & BIT_ULL(i)))
2234 lio_delete_droq(oct, i);
2240 if (oct->droq[i] != NULL) {
2241 free(oct->droq[i], M_DEVBUF);
2242 oct->droq[i] = NULL;
2245 lio_delete_response_list(oct);
2249 for (i = 0; i < LIO_MAX_INSTR_QUEUES(oct); i++) {
2250 if (!(oct->io_qmask.iq & BIT_ULL(i)))
2253 lio_delete_instr_queue(oct, i);
2259 if (oct->instr_queue[i] != NULL) {
2260 free(oct->instr_queue[i], M_DEVBUF);
2261 oct->instr_queue[i] = NULL;
2264 lio_free_ioq_vector(oct);
2268 lio_free_sc_buffer_pool(oct);
2272 lio_delete_dispatch_list(oct);
2276 refcount = lio_deregister_device(oct);
2279 lio_pci_flr(oct);
2282 oct->fn_list.soft_reset(oct);
2284 lio_unmap_pci_barx(oct, 0);
2285 lio_unmap_pci_barx(oct, 1);
2290 pci_disable_busmaster(oct->device);
2295 } /* end switch (oct->status) */