Lines Matching refs:qdev
3 int ql_unpause_mpi_risc(struct ql_adapter *qdev) in ql_unpause_mpi_risc() argument
8 tmp = ql_read32(qdev, CSR); in ql_unpause_mpi_risc()
12 ql_write32(qdev, CSR, CSR_CMD_CLR_PAUSE); in ql_unpause_mpi_risc()
16 int ql_pause_mpi_risc(struct ql_adapter *qdev) in ql_pause_mpi_risc() argument
22 ql_write32(qdev, CSR, CSR_CMD_SET_PAUSE); in ql_pause_mpi_risc()
24 tmp = ql_read32(qdev, CSR); in ql_pause_mpi_risc()
33 int ql_hard_reset_mpi_risc(struct ql_adapter *qdev) in ql_hard_reset_mpi_risc() argument
39 ql_write32(qdev, CSR, CSR_CMD_SET_RST); in ql_hard_reset_mpi_risc()
41 tmp = ql_read32(qdev, CSR); in ql_hard_reset_mpi_risc()
43 ql_write32(qdev, CSR, CSR_CMD_CLR_RST); in ql_hard_reset_mpi_risc()
52 int ql_read_mpi_reg(struct ql_adapter *qdev, u32 reg, u32 *data) in ql_read_mpi_reg() argument
56 status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR); in ql_read_mpi_reg()
60 ql_write32(qdev, PROC_ADDR, reg | PROC_ADDR_R); in ql_read_mpi_reg()
62 status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR); in ql_read_mpi_reg()
66 *data = ql_read32(qdev, PROC_DATA); in ql_read_mpi_reg()
71 int ql_write_mpi_reg(struct ql_adapter *qdev, u32 reg, u32 data) in ql_write_mpi_reg() argument
75 status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR); in ql_write_mpi_reg()
79 ql_write32(qdev, PROC_DATA, data); in ql_write_mpi_reg()
81 ql_write32(qdev, PROC_ADDR, reg); in ql_write_mpi_reg()
83 status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR); in ql_write_mpi_reg()
90 int ql_soft_reset_mpi_risc(struct ql_adapter *qdev) in ql_soft_reset_mpi_risc() argument
93 status = ql_write_mpi_reg(qdev, 0x00001010, 1); in ql_soft_reset_mpi_risc()
102 int ql_own_firmware(struct ql_adapter *qdev) in ql_own_firmware() argument
110 if (qdev->func < qdev->alt_func) in ql_own_firmware()
118 temp = ql_read32(qdev, STS); in ql_own_firmware()
119 if (!(temp & (1 << (8 + qdev->alt_func)))) in ql_own_firmware()
126 static int ql_get_mb_sts(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_get_mb_sts() argument
130 status = ql_sem_spinlock(qdev, SEM_PROC_REG_MASK); in ql_get_mb_sts()
135 ql_read_mpi_reg(qdev, qdev->mailbox_out + i, in ql_get_mb_sts()
138 netif_err(qdev, drv, qdev->ndev, "Failed mailbox read.\n"); in ql_get_mb_sts()
142 ql_sem_unlock(qdev, SEM_PROC_REG_MASK); /* does flush too */ in ql_get_mb_sts()
149 static int ql_wait_mbx_cmd_cmplt(struct ql_adapter *qdev) in ql_wait_mbx_cmd_cmplt() argument
155 value = ql_read32(qdev, STS); in ql_wait_mbx_cmd_cmplt()
166 static int ql_exec_mb_cmd(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_exec_mb_cmd() argument
174 if (ql_read32(qdev, CSR) & CSR_HRI) in ql_exec_mb_cmd()
177 status = ql_sem_spinlock(qdev, SEM_PROC_REG_MASK); in ql_exec_mb_cmd()
185 status = ql_write_mpi_reg(qdev, qdev->mailbox_in + i, in ql_exec_mb_cmd()
193 ql_write32(qdev, CSR, CSR_CMD_SET_H2R_INT); in ql_exec_mb_cmd()
195 ql_sem_unlock(qdev, SEM_PROC_REG_MASK); in ql_exec_mb_cmd()
206 static int ql_idc_req_aen(struct ql_adapter *qdev) in ql_idc_req_aen() argument
209 struct mbox_params *mbcp = &qdev->idc_mbc; in ql_idc_req_aen()
211 netif_err(qdev, drv, qdev->ndev, "Enter!\n"); in ql_idc_req_aen()
215 mbcp = &qdev->idc_mbc; in ql_idc_req_aen()
217 status = ql_get_mb_sts(qdev, mbcp); in ql_idc_req_aen()
219 netif_err(qdev, drv, qdev->ndev, in ql_idc_req_aen()
221 ql_queue_asic_error(qdev); in ql_idc_req_aen()
227 ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16)); in ql_idc_req_aen()
228 queue_delayed_work(qdev->workqueue, &qdev->mpi_idc_work, 0); in ql_idc_req_aen()
236 static int ql_idc_cmplt_aen(struct ql_adapter *qdev) in ql_idc_cmplt_aen() argument
239 struct mbox_params *mbcp = &qdev->idc_mbc; in ql_idc_cmplt_aen()
241 status = ql_get_mb_sts(qdev, mbcp); in ql_idc_cmplt_aen()
243 netif_err(qdev, drv, qdev->ndev, in ql_idc_cmplt_aen()
245 ql_queue_fw_error(qdev); in ql_idc_cmplt_aen()
250 complete(&qdev->ide_completion); in ql_idc_cmplt_aen()
255 static void ql_link_up(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_link_up() argument
260 status = ql_get_mb_sts(qdev, mbcp); in ql_link_up()
262 netif_err(qdev, drv, qdev->ndev, in ql_link_up()
267 qdev->link_status = mbcp->mbox_out[1]; in ql_link_up()
268 netif_err(qdev, drv, qdev->ndev, "Link Up.\n"); in ql_link_up()
273 if (test_bit(QL_CAM_RT_SET, &qdev->flags)) { in ql_link_up()
274 status = ql_cam_route_initialize(qdev); in ql_link_up()
276 netif_err(qdev, ifup, qdev->ndev, in ql_link_up()
280 clear_bit(QL_CAM_RT_SET, &qdev->flags); in ql_link_up()
287 if (!test_bit(QL_PORT_CFG, &qdev->flags)) { in ql_link_up()
288 netif_err(qdev, drv, qdev->ndev, "Queue Port Config Worker!\n"); in ql_link_up()
289 set_bit(QL_PORT_CFG, &qdev->flags); in ql_link_up()
294 ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16)); in ql_link_up()
295 queue_delayed_work(qdev->workqueue, in ql_link_up()
296 &qdev->mpi_port_cfg_work, 0); in ql_link_up()
299 ql_link_on(qdev); in ql_link_up()
302 static void ql_link_down(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_link_down() argument
308 status = ql_get_mb_sts(qdev, mbcp); in ql_link_down()
310 netif_err(qdev, drv, qdev->ndev, "Link down AEN broken!\n"); in ql_link_down()
312 ql_link_off(qdev); in ql_link_down()
315 static int ql_sfp_in(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_sfp_in() argument
321 status = ql_get_mb_sts(qdev, mbcp); in ql_sfp_in()
323 netif_err(qdev, drv, qdev->ndev, "SFP in AEN broken!\n"); in ql_sfp_in()
325 netif_err(qdev, drv, qdev->ndev, "SFP insertion detected.\n"); in ql_sfp_in()
330 static int ql_sfp_out(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_sfp_out() argument
336 status = ql_get_mb_sts(qdev, mbcp); in ql_sfp_out()
338 netif_err(qdev, drv, qdev->ndev, "SFP out AEN broken!\n"); in ql_sfp_out()
340 netif_err(qdev, drv, qdev->ndev, "SFP removal detected.\n"); in ql_sfp_out()
345 static int ql_aen_lost(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_aen_lost() argument
351 status = ql_get_mb_sts(qdev, mbcp); in ql_aen_lost()
353 netif_err(qdev, drv, qdev->ndev, "Lost AEN broken!\n"); in ql_aen_lost()
356 netif_err(qdev, drv, qdev->ndev, "Lost AEN detected.\n"); in ql_aen_lost()
358 netif_err(qdev, drv, qdev->ndev, "mbox_out[%d] = 0x%.08x.\n", in ql_aen_lost()
366 static void ql_init_fw_done(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_init_fw_done() argument
372 status = ql_get_mb_sts(qdev, mbcp); in ql_init_fw_done()
374 netif_err(qdev, drv, qdev->ndev, "Firmware did not initialize!\n"); in ql_init_fw_done()
376 netif_err(qdev, drv, qdev->ndev, "Firmware Revision = 0x%.08x.\n", in ql_init_fw_done()
378 qdev->fw_rev_id = mbcp->mbox_out[1]; in ql_init_fw_done()
379 status = ql_cam_route_initialize(qdev); in ql_init_fw_done()
381 netif_err(qdev, ifup, qdev->ndev, in ql_init_fw_done()
392 static int ql_mpi_handler(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_mpi_handler() argument
399 status = ql_get_mb_sts(qdev, mbcp); in ql_mpi_handler()
401 netif_err(qdev, drv, qdev->ndev, in ql_mpi_handler()
403 ql_queue_asic_error(qdev); in ql_mpi_handler()
427 status = ql_get_mb_sts(qdev, mbcp); in ql_mpi_handler()
436 status = ql_idc_req_aen(qdev); in ql_mpi_handler()
446 status = ql_idc_cmplt_aen(qdev); in ql_mpi_handler()
450 ql_link_up(qdev, mbcp); in ql_mpi_handler()
454 ql_link_down(qdev, mbcp); in ql_mpi_handler()
463 status = ql_get_mb_sts(qdev, mbcp); in ql_mpi_handler()
467 ql_init_fw_done(qdev, mbcp); in ql_mpi_handler()
471 ql_sfp_in(qdev, mbcp); in ql_mpi_handler()
475 ql_sfp_out(qdev, mbcp); in ql_mpi_handler()
487 status = ql_get_mb_sts(qdev, mbcp); in ql_mpi_handler()
491 netif_err(qdev, drv, qdev->ndev, in ql_mpi_handler()
494 ql_queue_fw_error(qdev); in ql_mpi_handler()
498 netif_err(qdev, drv, qdev->ndev, "System Error.\n"); in ql_mpi_handler()
499 ql_queue_fw_error(qdev); in ql_mpi_handler()
504 ql_aen_lost(qdev, mbcp); in ql_mpi_handler()
511 netif_err(qdev, drv, qdev->ndev, in ql_mpi_handler()
516 ql_write32(qdev, CSR, CSR_CMD_CLR_R2PCI_INT); in ql_mpi_handler()
532 static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp) in ql_mailbox_command() argument
537 mutex_lock(&qdev->mpi_mutex); in ql_mailbox_command()
540 ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16)); in ql_mailbox_command()
543 status = ql_exec_mb_cmd(qdev, mbcp); in ql_mailbox_command()
562 status = ql_wait_mbx_cmd_cmplt(qdev); in ql_mailbox_command()
571 status = ql_mpi_handler(qdev, mbcp); in ql_mailbox_command()
586 netif_err(qdev, drv, qdev->ndev, in ql_mailbox_command()
596 ql_write32(qdev, CSR, CSR_CMD_CLR_R2PCI_INT); in ql_mailbox_command()
606 ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16) | INTR_MASK_PI); in ql_mailbox_command()
607 mutex_unlock(&qdev->mpi_mutex); in ql_mailbox_command()
615 int ql_mb_about_fw(struct ql_adapter *qdev) in ql_mb_about_fw() argument
628 status = ql_mailbox_command(qdev, mbcp); in ql_mb_about_fw()
633 netif_err(qdev, drv, qdev->ndev, in ql_mb_about_fw()
639 qdev->fw_rev_id = mbcp->mbox_out[1]; in ql_mb_about_fw()
647 int ql_mb_get_fw_state(struct ql_adapter *qdev) in ql_mb_get_fw_state() argument
660 status = ql_mailbox_command(qdev, mbcp); in ql_mb_get_fw_state()
665 netif_err(qdev, drv, qdev->ndev, in ql_mb_get_fw_state()
675 netif_err(qdev, drv, qdev->ndev, in ql_mb_get_fw_state()
686 static int ql_mb_idc_ack(struct ql_adapter *qdev) in ql_mb_idc_ack() argument
698 mbcp->mbox_in[1] = qdev->idc_mbc.mbox_out[1]; in ql_mb_idc_ack()
699 mbcp->mbox_in[2] = qdev->idc_mbc.mbox_out[2]; in ql_mb_idc_ack()
700 mbcp->mbox_in[3] = qdev->idc_mbc.mbox_out[3]; in ql_mb_idc_ack()
701 mbcp->mbox_in[4] = qdev->idc_mbc.mbox_out[4]; in ql_mb_idc_ack()
703 status = ql_mailbox_command(qdev, mbcp); in ql_mb_idc_ack()
708 netif_err(qdev, drv, qdev->ndev, "Failed IDC ACK send.\n"); in ql_mb_idc_ack()
718 int ql_mb_set_port_cfg(struct ql_adapter *qdev) in ql_mb_set_port_cfg() argument
730 mbcp->mbox_in[1] = qdev->link_config; in ql_mb_set_port_cfg()
731 mbcp->mbox_in[2] = qdev->max_frame_size; in ql_mb_set_port_cfg()
734 status = ql_mailbox_command(qdev, mbcp); in ql_mb_set_port_cfg()
739 netif_err(qdev, drv, qdev->ndev, in ql_mb_set_port_cfg()
742 netif_err(qdev, drv, qdev->ndev, in ql_mb_set_port_cfg()
749 static int ql_mb_dump_ram(struct ql_adapter *qdev, u64 req_dma, u32 addr, in ql_mb_dump_ram() argument
772 status = ql_mailbox_command(qdev, mbcp); in ql_mb_dump_ram()
777 netif_err(qdev, drv, qdev->ndev, "Failed to dump risc RAM.\n"); in ql_mb_dump_ram()
784 int ql_dump_risc_ram_area(struct ql_adapter *qdev, void *buf, in ql_dump_risc_ram_area() argument
791 my_buf = pci_alloc_consistent(qdev->pdev, word_count * sizeof(u32), in ql_dump_risc_ram_area()
796 status = ql_mb_dump_ram(qdev, buf_dma, ram_addr, word_count); in ql_dump_risc_ram_area()
800 pci_free_consistent(qdev->pdev, word_count * sizeof(u32), my_buf, in ql_dump_risc_ram_area()
809 int ql_mb_get_port_cfg(struct ql_adapter *qdev) in ql_mb_get_port_cfg() argument
822 status = ql_mailbox_command(qdev, mbcp); in ql_mb_get_port_cfg()
827 netif_err(qdev, drv, qdev->ndev, in ql_mb_get_port_cfg()
831 netif_printk(qdev, drv, KERN_DEBUG, qdev->ndev, in ql_mb_get_port_cfg()
833 qdev->link_config = mbcp->mbox_out[1]; in ql_mb_get_port_cfg()
834 qdev->max_frame_size = mbcp->mbox_out[2]; in ql_mb_get_port_cfg()
839 int ql_mb_wol_mode(struct ql_adapter *qdev, u32 wol) in ql_mb_wol_mode() argument
854 status = ql_mailbox_command(qdev, mbcp); in ql_mb_wol_mode()
859 netif_err(qdev, drv, qdev->ndev, "Failed to set WOL mode.\n"); in ql_mb_wol_mode()
865 int ql_mb_wol_set_magic(struct ql_adapter *qdev, u32 enable_wol) in ql_mb_wol_set_magic() argument
870 u8 *addr = qdev->ndev->dev_addr; in ql_mb_wol_set_magic()
896 status = ql_mailbox_command(qdev, mbcp); in ql_mb_wol_set_magic()
901 netif_err(qdev, drv, qdev->ndev, "Failed to set WOL mode.\n"); in ql_mb_wol_set_magic()
914 static int ql_idc_wait(struct ql_adapter *qdev) in ql_idc_wait() argument
918 struct mbox_params *mbcp = &qdev->idc_mbc; in ql_idc_wait()
924 wait_for_completion_timeout(&qdev->ide_completion, in ql_idc_wait()
927 netif_err(qdev, drv, qdev->ndev, "IDC Timeout.\n"); in ql_idc_wait()
935 netif_err(qdev, drv, qdev->ndev, in ql_idc_wait()
939 netif_err(qdev, drv, qdev->ndev, "IDC Success.\n"); in ql_idc_wait()
943 netif_err(qdev, drv, qdev->ndev, in ql_idc_wait()
954 int ql_mb_set_led_cfg(struct ql_adapter *qdev, u32 led_config) in ql_mb_set_led_cfg() argument
969 status = ql_mailbox_command(qdev, mbcp); in ql_mb_set_led_cfg()
974 netif_err(qdev, drv, qdev->ndev, in ql_mb_set_led_cfg()
982 int ql_mb_get_led_cfg(struct ql_adapter *qdev) in ql_mb_get_led_cfg() argument
995 status = ql_mailbox_command(qdev, mbcp); in ql_mb_get_led_cfg()
1000 netif_err(qdev, drv, qdev->ndev, in ql_mb_get_led_cfg()
1004 qdev->led_config = mbcp->mbox_out[1]; in ql_mb_get_led_cfg()
1009 int ql_mb_set_mgmnt_traffic_ctl(struct ql_adapter *qdev, u32 control) in ql_mb_set_mgmnt_traffic_ctl() argument
1023 status = ql_mailbox_command(qdev, mbcp); in ql_mb_set_mgmnt_traffic_ctl()
1031 netif_err(qdev, drv, qdev->ndev, in ql_mb_set_mgmnt_traffic_ctl()
1039 netif_err(qdev, drv, qdev->ndev, in ql_mb_set_mgmnt_traffic_ctl()
1046 static int ql_mb_get_mgmnt_traffic_ctl(struct ql_adapter *qdev, u32 *control) in ql_mb_get_mgmnt_traffic_ctl() argument
1060 status = ql_mailbox_command(qdev, mbcp); in ql_mb_get_mgmnt_traffic_ctl()
1070 netif_err(qdev, drv, qdev->ndev, in ql_mb_get_mgmnt_traffic_ctl()
1074 netif_err(qdev, drv, qdev->ndev, in ql_mb_get_mgmnt_traffic_ctl()
1081 int ql_wait_fifo_empty(struct ql_adapter *qdev) in ql_wait_fifo_empty() argument
1088 nic_fifo_empty = ql_read32(qdev, STS) & STS_NFE; in ql_wait_fifo_empty()
1089 ql_mb_get_mgmnt_traffic_ctl(qdev, &mgmnt_fifo_empty); in ql_wait_fifo_empty()
1101 static int ql_set_port_cfg(struct ql_adapter *qdev) in ql_set_port_cfg() argument
1104 status = ql_mb_set_port_cfg(qdev); in ql_set_port_cfg()
1107 status = ql_idc_wait(qdev); in ql_set_port_cfg()
1121 struct ql_adapter *qdev = in ql_mpi_port_cfg_work() local
1125 status = ql_mb_get_port_cfg(qdev); in ql_mpi_port_cfg_work()
1127 netif_err(qdev, drv, qdev->ndev, in ql_mpi_port_cfg_work()
1132 if (qdev->link_config & CFG_JUMBO_FRAME_SIZE && in ql_mpi_port_cfg_work()
1133 qdev->max_frame_size == in ql_mpi_port_cfg_work()
1137 qdev->link_config |= CFG_JUMBO_FRAME_SIZE; in ql_mpi_port_cfg_work()
1138 qdev->max_frame_size = CFG_DEFAULT_MAX_FRAME_SIZE; in ql_mpi_port_cfg_work()
1139 status = ql_set_port_cfg(qdev); in ql_mpi_port_cfg_work()
1141 netif_err(qdev, drv, qdev->ndev, in ql_mpi_port_cfg_work()
1146 clear_bit(QL_PORT_CFG, &qdev->flags); in ql_mpi_port_cfg_work()
1149 ql_queue_fw_error(qdev); in ql_mpi_port_cfg_work()
1161 struct ql_adapter *qdev = in ql_mpi_idc_work() local
1164 struct mbox_params *mbcp = &qdev->idc_mbc; in ql_mpi_idc_work()
1173 netif_err(qdev, drv, qdev->ndev, in ql_mpi_idc_work()
1178 ql_link_off(qdev); in ql_mpi_idc_work()
1184 set_bit(QL_CAM_RT_SET, &qdev->flags); in ql_mpi_idc_work()
1187 status = ql_mb_idc_ack(qdev); in ql_mpi_idc_work()
1189 netif_err(qdev, drv, qdev->ndev, in ql_mpi_idc_work()
1192 netif_printk(qdev, drv, KERN_DEBUG, qdev->ndev, in ql_mpi_idc_work()
1209 ql_link_off(qdev); in ql_mpi_idc_work()
1210 set_bit(QL_CAM_RT_SET, &qdev->flags); in ql_mpi_idc_work()
1220 status = ql_mb_idc_ack(qdev); in ql_mpi_idc_work()
1222 netif_err(qdev, drv, qdev->ndev, in ql_mpi_idc_work()
1225 netif_printk(qdev, drv, KERN_DEBUG, qdev->ndev, in ql_mpi_idc_work()
1235 struct ql_adapter *qdev = in ql_mpi_work() local
1241 mutex_lock(&qdev->mpi_mutex); in ql_mpi_work()
1243 ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16)); in ql_mpi_work()
1245 while (ql_read32(qdev, STS) & STS_PI) { in ql_mpi_work()
1251 err = ql_mpi_handler(qdev, mbcp); in ql_mpi_work()
1257 ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16) | INTR_MASK_PI); in ql_mpi_work()
1258 mutex_unlock(&qdev->mpi_mutex); in ql_mpi_work()
1259 ql_enable_completion_interrupt(qdev, 0); in ql_mpi_work()
1264 struct ql_adapter *qdev = in ql_mpi_reset_work() local
1266 cancel_delayed_work_sync(&qdev->mpi_work); in ql_mpi_reset_work()
1267 cancel_delayed_work_sync(&qdev->mpi_port_cfg_work); in ql_mpi_reset_work()
1268 cancel_delayed_work_sync(&qdev->mpi_idc_work); in ql_mpi_reset_work()
1272 if (!ql_own_firmware(qdev)) { in ql_mpi_reset_work()
1273 netif_err(qdev, drv, qdev->ndev, "Don't own firmware!\n"); in ql_mpi_reset_work()
1277 if (qdev->mpi_coredump && !ql_core_dump(qdev, qdev->mpi_coredump)) { in ql_mpi_reset_work()
1278 netif_err(qdev, drv, qdev->ndev, "Core is dumped!\n"); in ql_mpi_reset_work()
1279 qdev->core_is_dumped = 1; in ql_mpi_reset_work()
1280 queue_delayed_work(qdev->workqueue, in ql_mpi_reset_work()
1281 &qdev->mpi_core_to_log, 5 * HZ); in ql_mpi_reset_work()
1283 ql_soft_reset_mpi_risc(qdev); in ql_mpi_reset_work()