Lines Matching refs:idev

133 	u8 asic_type = ionic->idev.dev_info.asic_type;
140 struct ionic_dev *idev = &ionic->idev;
146 atomic_long_set(&idev->last_check_time, jiffies - 2 * HZ);
147 idev->last_hb_time = jiffies - 2 * ionic->watchdog_period;
149 idev->last_fw_hb = 0;
150 idev->fw_hb_ready = true;
151 idev->fw_status_ready = true;
152 idev->fw_generation = IONIC_FW_STS_F_GENERATION &
153 ioread8(&idev->dev_info_regs->fw_status);
183 struct ionic_dev *idev = &ionic->idev;
185 idev->dev_info.asic_type = ioread8(&idev->dev_info_regs->asic_type);
186 idev->dev_info.asic_rev = ioread8(&idev->dev_info_regs->asic_rev);
188 memcpy_fromio(idev->dev_info.fw_version,
189 idev->dev_info_regs->fw_version,
192 memcpy_fromio(idev->dev_info.serial_num,
193 idev->dev_info_regs->serial_num,
196 idev->dev_info.fw_version[IONIC_DEVINFO_FWVERS_BUFLEN] = 0;
197 idev->dev_info.serial_num[IONIC_DEVINFO_SERIAL_BUFLEN] = 0;
199 dev_dbg(ionic->dev, "fw_version %s\n", idev->dev_info.fw_version);
206 struct ionic_dev *idev = &ionic->idev;
224 idev->dev_info_regs = bar->vaddr + IONIC_BAR0_DEV_INFO_REGS_OFFSET;
225 idev->dev_cmd_regs = bar->vaddr + IONIC_BAR0_DEV_CMD_REGS_OFFSET;
226 idev->intr_status = bar->vaddr + IONIC_BAR0_INTR_STATUS_OFFSET;
227 idev->intr_ctrl = bar->vaddr + IONIC_BAR0_INTR_CTRL_OFFSET;
229 idev->hwstamp_regs = &idev->dev_info_regs->hwstamp;
231 sig = ioread32(&idev->dev_info_regs->signature);
250 idev->db_pages = bar->vaddr;
251 idev->phy_db_pages = bar->bus_addr;
255 mutex_init(&idev->cmb_inuse_lock);
257 idev->cmb_inuse = NULL;
261 idev->phy_cmb_pages = bar->bus_addr;
262 idev->cmb_npages = bar->len / PAGE_SIZE;
263 size = BITS_TO_LONGS(idev->cmb_npages) * sizeof(long);
264 idev->cmb_inuse = kzalloc(size, GFP_KERNEL);
265 if (!idev->cmb_inuse)
273 struct ionic_dev *idev = &ionic->idev;
275 kfree(idev->cmb_inuse);
276 idev->cmb_inuse = NULL;
277 idev->phy_cmb_pages = 0;
278 idev->cmb_npages = 0;
284 mutex_destroy(&idev->cmb_inuse_lock);
288 static bool __ionic_is_fw_running(struct ionic_dev *idev, u8 *status_ptr)
292 if (!idev->dev_info_regs) {
298 fw_status = ioread8(&idev->dev_info_regs->fw_status);
308 bool ionic_is_fw_running(struct ionic_dev *idev)
310 return __ionic_is_fw_running(idev, NULL);
316 struct ionic_dev *idev = &ionic->idev;
326 last_check_time = atomic_long_read(&idev->last_check_time);
330 if (!atomic_long_try_cmpxchg_relaxed(&idev->last_check_time,
338 if (!__ionic_is_fw_running(idev, &fw_status)) {
342 if (idev->fw_generation != fw_generation) {
344 idev->fw_generation, fw_generation);
346 idev->fw_generation = fw_generation;
356 * so we fake the current idev->fw_status_ready here to
360 idev->fw_status_ready = false; /* go to running */
366 dev_dbg(ionic->dev, "fw_status 0x%02x ready %d idev->ready %d last_hb 0x%x state 0x%02lx\n",
367 fw_status, fw_status_ready, idev->fw_status_ready,
368 idev->last_fw_hb, lif->state[0]);
371 if (fw_status_ready != idev->fw_status_ready &&
375 idev->fw_status_ready = fw_status_ready;
401 if (!idev->fw_status_ready)
407 last_check_time = idev->last_hb_time;
411 fw_hb = ioread32(&idev->dev_info_regs->fw_heartbeat);
412 fw_hb_ready = fw_hb != idev->last_fw_hb;
419 __func__, fw_hb, idev->last_fw_hb, fw_hb_ready);
421 idev->last_fw_hb = fw_hb;
424 if (fw_hb_ready != idev->fw_hb_ready) {
425 idev->fw_hb_ready = fw_hb_ready;
435 idev->last_hb_time = check_time;
440 u8 ionic_dev_cmd_status(struct ionic_dev *idev)
442 if (!idev->dev_cmd_regs)
444 return ioread8(&idev->dev_cmd_regs->comp.comp.status);
447 bool ionic_dev_cmd_done(struct ionic_dev *idev)
449 if (!idev->dev_cmd_regs)
451 return ioread32(&idev->dev_cmd_regs->done) & IONIC_DEV_CMD_DONE;
454 void ionic_dev_cmd_comp(struct ionic_dev *idev, union ionic_dev_cmd_comp *comp)
456 if (!idev->dev_cmd_regs)
458 memcpy_fromio(comp, &idev->dev_cmd_regs->comp, sizeof(*comp));
461 void ionic_dev_cmd_go(struct ionic_dev *idev, union ionic_dev_cmd *cmd)
463 idev->opcode = cmd->cmd.opcode;
465 if (!idev->dev_cmd_regs)
468 memcpy_toio(&idev->dev_cmd_regs->cmd, cmd, sizeof(*cmd));
469 iowrite32(0, &idev->dev_cmd_regs->done);
470 iowrite32(1, &idev->dev_cmd_regs->doorbell);
474 void ionic_dev_cmd_identify(struct ionic_dev *idev, u8 ver)
481 ionic_dev_cmd_go(idev, &cmd);
484 void ionic_dev_cmd_init(struct ionic_dev *idev)
491 ionic_dev_cmd_go(idev, &cmd);
494 void ionic_dev_cmd_reset(struct ionic_dev *idev)
500 ionic_dev_cmd_go(idev, &cmd);
504 void ionic_dev_cmd_port_identify(struct ionic_dev *idev)
511 ionic_dev_cmd_go(idev, &cmd);
514 void ionic_dev_cmd_port_init(struct ionic_dev *idev)
519 .port_init.info_pa = cpu_to_le64(idev->port_info_pa),
522 ionic_dev_cmd_go(idev, &cmd);
525 void ionic_dev_cmd_port_reset(struct ionic_dev *idev)
532 ionic_dev_cmd_go(idev, &cmd);
535 void ionic_dev_cmd_port_state(struct ionic_dev *idev, u8 state)
544 ionic_dev_cmd_go(idev, &cmd);
547 void ionic_dev_cmd_port_speed(struct ionic_dev *idev, u32 speed)
556 ionic_dev_cmd_go(idev, &cmd);
559 void ionic_dev_cmd_port_autoneg(struct ionic_dev *idev, u8 an_enable)
568 ionic_dev_cmd_go(idev, &cmd);
571 void ionic_dev_cmd_port_fec(struct ionic_dev *idev, u8 fec_type)
580 ionic_dev_cmd_go(idev, &cmd);
583 void ionic_dev_cmd_port_pause(struct ionic_dev *idev, u8 pause_type)
592 ionic_dev_cmd_go(idev, &cmd);
609 ionic_dev_cmd_go(&ionic->idev, &cmd);
626 ionic_dev_cmd_go(&ionic->idev, &cmd);
631 void ionic_dev_cmd_queue_identify(struct ionic_dev *idev,
641 ionic_dev_cmd_go(idev, &cmd);
644 void ionic_dev_cmd_lif_identify(struct ionic_dev *idev, u8 type, u8 ver)
652 ionic_dev_cmd_go(idev, &cmd);
655 void ionic_dev_cmd_lif_init(struct ionic_dev *idev, u16 lif_index,
664 ionic_dev_cmd_go(idev, &cmd);
667 void ionic_dev_cmd_lif_reset(struct ionic_dev *idev, u16 lif_index)
674 ionic_dev_cmd_go(idev, &cmd);
677 void ionic_dev_cmd_adminq_init(struct ionic_dev *idev, struct ionic_qcq *qcq,
698 ionic_dev_cmd_go(idev, &cmd);
708 struct ionic_dev *idev = &lif->ionic->idev;
711 mutex_lock(&idev->cmb_inuse_lock);
712 ret = bitmap_find_free_region(idev->cmb_inuse, idev->cmb_npages, order);
713 mutex_unlock(&idev->cmb_inuse_lock);
719 *pgaddr = idev->phy_cmb_pages + ret * PAGE_SIZE;
726 struct ionic_dev *idev = &lif->ionic->idev;
728 mutex_lock(&idev->cmb_inuse_lock);
729 bitmap_release_region(idev->cmb_inuse, pgid, order);
730 mutex_unlock(&idev->cmb_inuse_lock);
752 cq->idev = &lif->ionic->idev;
782 int ionic_q_init(struct ionic_lif *lif, struct ionic_dev *idev,