Lines Matching full:crq

158 	union ibmvnic_crq crq;  in send_crq_init_complete()  local
160 memset(&crq, 0, sizeof(crq)); in send_crq_init_complete()
161 crq.generic.first = IBMVNIC_CRQ_INIT_CMD; in send_crq_init_complete()
162 crq.generic.cmd = IBMVNIC_CRQ_INIT_COMPLETE; in send_crq_init_complete()
164 return ibmvnic_send_crq(adapter, &crq); in send_crq_init_complete()
169 union ibmvnic_crq crq; in send_version_xchg() local
171 memset(&crq, 0, sizeof(crq)); in send_version_xchg()
172 crq.version_exchange.first = IBMVNIC_CRQ_CMD; in send_version_xchg()
173 crq.version_exchange.cmd = VERSION_EXCHANGE; in send_version_xchg()
174 crq.version_exchange.version = cpu_to_be16(ibmvnic_version); in send_version_xchg()
176 return ibmvnic_send_crq(adapter, &crq); in send_version_xchg()
403 if (!adapter->crq.active) { in ibmvnic_wait_for_completion()
1603 * pass since we are re-initializing the CRQ in ibmvnic_login()
1610 * device freeing and registering a CRQ too in ibmvnic_login()
1624 netdev_err(netdev, "login recovery: init CRQ failed %d\n", in ibmvnic_login()
1684 union ibmvnic_crq crq; in set_link_state() local
1690 memset(&crq, 0, sizeof(crq)); in set_link_state()
1691 crq.logical_link_state.first = IBMVNIC_CRQ_CMD; in set_link_state()
1692 crq.logical_link_state.cmd = LOGICAL_LINK_STATE; in set_link_state()
1693 crq.logical_link_state.link_state = link_state; in set_link_state()
1699 rc = ibmvnic_send_crq(adapter, &crq); in set_link_state()
1749 union ibmvnic_crq crq; in ibmvnic_get_vpd() local
1760 crq.get_vpd_size.first = IBMVNIC_CRQ_CMD; in ibmvnic_get_vpd()
1761 crq.get_vpd_size.cmd = GET_VPD_SIZE; in ibmvnic_get_vpd()
1762 rc = ibmvnic_send_crq(adapter, &crq); in ibmvnic_get_vpd()
1805 crq.get_vpd.first = IBMVNIC_CRQ_CMD; in ibmvnic_get_vpd()
1806 crq.get_vpd.cmd = GET_VPD; in ibmvnic_get_vpd()
1807 crq.get_vpd.ioba = cpu_to_be32(adapter->vpd->dma_addr); in ibmvnic_get_vpd()
1808 crq.get_vpd.len = cpu_to_be32((u32)adapter->vpd->len); in ibmvnic_get_vpd()
1809 rc = ibmvnic_send_crq(adapter, &crq); in ibmvnic_get_vpd()
1874 /* We're ready to receive frames, enable the sub-crq interrupts and in __ibmvnic_open()
2663 union ibmvnic_crq crq; in ibmvnic_set_multi() local
2665 memset(&crq, 0, sizeof(crq)); in ibmvnic_set_multi()
2666 crq.request_capability.first = IBMVNIC_CRQ_CMD; in ibmvnic_set_multi()
2667 crq.request_capability.cmd = REQUEST_CAPABILITY; in ibmvnic_set_multi()
2675 memset(&crq, 0, sizeof(crq)); in ibmvnic_set_multi()
2676 crq.multicast_ctrl.first = IBMVNIC_CRQ_CMD; in ibmvnic_set_multi()
2677 crq.multicast_ctrl.cmd = MULTICAST_CTRL; in ibmvnic_set_multi()
2678 crq.multicast_ctrl.flags = IBMVNIC_ENABLE_ALL; in ibmvnic_set_multi()
2679 ibmvnic_send_crq(adapter, &crq); in ibmvnic_set_multi()
2682 memset(&crq, 0, sizeof(crq)); in ibmvnic_set_multi()
2683 crq.multicast_ctrl.first = IBMVNIC_CRQ_CMD; in ibmvnic_set_multi()
2684 crq.multicast_ctrl.cmd = MULTICAST_CTRL; in ibmvnic_set_multi()
2685 crq.multicast_ctrl.flags = IBMVNIC_DISABLE_ALL; in ibmvnic_set_multi()
2686 ibmvnic_send_crq(adapter, &crq); in ibmvnic_set_multi()
2690 memset(&crq, 0, sizeof(crq)); in ibmvnic_set_multi()
2691 crq.multicast_ctrl.first = IBMVNIC_CRQ_CMD; in ibmvnic_set_multi()
2692 crq.multicast_ctrl.cmd = MULTICAST_CTRL; in ibmvnic_set_multi()
2693 crq.multicast_ctrl.flags = IBMVNIC_ENABLE_MC; in ibmvnic_set_multi()
2694 ether_addr_copy(&crq.multicast_ctrl.mac_addr[0], in ibmvnic_set_multi()
2696 ibmvnic_send_crq(adapter, &crq); in ibmvnic_set_multi()
2705 union ibmvnic_crq crq; in __ibmvnic_set_mac() local
2713 memset(&crq, 0, sizeof(crq)); in __ibmvnic_set_mac()
2714 crq.change_mac_addr.first = IBMVNIC_CRQ_CMD; in __ibmvnic_set_mac()
2715 crq.change_mac_addr.cmd = CHANGE_MAC_ADDR; in __ibmvnic_set_mac()
2716 ether_addr_copy(&crq.change_mac_addr.mac_addr[0], dev_addr); in __ibmvnic_set_mac()
2722 rc = ibmvnic_send_crq(adapter, &crq); in __ibmvnic_set_mac()
2783 * can get a transport event just after registering the CRQ and the
2786 * regisering the CRQ.
2920 "Reset couldn't initialize crq. rc=%d\n", rc); in do_reset()
3050 "Couldn't initialize crq. rc=%d\n", rc); in do_hard_reset()
3140 adapter->crq.active = true; in do_passive_init()
3164 dev_err(dev, "Failed to initialize sub crq irqs\n, rc=%d", rc); in do_passive_init()
3848 union ibmvnic_crq crq; in ibmvnic_get_ethtool_stats() local
3852 memset(&crq, 0, sizeof(crq)); in ibmvnic_get_ethtool_stats()
3853 crq.request_statistics.first = IBMVNIC_CRQ_CMD; in ibmvnic_get_ethtool_stats()
3854 crq.request_statistics.cmd = REQUEST_STATISTICS; in ibmvnic_get_ethtool_stats()
3855 crq.request_statistics.ioba = cpu_to_be32(adapter->stats_token); in ibmvnic_get_ethtool_stats()
3856 crq.request_statistics.len = in ibmvnic_get_ethtool_stats()
3861 rc = ibmvnic_send_crq(adapter, &crq); in ibmvnic_get_ethtool_stats()
3974 netdev_dbg(adapter->netdev, "Releasing sub-CRQ\n"); in release_sub_crq_queue()
3986 "Failed to release sub-CRQ %16lx, rc = %ld\n", in release_sub_crq_queue()
4017 dev_warn(dev, "Couldn't allocate crq queue messages page\n"); in init_sub_crq_queue()
4026 dev_warn(dev, "Couldn't map crq queue messages page\n"); in init_sub_crq_queue()
4039 dev_warn(dev, "Error %d registering sub-crq\n", rc); in init_sub_crq_queue()
4059 "sub-crq initialized, num %lx, hw_irq=%lx, irq=%x\n", in init_sub_crq_queue()
4479 union ibmvnic_crq crq; in send_request_cap() local
4495 /* Sub-CRQ entries are 32 byte long */ in send_request_cap()
4502 dev_err(dev, "Fatal, invalid entries per sub-crq\n"); in send_request_cap()
4563 memset(&crq, 0, sizeof(crq)); in send_request_cap()
4564 crq.request_capability.first = IBMVNIC_CRQ_CMD; in send_request_cap()
4565 crq.request_capability.cmd = REQUEST_CAPABILITY; in send_request_cap()
4567 crq.request_capability.capability = cpu_to_be16(REQ_TX_QUEUES); in send_request_cap()
4568 crq.request_capability.number = cpu_to_be64(adapter->req_tx_queues); in send_request_cap()
4570 ibmvnic_send_crq(adapter, &crq); in send_request_cap()
4572 crq.request_capability.capability = cpu_to_be16(REQ_RX_QUEUES); in send_request_cap()
4573 crq.request_capability.number = cpu_to_be64(adapter->req_rx_queues); in send_request_cap()
4575 ibmvnic_send_crq(adapter, &crq); in send_request_cap()
4577 crq.request_capability.capability = cpu_to_be16(REQ_RX_ADD_QUEUES); in send_request_cap()
4578 crq.request_capability.number = cpu_to_be64(adapter->req_rx_add_queues); in send_request_cap()
4580 ibmvnic_send_crq(adapter, &crq); in send_request_cap()
4582 crq.request_capability.capability = in send_request_cap()
4584 crq.request_capability.number = in send_request_cap()
4587 ibmvnic_send_crq(adapter, &crq); in send_request_cap()
4589 crq.request_capability.capability = in send_request_cap()
4591 crq.request_capability.number = in send_request_cap()
4594 ibmvnic_send_crq(adapter, &crq); in send_request_cap()
4596 crq.request_capability.capability = cpu_to_be16(REQ_MTU); in send_request_cap()
4597 crq.request_capability.number = cpu_to_be64(adapter->req_mtu); in send_request_cap()
4599 ibmvnic_send_crq(adapter, &crq); in send_request_cap()
4603 crq.request_capability.capability = in send_request_cap()
4605 crq.request_capability.number = cpu_to_be64(1); in send_request_cap()
4607 ibmvnic_send_crq(adapter, &crq); in send_request_cap()
4610 crq.request_capability.capability = in send_request_cap()
4612 crq.request_capability.number = cpu_to_be64(0); in send_request_cap()
4614 ibmvnic_send_crq(adapter, &crq); in send_request_cap()
4665 struct ibmvnic_crq_queue *queue = &adapter->crq; in ibmvnic_next_crq()
4666 union ibmvnic_crq *crq; in ibmvnic_next_crq() local
4668 crq = &queue->msgs[queue->cur]; in ibmvnic_next_crq()
4669 if (crq->generic.first & IBMVNIC_CRQ_CMD_RSP) { in ibmvnic_next_crq()
4673 crq = NULL; in ibmvnic_next_crq()
4676 return crq; in ibmvnic_next_crq()
4718 union ibmvnic_crq *crq) in ibmvnic_send_crq() argument
4722 u64 *u64_crq = (u64 *)crq; in ibmvnic_send_crq()
4725 netdev_dbg(adapter->netdev, "Sending CRQ: %016lx %016lx\n", in ibmvnic_send_crq()
4729 if (!adapter->crq.active && in ibmvnic_send_crq()
4730 crq->generic.first != IBMVNIC_CRQ_INIT_CMD) { in ibmvnic_send_crq()
4731 …dev_warn(dev, "Invalid request detected while CRQ is inactive, possible device state change during… in ibmvnic_send_crq()
4744 dev_warn(dev, "CRQ Queue closed\n"); in ibmvnic_send_crq()
4757 union ibmvnic_crq crq; in ibmvnic_send_crq_init() local
4761 memset(&crq, 0, sizeof(crq)); in ibmvnic_send_crq_init()
4762 crq.generic.first = IBMVNIC_CRQ_INIT_CMD; in ibmvnic_send_crq_init()
4763 crq.generic.cmd = IBMVNIC_CRQ_INIT; in ibmvnic_send_crq_init()
4764 netdev_dbg(adapter->netdev, "Sending CRQ init\n"); in ibmvnic_send_crq_init()
4767 rc = ibmvnic_send_crq(adapter, &crq); in ibmvnic_send_crq_init()
4853 union ibmvnic_crq crq; in send_login() local
4957 memset(&crq, 0, sizeof(crq)); in send_login()
4958 crq.login.first = IBMVNIC_CRQ_CMD; in send_login()
4959 crq.login.cmd = LOGIN; in send_login()
4960 crq.login.ioba = cpu_to_be32(buffer_token); in send_login()
4961 crq.login.len = cpu_to_be32(buffer_size); in send_login()
4964 rc = ibmvnic_send_crq(adapter, &crq); in send_login()
4991 union ibmvnic_crq crq; in send_request_map() local
4993 memset(&crq, 0, sizeof(crq)); in send_request_map()
4994 crq.request_map.first = IBMVNIC_CRQ_CMD; in send_request_map()
4995 crq.request_map.cmd = REQUEST_MAP; in send_request_map()
4996 crq.request_map.map_id = map_id; in send_request_map()
4997 crq.request_map.ioba = cpu_to_be32(addr); in send_request_map()
4998 crq.request_map.len = cpu_to_be32(len); in send_request_map()
4999 return ibmvnic_send_crq(adapter, &crq); in send_request_map()
5004 union ibmvnic_crq crq; in send_request_unmap() local
5006 memset(&crq, 0, sizeof(crq)); in send_request_unmap()
5007 crq.request_unmap.first = IBMVNIC_CRQ_CMD; in send_request_unmap()
5008 crq.request_unmap.cmd = REQUEST_UNMAP; in send_request_unmap()
5009 crq.request_unmap.map_id = map_id; in send_request_unmap()
5010 return ibmvnic_send_crq(adapter, &crq); in send_request_unmap()
5015 union ibmvnic_crq crq; in send_query_map() local
5017 memset(&crq, 0, sizeof(crq)); in send_query_map()
5018 crq.query_map.first = IBMVNIC_CRQ_CMD; in send_query_map()
5019 crq.query_map.cmd = QUERY_MAP; in send_query_map()
5020 ibmvnic_send_crq(adapter, &crq); in send_query_map()
5026 union ibmvnic_crq crq; in send_query_cap() local
5037 memset(&crq, 0, sizeof(crq)); in send_query_cap()
5038 crq.query_capability.first = IBMVNIC_CRQ_CMD; in send_query_cap()
5039 crq.query_capability.cmd = QUERY_CAPABILITY; in send_query_cap()
5041 crq.query_capability.capability = cpu_to_be16(MIN_TX_QUEUES); in send_query_cap()
5042 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5045 crq.query_capability.capability = cpu_to_be16(MIN_RX_QUEUES); in send_query_cap()
5046 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5049 crq.query_capability.capability = cpu_to_be16(MIN_RX_ADD_QUEUES); in send_query_cap()
5050 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5053 crq.query_capability.capability = cpu_to_be16(MAX_TX_QUEUES); in send_query_cap()
5054 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5057 crq.query_capability.capability = cpu_to_be16(MAX_RX_QUEUES); in send_query_cap()
5058 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5061 crq.query_capability.capability = cpu_to_be16(MAX_RX_ADD_QUEUES); in send_query_cap()
5062 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5065 crq.query_capability.capability = in send_query_cap()
5067 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5070 crq.query_capability.capability = in send_query_cap()
5072 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5075 crq.query_capability.capability = in send_query_cap()
5077 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5080 crq.query_capability.capability = in send_query_cap()
5082 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5085 crq.query_capability.capability = cpu_to_be16(TCP_IP_OFFLOAD); in send_query_cap()
5086 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5089 crq.query_capability.capability = cpu_to_be16(PROMISC_SUPPORTED); in send_query_cap()
5090 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5093 crq.query_capability.capability = cpu_to_be16(MIN_MTU); in send_query_cap()
5094 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5097 crq.query_capability.capability = cpu_to_be16(MAX_MTU); in send_query_cap()
5098 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5101 crq.query_capability.capability = cpu_to_be16(MAX_MULTICAST_FILTERS); in send_query_cap()
5102 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5105 crq.query_capability.capability = cpu_to_be16(VLAN_HEADER_INSERTION); in send_query_cap()
5106 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5109 crq.query_capability.capability = cpu_to_be16(RX_VLAN_HEADER_INSERTION); in send_query_cap()
5110 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5113 crq.query_capability.capability = cpu_to_be16(MAX_TX_SG_ENTRIES); in send_query_cap()
5114 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5117 crq.query_capability.capability = cpu_to_be16(RX_SG_SUPPORTED); in send_query_cap()
5118 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5121 crq.query_capability.capability = cpu_to_be16(OPT_TX_COMP_SUB_QUEUES); in send_query_cap()
5122 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5125 crq.query_capability.capability = cpu_to_be16(OPT_RX_COMP_QUEUES); in send_query_cap()
5126 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5129 crq.query_capability.capability = in send_query_cap()
5131 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5134 crq.query_capability.capability = in send_query_cap()
5136 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5139 crq.query_capability.capability = in send_query_cap()
5141 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5144 crq.query_capability.capability = cpu_to_be16(TX_RX_DESC_REQ); in send_query_cap()
5146 ibmvnic_send_crq(adapter, &crq); in send_query_cap()
5159 union ibmvnic_crq crq; in send_query_ip_offload() local
5173 memset(&crq, 0, sizeof(crq)); in send_query_ip_offload()
5174 crq.query_ip_offload.first = IBMVNIC_CRQ_CMD; in send_query_ip_offload()
5175 crq.query_ip_offload.cmd = QUERY_IP_OFFLOAD; in send_query_ip_offload()
5176 crq.query_ip_offload.len = cpu_to_be32(buf_sz); in send_query_ip_offload()
5177 crq.query_ip_offload.ioba = in send_query_ip_offload()
5180 ibmvnic_send_crq(adapter, &crq); in send_query_ip_offload()
5189 union ibmvnic_crq crq; in send_control_ip_offload() local
5253 memset(&crq, 0, sizeof(crq)); in send_control_ip_offload()
5254 crq.control_ip_offload.first = IBMVNIC_CRQ_CMD; in send_control_ip_offload()
5255 crq.control_ip_offload.cmd = CONTROL_IP_OFFLOAD; in send_control_ip_offload()
5256 crq.control_ip_offload.len = in send_control_ip_offload()
5258 crq.control_ip_offload.ioba = cpu_to_be32(adapter->ip_offload_ctrl_tok); in send_control_ip_offload()
5259 ibmvnic_send_crq(adapter, &crq); in send_control_ip_offload()
5262 static void handle_vpd_size_rsp(union ibmvnic_crq *crq, in handle_vpd_size_rsp() argument
5267 if (crq->get_vpd_size_rsp.rc.code) { in handle_vpd_size_rsp()
5269 crq->get_vpd_size_rsp.rc.code); in handle_vpd_size_rsp()
5274 adapter->vpd->len = be64_to_cpu(crq->get_vpd_size_rsp.len); in handle_vpd_size_rsp()
5278 static void handle_vpd_rsp(union ibmvnic_crq *crq, in handle_vpd_rsp() argument
5290 if (crq->get_vpd_rsp.rc.code) { in handle_vpd_rsp()
5292 crq->get_vpd_rsp.rc.code); in handle_vpd_rsp()
5404 static void handle_error_indication(union ibmvnic_crq *crq, in handle_error_indication() argument
5410 cause = be16_to_cpu(crq->error_indication.error_cause); in handle_error_indication()
5414 crq->error_indication.flags in handle_error_indication()
5418 if (crq->error_indication.flags & IBMVNIC_FATAL_ERROR) in handle_error_indication()
5424 static int handle_change_mac_rsp(union ibmvnic_crq *crq, in handle_change_mac_rsp() argument
5431 rc = crq->change_mac_addr_rsp.rc.code; in handle_change_mac_rsp()
5436 /* crq->change_mac_addr.mac_addr is the requested one in handle_change_mac_rsp()
5437 * crq->change_mac_addr_rsp.mac_addr is the returned valid one. in handle_change_mac_rsp()
5439 eth_hw_addr_set(netdev, &crq->change_mac_addr_rsp.mac_addr[0]); in handle_change_mac_rsp()
5441 &crq->change_mac_addr_rsp.mac_addr[0]); in handle_change_mac_rsp()
5447 static void handle_request_cap_rsp(union ibmvnic_crq *crq, in handle_request_cap_rsp() argument
5457 switch (be16_to_cpu(crq->request_capability_rsp.capability)) { in handle_request_cap_rsp()
5488 crq->request_capability.capability); in handle_request_cap_rsp()
5492 switch (crq->request_capability_rsp.rc.code) { in handle_request_cap_rsp()
5498 (long)be64_to_cpu(crq->request_capability_rsp.number), in handle_request_cap_rsp()
5501 if (be16_to_cpu(crq->request_capability_rsp.capability) == in handle_request_cap_rsp()
5508 be64_to_cpu(crq->request_capability_rsp.number); in handle_request_cap_rsp()
5515 crq->request_capability_rsp.rc.code); in handle_request_cap_rsp()
5589 * 2 outstanding login requests sent, the LOGIN_RSP crq in handle_login_rsp()
5628 static void handle_request_unmap_rsp(union ibmvnic_crq *crq, in handle_request_unmap_rsp() argument
5634 rc = crq->request_unmap_rsp.rc.code; in handle_request_unmap_rsp()
5639 static void handle_query_map_rsp(union ibmvnic_crq *crq, in handle_query_map_rsp() argument
5646 rc = crq->query_map_rsp.rc.code; in handle_query_map_rsp()
5652 crq->query_map_rsp.page_size, in handle_query_map_rsp()
5653 __be32_to_cpu(crq->query_map_rsp.tot_pages), in handle_query_map_rsp()
5654 __be32_to_cpu(crq->query_map_rsp.free_pages)); in handle_query_map_rsp()
5657 static void handle_query_cap_rsp(union ibmvnic_crq *crq, in handle_query_cap_rsp() argument
5667 rc = crq->query_capability.rc.code; in handle_query_cap_rsp()
5673 switch (be16_to_cpu(crq->query_capability.capability)) { in handle_query_cap_rsp()
5676 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5682 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5688 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5694 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5700 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5706 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5712 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5718 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5724 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5730 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5736 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5742 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5747 adapter->min_mtu = be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5752 adapter->max_mtu = be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5758 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5764 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5772 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5778 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5784 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5790 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5796 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5802 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5808 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5814 be64_to_cpu(crq->query_capability.number); in handle_query_cap_rsp()
5819 adapter->tx_rx_desc_req = crq->query_capability.number; in handle_query_cap_rsp()
5826 crq->query_capability.capability); in handle_query_cap_rsp()
5836 union ibmvnic_crq crq; in send_query_phys_parms() local
5839 memset(&crq, 0, sizeof(crq)); in send_query_phys_parms()
5840 crq.query_phys_parms.first = IBMVNIC_CRQ_CMD; in send_query_phys_parms()
5841 crq.query_phys_parms.cmd = QUERY_PHYS_PARMS; in send_query_phys_parms()
5847 rc = ibmvnic_send_crq(adapter, &crq); in send_query_phys_parms()
5863 static int handle_query_phys_parms_rsp(union ibmvnic_crq *crq, in handle_query_phys_parms_rsp() argument
5868 __be32 rspeed = cpu_to_be32(crq->query_phys_parms_rsp.speed); in handle_query_phys_parms_rsp()
5870 rc = crq->query_phys_parms_rsp.rc.code; in handle_query_phys_parms_rsp()
5908 if (crq->query_phys_parms_rsp.flags1 & IBMVNIC_FULL_DUPLEX) in handle_query_phys_parms_rsp()
5910 else if (crq->query_phys_parms_rsp.flags1 & IBMVNIC_HALF_DUPLEX) in handle_query_phys_parms_rsp()
5918 static void ibmvnic_handle_crq(union ibmvnic_crq *crq, in ibmvnic_handle_crq() argument
5921 struct ibmvnic_generic_crq *gen_crq = &crq->generic; in ibmvnic_handle_crq()
5924 u64 *u64_crq = (u64 *)crq; in ibmvnic_handle_crq()
5927 netdev_dbg(netdev, "Handling CRQ: %016lx %016lx\n", in ibmvnic_handle_crq()
5971 adapter->crq.active = true; in ibmvnic_handle_crq()
5975 dev_err(dev, "Unknown crq cmd: %d\n", gen_crq->cmd); in ibmvnic_handle_crq()
5980 adapter->crq.active = false; in ibmvnic_handle_crq()
5989 /* if we got here during crq-init, retry crq-init */ in ibmvnic_handle_crq()
6022 rc = crq->version_exchange_rsp.rc.code; in ibmvnic_handle_crq()
6028 be16_to_cpu(crq->version_exchange_rsp.version); in ibmvnic_handle_crq()
6034 handle_query_cap_rsp(crq, adapter); in ibmvnic_handle_crq()
6037 handle_query_map_rsp(crq, adapter); in ibmvnic_handle_crq()
6040 adapter->fw_done_rc = crq->request_map_rsp.rc.code; in ibmvnic_handle_crq()
6044 handle_request_unmap_rsp(crq, adapter); in ibmvnic_handle_crq()
6047 handle_request_cap_rsp(crq, adapter); in ibmvnic_handle_crq()
6051 handle_login_rsp(crq, adapter); in ibmvnic_handle_crq()
6056 crq->logical_link_state_rsp.link_state, in ibmvnic_handle_crq()
6057 crq->logical_link_state_rsp.rc.code); in ibmvnic_handle_crq()
6059 crq->logical_link_state_rsp.link_state; in ibmvnic_handle_crq()
6060 adapter->init_done_rc = crq->logical_link_state_rsp.rc.code; in ibmvnic_handle_crq()
6066 crq->link_state_indication.phys_link_state; in ibmvnic_handle_crq()
6068 crq->link_state_indication.logical_link_state; in ibmvnic_handle_crq()
6076 adapter->fw_done_rc = handle_change_mac_rsp(crq, adapter); in ibmvnic_handle_crq()
6080 handle_error_indication(crq, adapter); in ibmvnic_handle_crq()
6105 handle_vpd_size_rsp(crq, adapter); in ibmvnic_handle_crq()
6108 handle_vpd_rsp(crq, adapter); in ibmvnic_handle_crq()
6111 adapter->fw_done_rc = handle_query_phys_parms_rsp(crq, adapter); in ibmvnic_handle_crq()
6131 struct ibmvnic_crq_queue *queue = &adapter->crq; in ibmvnic_tasklet()
6132 union ibmvnic_crq *crq; in ibmvnic_tasklet() local
6137 /* Pull all the valid messages off the CRQ */ in ibmvnic_tasklet()
6138 while ((crq = ibmvnic_next_crq(adapter)) != NULL) { in ibmvnic_tasklet()
6140 * crq->generic.first & IBMVNIC_CRQ_CMD_RSP is loaded in ibmvnic_tasklet()
6145 ibmvnic_handle_crq(crq, adapter); in ibmvnic_tasklet()
6146 crq->generic.first = 0; in ibmvnic_tasklet()
6169 struct ibmvnic_crq_queue *crq = &adapter->crq; in ibmvnic_reset_crq() local
6174 /* Close the CRQ */ in ibmvnic_reset_crq()
6180 if (!crq->msgs) in ibmvnic_reset_crq()
6183 memset(crq->msgs, 0, PAGE_SIZE); in ibmvnic_reset_crq()
6184 crq->cur = 0; in ibmvnic_reset_crq()
6185 crq->active = false; in ibmvnic_reset_crq()
6189 crq->msg_token, PAGE_SIZE); in ibmvnic_reset_crq()
6195 dev_warn(dev, "Couldn't register crq (rc=%d)\n", rc); in ibmvnic_reset_crq()
6202 struct ibmvnic_crq_queue *crq = &adapter->crq; in release_crq_queue() local
6206 if (!crq->msgs) in release_crq_queue()
6209 netdev_dbg(adapter->netdev, "Releasing CRQ\n"); in release_crq_queue()
6216 dma_unmap_single(&vdev->dev, crq->msg_token, PAGE_SIZE, in release_crq_queue()
6218 free_page((unsigned long)crq->msgs); in release_crq_queue()
6219 crq->msgs = NULL; in release_crq_queue()
6220 crq->active = false; in release_crq_queue()
6225 struct ibmvnic_crq_queue *crq = &adapter->crq; in init_crq_queue() local
6230 if (crq->msgs) in init_crq_queue()
6233 crq->msgs = (union ibmvnic_crq *)get_zeroed_page(GFP_KERNEL); in init_crq_queue()
6236 if (!crq->msgs) in init_crq_queue()
6239 crq->size = PAGE_SIZE / sizeof(*crq->msgs); in init_crq_queue()
6240 crq->msg_token = dma_map_single(dev, crq->msgs, PAGE_SIZE, in init_crq_queue()
6242 if (dma_mapping_error(dev, crq->msg_token)) in init_crq_queue()
6246 crq->msg_token, PAGE_SIZE); in init_crq_queue()
6265 snprintf(crq->name, sizeof(crq->name), "ibmvnic-%x", in init_crq_queue()
6267 rc = request_irq(vdev->irq, ibmvnic_interrupt, 0, crq->name, adapter); in init_crq_queue()
6280 crq->cur = 0; in init_crq_queue()
6281 spin_lock_init(&crq->lock); in init_crq_queue()
6294 dma_unmap_single(dev, crq->msg_token, PAGE_SIZE, DMA_BIDIRECTIONAL); in init_crq_queue()
6296 free_page((unsigned long)crq->msgs); in init_crq_queue()
6297 crq->msgs = NULL; in init_crq_queue()
6313 dev_err(dev, "Send crq init failed with error %d\n", rc); in ibmvnic_reset_init()
6324 dev_err(dev, "CRQ-init failed, %d\n", adapter->init_done_rc); in ibmvnic_reset_init()
6331 dev_err(dev, "CRQ-init failed, passive-init\n"); in ibmvnic_reset_init()
6366 dev_err(dev, "Failed to initialize sub crq irqs\n"); in ibmvnic_reset_init()
6439 * since we are reinitializing the CRQ in ibmvnic_probe()
6443 /* If we had already initialized CRQ, we may have one or in ibmvnic_probe()
6445 * the CRQ before initializing the CRQ again. in ibmvnic_probe()
6450 * will not access the ->rwi_list and since we released CRQ, in ibmvnic_probe()
6465 dev_err(&dev->dev, "Couldn't initialize crq. rc=%d\n", in ibmvnic_probe()
6474 * partner is not ready. CRQ is not active. When the partner becomes in ibmvnic_probe()
6540 /* cleanup worker thread after releasing CRQ so we don't get in ibmvnic_probe()
6661 ret += PAGE_SIZE; /* the crq message queue */ in ibmvnic_get_desired_dma()