Lines Matching full:ionic

10 #include "ionic.h"
16 struct ionic *ionic = timer_container_of(ionic, t, watchdog_timer); in ionic_watchdog_cb() local
17 struct ionic_lif *lif = ionic->lif; in ionic_watchdog_cb()
21 mod_timer(&ionic->watchdog_timer, in ionic_watchdog_cb()
22 round_jiffies(jiffies + ionic->watchdog_period)); in ionic_watchdog_cb()
27 hb = ionic_heartbeat_check(ionic); in ionic_watchdog_cb()
28 dev_dbg(ionic->dev, "%s: hb %d running %d UP %d\n", in ionic_watchdog_cb()
71 static int ionic_get_preferred_cpu(struct ionic *ionic, in ionic_get_preferred_cpu() argument
78 cpu = cpumask_local_spread(0, dev_to_node(ionic->dev)); in ionic_get_preferred_cpu()
83 static void ionic_queue_dbell_napi_work(struct ionic *ionic, in ionic_queue_dbell_napi_work() argument
91 cpu = ionic_get_preferred_cpu(ionic, &qcq->intr); in ionic_queue_dbell_napi_work()
92 queue_work_on(cpu, ionic->wq, &qcq->doorbell_napi_work); in ionic_queue_dbell_napi_work()
97 struct ionic *ionic = container_of(work, struct ionic, in ionic_doorbell_check_dwork() local
99 struct ionic_lif *lif = ionic->lif; in ionic_doorbell_check_dwork()
115 ionic_queue_dbell_napi_work(ionic, lif->txqcqs[i]); in ionic_doorbell_check_dwork()
116 ionic_queue_dbell_napi_work(ionic, lif->rxqcqs[i]); in ionic_doorbell_check_dwork()
128 ionic_queue_doorbell_check(ionic, IONIC_NAPI_DEADLINE); in ionic_doorbell_check_dwork()
131 bool ionic_doorbell_wa(struct ionic *ionic) in ionic_doorbell_wa() argument
133 u8 asic_type = ionic->idev.dev_info.asic_type; in ionic_doorbell_wa()
138 static int ionic_watchdog_init(struct ionic *ionic) in ionic_watchdog_init() argument
140 struct ionic_dev *idev = &ionic->idev; in ionic_watchdog_init()
142 timer_setup(&ionic->watchdog_timer, ionic_watchdog_cb, 0); in ionic_watchdog_init()
143 ionic->watchdog_period = IONIC_WATCHDOG_SECS * HZ; in ionic_watchdog_init()
147 idev->last_hb_time = jiffies - 2 * ionic->watchdog_period; in ionic_watchdog_init()
155 ionic->wq = alloc_workqueue("%s-wq", WQ_UNBOUND, 0, in ionic_watchdog_init()
156 dev_name(ionic->dev)); in ionic_watchdog_init()
157 if (!ionic->wq) { in ionic_watchdog_init()
158 dev_err(ionic->dev, "alloc_workqueue failed"); in ionic_watchdog_init()
162 if (ionic_doorbell_wa(ionic)) in ionic_watchdog_init()
163 INIT_DELAYED_WORK(&ionic->doorbell_check_dwork, in ionic_watchdog_init()
169 void ionic_queue_doorbell_check(struct ionic *ionic, int delay) in ionic_queue_doorbell_check() argument
173 if (!ionic->lif->doorbell_wa) in ionic_queue_doorbell_check()
176 cpu = ionic_get_preferred_cpu(ionic, &ionic->lif->adminqcq->intr); in ionic_queue_doorbell_check()
177 queue_delayed_work_on(cpu, ionic->wq, &ionic->doorbell_check_dwork, in ionic_queue_doorbell_check()
181 void ionic_init_devinfo(struct ionic *ionic) in ionic_init_devinfo() argument
183 struct ionic_dev *idev = &ionic->idev; in ionic_init_devinfo()
199 dev_dbg(ionic->dev, "fw_version %s\n", idev->dev_info.fw_version); in ionic_init_devinfo()
202 static void ionic_map_disc_cmb(struct ionic *ionic) in ionic_map_disc_cmb() argument
204 struct ionic_identity *ident = &ionic->ident; in ionic_map_disc_cmb()
206 struct ionic_dev_bar *bar = ionic->bars; in ionic_map_disc_cmb()
207 struct ionic_dev *idev = &ionic->idev; in ionic_map_disc_cmb()
208 struct device *dev = ionic->dev; in ionic_map_disc_cmb()
212 mutex_lock(&ionic->dev_cmd_lock); in ionic_map_disc_cmb()
215 err = ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT); in ionic_map_disc_cmb()
222 mutex_unlock(&ionic->dev_cmd_lock); in ionic_map_disc_cmb()
351 static void ionic_map_classic_cmb(struct ionic *ionic) in ionic_map_classic_cmb() argument
353 struct ionic_dev_bar *bar = ionic->bars; in ionic_map_classic_cmb()
354 struct ionic_dev *idev = &ionic->idev; in ionic_map_classic_cmb()
355 struct device *dev = ionic->dev; in ionic_map_classic_cmb()
375 void ionic_map_cmb(struct ionic *ionic) in ionic_map_cmb() argument
377 struct pci_dev *pdev = ionic->pdev; in ionic_map_cmb()
378 struct device *dev = ionic->dev; in ionic_map_cmb()
385 if (ionic->ident.dev.capabilities & cpu_to_le64(IONIC_DEV_CAP_DISC_CMB)) in ionic_map_cmb()
386 ionic_map_disc_cmb(ionic); in ionic_map_cmb()
388 ionic_map_classic_cmb(ionic); in ionic_map_cmb()
391 int ionic_dev_setup(struct ionic *ionic) in ionic_dev_setup() argument
393 struct ionic_dev_bar *bar = ionic->bars; in ionic_dev_setup()
394 unsigned int num_bars = ionic->num_bars; in ionic_dev_setup()
395 struct ionic_dev *idev = &ionic->idev; in ionic_dev_setup()
396 struct device *dev = ionic->dev; in ionic_dev_setup()
425 ionic_init_devinfo(ionic); in ionic_dev_setup()
434 err = ionic_watchdog_init(ionic); in ionic_dev_setup()
444 if (num_bars < 3 || !ionic->bars[IONIC_PCI_BAR_CMB].len) { in ionic_dev_setup()
454 void ionic_dev_teardown(struct ionic *ionic) in ionic_dev_teardown() argument
456 struct ionic_dev *idev = &ionic->idev; in ionic_dev_teardown()
468 if (ionic->wq) { in ionic_dev_teardown()
469 destroy_workqueue(ionic->wq); in ionic_dev_teardown()
470 ionic->wq = NULL; in ionic_dev_teardown()
501 int ionic_heartbeat_check(struct ionic *ionic) in ionic_heartbeat_check() argument
504 struct ionic_dev *idev = &ionic->idev; in ionic_heartbeat_check()
505 struct ionic_lif *lif = ionic->lif; in ionic_heartbeat_check()
521 dev_dbg(ionic->dev, "%s: do_check_time again\n", __func__); in ionic_heartbeat_check()
531 dev_info(ionic->dev, "FW generation 0x%02x -> 0x%02x\n", in ionic_heartbeat_check()
554 dev_dbg(ionic->dev, "fw_status 0x%02x ready %d idev->ready %d last_hb 0x%x state 0x%02lx\n", in ionic_heartbeat_check()
568 dev_info(ionic->dev, "FW stopped 0x%02x\n", fw_status); in ionic_heartbeat_check()
573 dev_info(ionic->dev, "FW running 0x%02x\n", fw_status); in ionic_heartbeat_check()
606 dev_dbg(ionic->dev, "%s: fw_hb %u last_fw_hb %u ready %u\n", in ionic_heartbeat_check()
615 dev_info(ionic->dev, "FW heartbeat stalled at %u\n", fw_hb); in ionic_heartbeat_check()
617 dev_info(ionic->dev, "FW heartbeat restored at %u\n", fw_hb); in ionic_heartbeat_check()
784 int ionic_set_vf_config(struct ionic *ionic, int vf, in ionic_set_vf_config() argument
796 mutex_lock(&ionic->dev_cmd_lock); in ionic_set_vf_config()
797 ionic_dev_cmd_go(&ionic->idev, &cmd); in ionic_set_vf_config()
798 err = ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT); in ionic_set_vf_config()
799 mutex_unlock(&ionic->dev_cmd_lock); in ionic_set_vf_config()
804 void ionic_vf_start(struct ionic *ionic) in ionic_vf_start() argument
811 if (!(ionic->ident.dev.capabilities & cpu_to_le64(IONIC_DEV_CAP_VF_CTRL))) in ionic_vf_start()
814 ionic_dev_cmd_go(&ionic->idev, &cmd); in ionic_vf_start()
815 ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT); in ionic_vf_start()
906 struct ionic_dev *idev = &lif->ionic->idev; in ionic_get_cmb()
965 struct ionic_dev *idev = &lif->ionic->idev; in ionic_put_cmb()
992 cq->idev = &lif->ionic->idev; in ionic_cq_init()