• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/dev/liquidio/

Lines Matching refs:oct

99 static int	lio_chip_specific_setup(struct octeon_device *oct);
101 static int lio_load_firmware(struct octeon_device *oct);
102 static int lio_nic_starter(struct octeon_device *oct);
103 static int lio_init_nic_module(struct octeon_device *oct);
106 static void lio_if_cfg_callback(struct octeon_device *oct, uint32_t status,
110 static int lio_setup_glists(struct octeon_device *oct, struct lio *lio,
112 static void lio_destroy_nic_device(struct octeon_device *oct, int ifidx);
116 static int lio_stop_nic_module(struct octeon_device *oct);
117 static void lio_destroy_resources(struct octeon_device *oct);
124 lio_get_other_octeon_device(struct octeon_device *oct);
126 static int lio_wait_for_oq_pkts(struct octeon_device *oct);
129 static int lio_dbg_console_print(struct octeon_device *oct,
687 * @param oct octeon device
690 lio_pci_flr(struct octeon_device *oct)
694 pci_find_cap(oct->device, PCIY_EXPRESS, &exppos);
696 pci_save_state(oct->device);
699 pci_write_config(oct->device, PCIR_COMMAND, PCIM_CMD_INTxDIS, 2);
704 status = pci_read_config(oct->device, exppos + PCIER_DEVICE_STA, 2);
706 lio_dev_info(oct, "Function reset incomplete after 100ms, sleeping for 5 seconds\n");
709 status = pci_read_config(oct->device, exppos + PCIER_DEVICE_STA, 2);
711 lio_dev_info(oct, "Function reset still incomplete after 5s, reset anyway\n");
714 pci_write_config(oct->device, exppos + PCIER_DEVICE_CTL, PCIEM_CTL_INITIATE_FLR, 2);
717 pci_restore_state(oct->device);
734 lio_dbg_console_print(struct octeon_device *oct, uint32_t console_num,
739 lio_dev_info(oct, "%u: %s%s\n", console_num, prefix, suffix);
741 lio_dev_info(oct, "%u: %s\n", console_num, prefix);
743 lio_dev_info(oct, "%u: %s\n", console_num, suffix);
753 struct octeon_device *oct = param;
759 kproc_suspend_check(oct->watchdog_task);
761 (uint16_t)lio_read_csr64(oct, LIO_CN23XX_SLI_SCRATCH2);
766 oct->cores_crashed = true;
767 other_oct = lio_get_other_octeon_device(oct);
780 lio_dev_err(oct,
781 "ERROR: Octeon core %d crashed or got stuck! See oct-fwdump for details.\n",
795 lio_chip_specific_setup(struct octeon_device *oct)
801 dev_id = lio_read_pci_cfg(oct, 0);
802 rev_id = pci_get_revid(oct->device);
803 oct->subdevice_id = pci_get_subdevice(oct->device);
807 oct->chip_id = LIO_CN23XX_PF_VID;
808 if (pci_get_function(oct->device) == 0) {
810 lio_dev_info(oct, "Invalid num_queues_per_pf0: %d, Setting it to default\n",
815 oct->sriov_info.num_pf_rings = num_queues_per_pf0;
818 lio_dev_info(oct, "Invalid num_queues_per_pf1: %d, Setting it to default\n",
823 oct->sriov_info.num_pf_rings = num_queues_per_pf1;
826 ret = lio_cn23xx_pf_setup_device(oct);
832 lio_dev_err(oct, "Unknown device found (dev_id: %x)\n", dev_id);
836 lio_dev_info(oct, "%s PASS%d.%d %s Version: %s\n", s,
837 OCTEON_MAJOR_REV(oct), OCTEON_MINOR_REV(oct),
838 lio_get_conf(oct)->card_name, LIO_VERSION);
844 lio_get_other_octeon_device(struct octeon_device *oct)
848 other_oct = lio_get_device(oct->octeon_id + 1);
853 oct_busnum = pci_get_bus(oct->device);
859 oct_slot = pci_get_slot(oct->device);
871 * @param oct octeon device
876 lio_load_firmware(struct octeon_device *oct)
889 lio_get_conf(oct)->card_name, tmp_fw_type, LIO_FW_NAME_SUFFIX);
893 lio_dev_err(oct, "Request firmware failed. Could not find file %s.\n",
898 ret = lio_download_firmware(oct, fw->data, fw->datasize);
906 lio_nic_starter(struct octeon_device *oct)
910 atomic_store_rel_int(&oct->status, LIO_DEV_RUNNING);
912 if (oct->app_mode && oct->app_mode == LIO_DRV_NIC_APP) {
913 if (lio_init_nic_module(oct)) {
914 lio_dev_err(oct, "NIC initialization failed\n");
918 if (octeon_enable_sriov(oct) < 0)
923 lio_dev_err(oct,
925 oct->app_mode);
933 lio_init_nic_module(struct octeon_device *oct)
935 int num_nic_ports = LIO_GET_NUM_NIC_PORTS_CFG(lio_get_conf(oct));
938 lio_dev_dbg(oct, "Initializing network interfaces\n");
946 oct->ifcount = num_nic_ports;
948 bzero(&oct->props, sizeof(struct lio_if_props));
950 oct->props.gmxport = -1;
952 retval = lio_setup_nic_devices(oct);
954 lio_dev_err(oct, "Setup NIC devices failed\n");
958 lio_dev_dbg(oct, "Network interfaces ready\n");
964 oct->ifcount = 0;
999 lio_get_media_subtype(struct octeon_device *oct)
1002 switch(oct->subdevice_id) {
1017 lio_get_baudrate(struct octeon_device *oct)
1020 switch(oct->subdevice_id) {
1068 struct octeon_device *oct = lio->oct_dev;
1074 for (i = 0; i < oct->num_oqs; i++) {
1076 counter += oct->droq[q_no]->stats.rx_pkts_received;
1080 for (i = 0; i < oct->num_iqs; i++) {
1082 counter += oct->instr_queue[q_no]->stats.tx_done;
1086 for (i = 0; i < oct->num_oqs; i++) {
1088 counter += oct->droq[q_no]->stats.rx_bytes_received;
1092 for (i = 0; i < oct->num_iqs; i++) {
1094 counter += oct->instr_queue[q_no]->stats.tx_tot_bytes;
1098 for (i = 0; i < oct->num_oqs; i++) {
1100 counter += oct->droq[q_no]->stats.rx_dropped;
1104 for (i = 0; i < oct->num_iqs; i++) {
1106 counter += oct->instr_queue[q_no]->stats.tx_dropped;
1110 counter = oct->link_stats.fromwire.total_mcst;
1113 counter = oct->link_stats.fromhost.mcast_pkts_sent;
1116 counter = oct->link_stats.fromhost.total_collisions;
1119 counter = oct->link_stats.fromwire.fcs_err +
1120 oct->link_stats.fromwire.l2_err +
1121 oct->link_stats.fromwire.frame_err;
1133 struct octeon_device *oct = lio->oct_dev;
1142 (IFM_ETHER | IFM_FDX | lio_get_media_subtype(oct)),
1148 lio_dev_dbg(oct, "IFMEDIA flags : %x\n", lio->ifmedia.ifm_media);
1150 if_initname(ifp, device_get_name(oct->device),
1151 device_get_unit(oct->device));
1171 if_setbaudrate(ifp, lio_get_baudrate(oct));
1496 struct octeon_device *oct = (struct octeon_device *)ptr;
1501 lio_dev_dbg(oct, "%s Called\n", __func__);
1503 lio_dev_err(oct, "Malformed NIC_INFO, len=%d, ifidx=%d\n",
1514 if (oct->props.gmxport == gmxport)
1515 lio_update_link_status(oct->props.ifp, ls);
1538 struct octeon_device *oct;
1544 oct = iq->oct_dev;
1545 lio = if_getsoftc(oct->props.ifp);
1557 lio_if_cfg_callback(struct octeon_device *oct, uint32_t status, void *buf)
1566 oct = lio_get_device(ctx->octeon_id);
1568 lio_dev_err(oct, "nic if cfg instruction failed. Status: %llx (0x%08x)\n",
1572 snprintf(oct->fw_info.lio_firmware_version, 32, "%s",
1596 struct octeon_device *oct = lio->oct_dev;
1605 lio_dev_info(oct, "Interface Open, ready for traffic\n");
1616 lio_dev_err(oct, "MAC change failed, error: %d\n", ret);
1622 lio_dev_info(oct, "Interface is opened\n");
1630 struct octeon_device *oct = lio->oct_dev;
1643 lio_dev_err(oct, "DEVFLAGS RXCSUM change failed in core(ret:0x%x)\n",
1651 lio_stop_nic_module(struct octeon_device *oct)
1656 lio_dev_dbg(oct, "Stopping network interfaces\n");
1657 if (!oct->ifcount) {
1658 lio_dev_err(oct, "Init for Octeon was not completed\n");
1662 mtx_lock(&oct->cmd_resp_wqlock);
1663 oct->cmd_resp_state = LIO_DRV_OFFLINE;
1664 mtx_unlock(&oct->cmd_resp_wqlock);
1666 for (i = 0; i < oct->ifcount; i++) {
1667 lio = if_getsoftc(oct->props.ifp);
1668 for (j = 0; j < oct->num_oqs; j++)
1669 lio_unregister_droq_ops(oct,
1675 for (i = 0; i < oct->ifcount; i++)
1676 lio_destroy_nic_device(oct, i);
1678 lio_dev_dbg(oct, "Network interface stopped\n");
1684 lio_delete_glists(struct octeon_device *oct, struct lio *lio)
1722 lio_setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs)
1751 lio_delete_glists(oct, lio);
1764 lio_delete_glists(oct, lio);
1782 lio_delete_glists(oct, lio);
1794 struct octeon_device *oct = lio->oct_dev;
1808 lio_dev_info(oct, "Interface is stopped\n");
1815 struct octeon_device *oct = lio->oct_dev;
1819 for (q = 0; q < oct->num_oqs; q++) {
1821 droq = oct->droq[q_no];
1824 if (lio_read_csr32(oct, droq->pkts_credit_reg) <= 0x40) {
1826 desc_refilled = lio_droq_refill(oct, droq);
1833 lio_write_csr32(oct, droq->pkts_credit_reg,
1859 struct octeon_device *oct = lio->oct_dev;
1868 lio_dev_err(oct, "unable to create lio rx oom status tq\n");
1879 oct->octeon_id);
1905 lio_destroy_nic_device(struct octeon_device *oct, int ifidx)
1907 struct ifnet *ifp = oct->props.ifp;
1911 lio_dev_err(oct, "%s No ifp ptr for index %d\n",
1920 lio_dev_dbg(oct, "NIC device cleanup\n");
1925 if (lio_wait_for_pending_requests(oct))
1926 lio_dev_err(oct, "There were pending requests\n");
1928 if (lio_wait_for_instr_fetch(oct))
1929 lio_dev_err(oct, "IQ had pending instructions\n");
1931 if (lio_wait_for_oq_pkts(oct))
1932 lio_dev_err(oct, "OQ had pending packets\n");
1937 lio_tcp_lro_free(oct, ifp);
1941 lio_delete_glists(oct, lio);
1950 oct->props.gmxport = -1;
1952 oct->props.ifp = NULL;
1998 lio_rx_ctl_callback(struct octeon_device *oct, uint32_t status, void *buf)
2005 oct = lio_get_device(ctx->octeon_id);
2007 lio_dev_err(oct, "rx ctl instruction failed. Status: %llx\n",
2024 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev;
2028 if (oct->props.rx_on == start_stop)
2031 sc = lio_alloc_soft_command(oct, OCTEON_CMD_SIZE, 16, ctx_size);
2039 ctx->octeon_id = lio_get_device_id(oct);
2048 lio_prepare_soft_command(oct, sc, LIO_OPCODE_NIC, LIO_OPCODE_NIC_CMD, 0,
2055 retval = lio_send_soft_command(oct, sc);
2057 lio_dev_err(oct, "Failed to send RX Control message\n");
2063 lio_sleep_cond(oct, &ctx->cond);
2064 oct->props.rx_on = start_stop;
2067 lio_free_soft_command(oct, sc);
2075 struct octeon_device *oct = lio->oct_dev;
2096 lio_dev_err(oct, "Add VLAN filter failed in core (ret: 0x%x)\n",
2106 struct octeon_device *oct = lio->oct_dev;
2127 lio_dev_err(oct,
2134 lio_wait_for_oq_pkts(struct octeon_device *oct)
2141 for (i = 0; i < LIO_MAX_OUTPUT_QUEUES(oct); i++) {
2142 if (!(oct->io_qmask.oq & BIT_ULL(i)))
2145 pkt_cnt = lio_droq_check_hw_for_pkts(oct->droq[i]);
2148 taskqueue_enqueue(oct->droq[i]->droq_taskqueue,
2149 &oct->droq[i]->droq_task);
2161 lio_destroy_resources(struct octeon_device *oct)
2165 switch (atomic_load_acq_int(&oct->status)) {
2169 atomic_store_rel_int(&oct->status, LIO_DEV_IN_RESET);
2171 oct->app_mode = LIO_DRV_INVALID_APP;
2172 lio_dev_dbg(oct, "Device state is now %s\n",
2173 lio_get_state_string(&oct->status));
2183 lio_remove_consoles(oct);
2187 if (lio_wait_for_pending_requests(oct))
2188 lio_dev_err(oct, "There were pending requests\n");
2190 if (lio_wait_for_instr_fetch(oct))
2191 lio_dev_err(oct, "IQ had pending instructions\n");
2198 oct->fn_list.disable_io_queues(oct);
2200 if (lio_wait_for_oq_pkts(oct))
2201 lio_dev_err(oct, "OQ had pending packets\n");
2206 oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR);
2208 if (oct->msix_on) {
2209 for (i = 0; i < oct->num_msix_irqs - 1; i++) {
2210 if (oct->ioq_vector[i].tag != NULL) {
2211 bus_teardown_intr(oct->device,
2212 oct->ioq_vector[i].msix_res,
2213 oct->ioq_vector[i].tag);
2214 oct->ioq_vector[i].tag = NULL;
2216 if (oct->ioq_vector[i].msix_res != NULL) {
2217 bus_release_resource(oct->device,
2219 oct->ioq_vector[i].vector,
2220 oct->ioq_vector[i].msix_res);
2221 oct->ioq_vector[i].msix_res = NULL;
2224 /* non-iov vector's argument is oct struct */
2225 if (oct->tag != NULL) {
2226 bus_teardown_intr(oct->device, oct->msix_res,
2227 oct->tag);
2228 oct->tag = NULL;
2231 if (oct->msix_res != NULL) {
2232 bus_release_resource(oct->device, SYS_RES_IRQ,
2233 oct->aux_vector,
2234 oct->msix_res);
2235 oct->msix_res = NULL;
2238 pci_release_msi(oct->device);
2245 for (i = 0; i < LIO_MAX_OUTPUT_QUEUES(oct); i++) {
2246 if (!(oct->io_qmask.oq & BIT_ULL(i)))
2248 lio_delete_droq(oct, i);
2254 if (oct->droq[i] != NULL) {
2255 free(oct->droq[i], M_DEVBUF);
2256 oct->droq[i] = NULL;
2259 lio_delete_response_list(oct);
2263 for (i = 0; i < LIO_MAX_INSTR_QUEUES(oct); i++) {
2264 if (!(oct->io_qmask.iq & BIT_ULL(i)))
2267 lio_delete_instr_queue(oct, i);
2273 if (oct->instr_queue[i] != NULL) {
2274 free(oct->instr_queue[i], M_DEVBUF);
2275 oct->instr_queue[i] = NULL;
2278 lio_free_ioq_vector(oct);
2282 lio_free_sc_buffer_pool(oct);
2286 lio_delete_dispatch_list(oct);
2290 refcount = lio_deregister_device(oct);
2293 lio_pci_flr(oct);
2296 oct->fn_list.soft_reset(oct);
2298 lio_unmap_pci_barx(oct, 0);
2299 lio_unmap_pci_barx(oct, 1);
2304 pci_disable_busmaster(oct->device);
2309 } /* end switch (oct->status) */