Lines Matching refs:crq

182 		if (!adapter->crq.active) {
968 union ibmvnic_crq crq;
974 memset(&crq, 0, sizeof(crq));
975 crq.logical_link_state.first = IBMVNIC_CRQ_CMD;
976 crq.logical_link_state.cmd = LOGICAL_LINK_STATE;
977 crq.logical_link_state.link_state = link_state;
983 rc = ibmvnic_send_crq(adapter, &crq);
1033 union ibmvnic_crq crq;
1044 crq.get_vpd_size.first = IBMVNIC_CRQ_CMD;
1045 crq.get_vpd_size.cmd = GET_VPD_SIZE;
1046 rc = ibmvnic_send_crq(adapter, &crq);
1089 crq.get_vpd.first = IBMVNIC_CRQ_CMD;
1090 crq.get_vpd.cmd = GET_VPD;
1091 crq.get_vpd.ioba = cpu_to_be32(adapter->vpd->dma_addr);
1092 crq.get_vpd.len = cpu_to_be32((u32)adapter->vpd->len);
1093 rc = ibmvnic_send_crq(adapter, &crq);
1160 /* We're ready to receive frames, enable the sub-crq interrupts and
1766 union ibmvnic_crq crq;
1768 memset(&crq, 0, sizeof(crq));
1769 crq.request_capability.first = IBMVNIC_CRQ_CMD;
1770 crq.request_capability.cmd = REQUEST_CAPABILITY;
1778 memset(&crq, 0, sizeof(crq));
1779 crq.multicast_ctrl.first = IBMVNIC_CRQ_CMD;
1780 crq.multicast_ctrl.cmd = MULTICAST_CTRL;
1781 crq.multicast_ctrl.flags = IBMVNIC_ENABLE_ALL;
1782 ibmvnic_send_crq(adapter, &crq);
1785 memset(&crq, 0, sizeof(crq));
1786 crq.multicast_ctrl.first = IBMVNIC_CRQ_CMD;
1787 crq.multicast_ctrl.cmd = MULTICAST_CTRL;
1788 crq.multicast_ctrl.flags = IBMVNIC_DISABLE_ALL;
1789 ibmvnic_send_crq(adapter, &crq);
1793 memset(&crq, 0, sizeof(crq));
1794 crq.multicast_ctrl.first = IBMVNIC_CRQ_CMD;
1795 crq.multicast_ctrl.cmd = MULTICAST_CTRL;
1796 crq.multicast_ctrl.flags = IBMVNIC_ENABLE_MC;
1797 ether_addr_copy(&crq.multicast_ctrl.mac_addr[0],
1799 ibmvnic_send_crq(adapter, &crq);
1808 union ibmvnic_crq crq;
1816 memset(&crq, 0, sizeof(crq));
1817 crq.change_mac_addr.first = IBMVNIC_CRQ_CMD;
1818 crq.change_mac_addr.cmd = CHANGE_MAC_ADDR;
1819 ether_addr_copy(&crq.change_mac_addr.mac_addr[0], dev_addr);
1825 rc = ibmvnic_send_crq(adapter, &crq);
1898 "Couldn't initialize crq. rc=%d\n", rc);
2031 "Reset couldn't initialize crq. rc=%d\n", rc);
2150 "Couldn't initialize crq. rc=%d\n", rc);
2788 union ibmvnic_crq crq;
2792 memset(&crq, 0, sizeof(crq));
2793 crq.request_statistics.first = IBMVNIC_CRQ_CMD;
2794 crq.request_statistics.cmd = REQUEST_STATISTICS;
2795 crq.request_statistics.ioba = cpu_to_be32(adapter->stats_token);
2796 crq.request_statistics.len =
2801 rc = ibmvnic_send_crq(adapter, &crq);
2945 dev_warn(dev, "Couldn't allocate crq queue messages page\n");
2952 dev_warn(dev, "Couldn't map crq queue messages page\n");
2965 dev_warn(dev, "Error %d registering sub-crq\n", rc);
2974 "sub-crq initialized, num %lx, hw_irq=%lx, irq=%x\n",
3356 union ibmvnic_crq crq;
3379 dev_err(dev, "Fatal, invalid entries per sub-crq\n");
3440 memset(&crq, 0, sizeof(crq));
3441 crq.request_capability.first = IBMVNIC_CRQ_CMD;
3442 crq.request_capability.cmd = REQUEST_CAPABILITY;
3444 crq.request_capability.capability = cpu_to_be16(REQ_TX_QUEUES);
3445 crq.request_capability.number = cpu_to_be64(adapter->req_tx_queues);
3447 ibmvnic_send_crq(adapter, &crq);
3449 crq.request_capability.capability = cpu_to_be16(REQ_RX_QUEUES);
3450 crq.request_capability.number = cpu_to_be64(adapter->req_rx_queues);
3452 ibmvnic_send_crq(adapter, &crq);
3454 crq.request_capability.capability = cpu_to_be16(REQ_RX_ADD_QUEUES);
3455 crq.request_capability.number = cpu_to_be64(adapter->req_rx_add_queues);
3457 ibmvnic_send_crq(adapter, &crq);
3459 crq.request_capability.capability =
3461 crq.request_capability.number =
3464 ibmvnic_send_crq(adapter, &crq);
3466 crq.request_capability.capability =
3468 crq.request_capability.number =
3471 ibmvnic_send_crq(adapter, &crq);
3473 crq.request_capability.capability = cpu_to_be16(REQ_MTU);
3474 crq.request_capability.number = cpu_to_be64(adapter->req_mtu);
3476 ibmvnic_send_crq(adapter, &crq);
3480 crq.request_capability.capability =
3482 crq.request_capability.number = cpu_to_be64(1);
3484 ibmvnic_send_crq(adapter, &crq);
3487 crq.request_capability.capability =
3489 crq.request_capability.number = cpu_to_be64(0);
3491 ibmvnic_send_crq(adapter, &crq);
3537 struct ibmvnic_crq_queue *queue = &adapter->crq;
3538 union ibmvnic_crq *crq;
3540 crq = &queue->msgs[queue->cur];
3541 if (crq->generic.first & IBMVNIC_CRQ_CMD_RSP) {
3545 crq = NULL;
3548 return crq;
3622 union ibmvnic_crq *crq)
3626 u64 *u64_crq = (u64 *)crq;
3633 if (!adapter->crq.active &&
3634 crq->generic.first != IBMVNIC_CRQ_INIT_CMD) {
3661 union ibmvnic_crq crq;
3665 memset(&crq, 0, sizeof(crq));
3666 crq.generic.first = IBMVNIC_CRQ_INIT_CMD;
3667 crq.generic.cmd = IBMVNIC_CRQ_INIT;
3671 rc = ibmvnic_send_crq(adapter, &crq);
3689 union ibmvnic_crq crq;
3691 memset(&crq, 0, sizeof(crq));
3692 crq.version_exchange.first = IBMVNIC_CRQ_CMD;
3693 crq.version_exchange.cmd = VERSION_EXCHANGE;
3694 crq.version_exchange.version = cpu_to_be16(ibmvnic_version);
3696 return ibmvnic_send_crq(adapter, &crq);
3757 union ibmvnic_crq crq;
3863 memset(&crq, 0, sizeof(crq));
3864 crq.login.first = IBMVNIC_CRQ_CMD;
3865 crq.login.cmd = LOGIN;
3866 crq.login.ioba = cpu_to_be32(buffer_token);
3867 crq.login.len = cpu_to_be32(buffer_size);
3870 rc = ibmvnic_send_crq(adapter, &crq);
3897 union ibmvnic_crq crq;
3899 memset(&crq, 0, sizeof(crq));
3900 crq.request_map.first = IBMVNIC_CRQ_CMD;
3901 crq.request_map.cmd = REQUEST_MAP;
3902 crq.request_map.map_id = map_id;
3903 crq.request_map.ioba = cpu_to_be32(addr);
3904 crq.request_map.len = cpu_to_be32(len);
3905 return ibmvnic_send_crq(adapter, &crq);
3910 union ibmvnic_crq crq;
3912 memset(&crq, 0, sizeof(crq));
3913 crq.request_unmap.first = IBMVNIC_CRQ_CMD;
3914 crq.request_unmap.cmd = REQUEST_UNMAP;
3915 crq.request_unmap.map_id = map_id;
3916 return ibmvnic_send_crq(adapter, &crq);
3921 union ibmvnic_crq crq;
3923 memset(&crq, 0, sizeof(crq));
3924 crq.query_map.first = IBMVNIC_CRQ_CMD;
3925 crq.query_map.cmd = QUERY_MAP;
3926 ibmvnic_send_crq(adapter, &crq);
3932 union ibmvnic_crq crq;
3943 memset(&crq, 0, sizeof(crq));
3944 crq.query_capability.first = IBMVNIC_CRQ_CMD;
3945 crq.query_capability.cmd = QUERY_CAPABILITY;
3947 crq.query_capability.capability = cpu_to_be16(MIN_TX_QUEUES);
3948 ibmvnic_send_crq(adapter, &crq);
3951 crq.query_capability.capability = cpu_to_be16(MIN_RX_QUEUES);
3952 ibmvnic_send_crq(adapter, &crq);
3955 crq.query_capability.capability = cpu_to_be16(MIN_RX_ADD_QUEUES);
3956 ibmvnic_send_crq(adapter, &crq);
3959 crq.query_capability.capability = cpu_to_be16(MAX_TX_QUEUES);
3960 ibmvnic_send_crq(adapter, &crq);
3963 crq.query_capability.capability = cpu_to_be16(MAX_RX_QUEUES);
3964 ibmvnic_send_crq(adapter, &crq);
3967 crq.query_capability.capability = cpu_to_be16(MAX_RX_ADD_QUEUES);
3968 ibmvnic_send_crq(adapter, &crq);
3971 crq.query_capability.capability =
3973 ibmvnic_send_crq(adapter, &crq);
3976 crq.query_capability.capability =
3978 ibmvnic_send_crq(adapter, &crq);
3981 crq.query_capability.capability =
3983 ibmvnic_send_crq(adapter, &crq);
3986 crq.query_capability.capability =
3988 ibmvnic_send_crq(adapter, &crq);
3991 crq.query_capability.capability = cpu_to_be16(TCP_IP_OFFLOAD);
3992 ibmvnic_send_crq(adapter, &crq);
3995 crq.query_capability.capability = cpu_to_be16(PROMISC_SUPPORTED);
3996 ibmvnic_send_crq(adapter, &crq);
3999 crq.query_capability.capability = cpu_to_be16(MIN_MTU);
4000 ibmvnic_send_crq(adapter, &crq);
4003 crq.query_capability.capability = cpu_to_be16(MAX_MTU);
4004 ibmvnic_send_crq(adapter, &crq);
4007 crq.query_capability.capability = cpu_to_be16(MAX_MULTICAST_FILTERS);
4008 ibmvnic_send_crq(adapter, &crq);
4011 crq.query_capability.capability = cpu_to_be16(VLAN_HEADER_INSERTION);
4012 ibmvnic_send_crq(adapter, &crq);
4015 crq.query_capability.capability = cpu_to_be16(RX_VLAN_HEADER_INSERTION);
4016 ibmvnic_send_crq(adapter, &crq);
4019 crq.query_capability.capability = cpu_to_be16(MAX_TX_SG_ENTRIES);
4020 ibmvnic_send_crq(adapter, &crq);
4023 crq.query_capability.capability = cpu_to_be16(RX_SG_SUPPORTED);
4024 ibmvnic_send_crq(adapter, &crq);
4027 crq.query_capability.capability = cpu_to_be16(OPT_TX_COMP_SUB_QUEUES);
4028 ibmvnic_send_crq(adapter, &crq);
4031 crq.query_capability.capability = cpu_to_be16(OPT_RX_COMP_QUEUES);
4032 ibmvnic_send_crq(adapter, &crq);
4035 crq.query_capability.capability =
4037 ibmvnic_send_crq(adapter, &crq);
4040 crq.query_capability.capability =
4042 ibmvnic_send_crq(adapter, &crq);
4045 crq.query_capability.capability =
4047 ibmvnic_send_crq(adapter, &crq);
4050 crq.query_capability.capability = cpu_to_be16(TX_RX_DESC_REQ);
4052 ibmvnic_send_crq(adapter, &crq);
4065 union ibmvnic_crq crq;
4079 memset(&crq, 0, sizeof(crq));
4080 crq.query_ip_offload.first = IBMVNIC_CRQ_CMD;
4081 crq.query_ip_offload.cmd = QUERY_IP_OFFLOAD;
4082 crq.query_ip_offload.len = cpu_to_be32(buf_sz);
4083 crq.query_ip_offload.ioba =
4086 ibmvnic_send_crq(adapter, &crq);
4095 union ibmvnic_crq crq;
4159 memset(&crq, 0, sizeof(crq));
4160 crq.control_ip_offload.first = IBMVNIC_CRQ_CMD;
4161 crq.control_ip_offload.cmd = CONTROL_IP_OFFLOAD;
4162 crq.control_ip_offload.len =
4164 crq.control_ip_offload.ioba = cpu_to_be32(adapter->ip_offload_ctrl_tok);
4165 ibmvnic_send_crq(adapter, &crq);
4168 static void handle_vpd_size_rsp(union ibmvnic_crq *crq,
4173 if (crq->get_vpd_size_rsp.rc.code) {
4175 crq->get_vpd_size_rsp.rc.code);
4180 adapter->vpd->len = be64_to_cpu(crq->get_vpd_size_rsp.len);
4184 static void handle_vpd_rsp(union ibmvnic_crq *crq,
4196 if (crq->get_vpd_rsp.rc.code) {
4198 crq->get_vpd_rsp.rc.code);
4311 static void handle_error_indication(union ibmvnic_crq *crq,
4317 cause = be16_to_cpu(crq->error_indication.error_cause);
4321 crq->error_indication.flags
4325 if (crq->error_indication.flags & IBMVNIC_FATAL_ERROR)
4331 static int handle_change_mac_rsp(union ibmvnic_crq *crq,
4338 rc = crq->change_mac_addr_rsp.rc.code;
4343 /* crq->change_mac_addr.mac_addr is the requested one
4344 * crq->change_mac_addr_rsp.mac_addr is the returned valid one.
4347 &crq->change_mac_addr_rsp.mac_addr[0]);
4349 &crq->change_mac_addr_rsp.mac_addr[0]);
4355 static void handle_request_cap_rsp(union ibmvnic_crq *crq,
4365 switch (be16_to_cpu(crq->request_capability_rsp.capability)) {
4396 crq->request_capability.capability);
4400 switch (crq->request_capability_rsp.rc.code) {
4406 (long int)be64_to_cpu(crq->request_capability_rsp.
4409 if (be16_to_cpu(crq->request_capability_rsp.capability) ==
4416 be64_to_cpu(crq->request_capability_rsp.number);
4423 crq->request_capability_rsp.rc.code);
4501 * 2 outstanding login requests sent, the LOGIN_RSP crq
4540 static void handle_request_unmap_rsp(union ibmvnic_crq *crq,
4546 rc = crq->request_unmap_rsp.rc.code;
4551 static void handle_query_map_rsp(union ibmvnic_crq *crq,
4558 rc = crq->query_map_rsp.rc.code;
4564 crq->query_map_rsp.page_size, crq->query_map_rsp.tot_pages,
4565 crq->query_map_rsp.free_pages);
4568 static void handle_query_cap_rsp(union ibmvnic_crq *crq,
4578 rc = crq->query_capability.rc.code;
4584 switch (be16_to_cpu(crq->query_capability.capability)) {
4587 be64_to_cpu(crq->query_capability.number);
4593 be64_to_cpu(crq->query_capability.number);
4599 be64_to_cpu(crq->query_capability.number);
4605 be64_to_cpu(crq->query_capability.number);
4611 be64_to_cpu(crq->query_capability.number);
4617 be64_to_cpu(crq->query_capability.number);
4623 be64_to_cpu(crq->query_capability.number);
4629 be64_to_cpu(crq->query_capability.number);
4635 be64_to_cpu(crq->query_capability.number);
4641 be64_to_cpu(crq->query_capability.number);
4647 be64_to_cpu(crq->query_capability.number);
4653 be64_to_cpu(crq->query_capability.number);
4658 adapter->min_mtu = be64_to_cpu(crq->query_capability.number);
4663 adapter->max_mtu = be64_to_cpu(crq->query_capability.number);
4669 be64_to_cpu(crq->query_capability.number);
4675 be64_to_cpu(crq->query_capability.number);
4683 be64_to_cpu(crq->query_capability.number);
4689 be64_to_cpu(crq->query_capability.number);
4695 be64_to_cpu(crq->query_capability.number);
4701 be64_to_cpu(crq->query_capability.number);
4707 be64_to_cpu(crq->query_capability.number);
4713 be64_to_cpu(crq->query_capability.number);
4719 be64_to_cpu(crq->query_capability.number);
4725 be64_to_cpu(crq->query_capability.number);
4730 adapter->tx_rx_desc_req = crq->query_capability.number;
4737 crq->query_capability.capability);
4749 union ibmvnic_crq crq;
4752 memset(&crq, 0, sizeof(crq));
4753 crq.query_phys_parms.first = IBMVNIC_CRQ_CMD;
4754 crq.query_phys_parms.cmd = QUERY_PHYS_PARMS;
4760 rc = ibmvnic_send_crq(adapter, &crq);
4776 static int handle_query_phys_parms_rsp(union ibmvnic_crq *crq,
4781 __be32 rspeed = cpu_to_be32(crq->query_phys_parms_rsp.speed);
4783 rc = crq->query_phys_parms_rsp.rc.code;
4821 if (crq->query_phys_parms_rsp.flags1 & IBMVNIC_FULL_DUPLEX)
4823 else if (crq->query_phys_parms_rsp.flags1 & IBMVNIC_HALF_DUPLEX)
4831 static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
4834 struct ibmvnic_generic_crq *gen_crq = &crq->generic;
4837 u64 *u64_crq = (u64 *)crq;
4877 adapter->crq.active = true;
4881 dev_err(dev, "Unknown crq cmd: %d\n", gen_crq->cmd);
4886 adapter->crq.active = false;
4895 /* if we got here during crq-init, retry crq-init */
4928 rc = crq->version_exchange_rsp.rc.code;
4934 be16_to_cpu(crq->version_exchange_rsp.version);
4940 handle_query_cap_rsp(crq, adapter);
4943 handle_query_map_rsp(crq, adapter);
4946 adapter->fw_done_rc = crq->request_map_rsp.rc.code;
4950 handle_request_unmap_rsp(crq, adapter);
4953 handle_request_cap_rsp(crq, adapter);
4957 handle_login_rsp(crq, adapter);
4962 crq->logical_link_state_rsp.link_state,
4963 crq->logical_link_state_rsp.rc.code);
4965 crq->logical_link_state_rsp.link_state;
4966 adapter->init_done_rc = crq->logical_link_state_rsp.rc.code;
4972 crq->link_state_indication.phys_link_state;
4974 crq->link_state_indication.logical_link_state;
4982 adapter->fw_done_rc = handle_change_mac_rsp(crq, adapter);
4986 handle_error_indication(crq, adapter);
5011 handle_vpd_size_rsp(crq, adapter);
5014 handle_vpd_rsp(crq, adapter);
5017 adapter->fw_done_rc = handle_query_phys_parms_rsp(crq, adapter);
5037 struct ibmvnic_crq_queue *queue = &adapter->crq;
5038 union ibmvnic_crq *crq;
5045 while ((crq = ibmvnic_next_crq(adapter)) != NULL) {
5047 * crq->generic.first & IBMVNIC_CRQ_CMD_RSP is loaded
5052 ibmvnic_handle_crq(crq, adapter);
5053 crq->generic.first = 0;
5081 struct ibmvnic_crq_queue *crq = &adapter->crq;
5092 if (!crq->msgs)
5095 memset(crq->msgs, 0, PAGE_SIZE);
5096 crq->cur = 0;
5097 crq->active = false;
5101 crq->msg_token, PAGE_SIZE);
5107 dev_warn(dev, "Couldn't register crq (rc=%d)\n", rc);
5114 struct ibmvnic_crq_queue *crq = &adapter->crq;
5118 if (!crq->msgs)
5128 dma_unmap_single(&vdev->dev, crq->msg_token, PAGE_SIZE,
5130 free_page((unsigned long)crq->msgs);
5131 crq->msgs = NULL;
5132 crq->active = false;
5137 struct ibmvnic_crq_queue *crq = &adapter->crq;
5142 if (crq->msgs)
5145 crq->msgs = (union ibmvnic_crq *)get_zeroed_page(GFP_KERNEL);
5148 if (!crq->msgs)
5151 crq->size = PAGE_SIZE / sizeof(*crq->msgs);
5152 crq->msg_token = dma_map_single(dev, crq->msgs, PAGE_SIZE,
5154 if (dma_mapping_error(dev, crq->msg_token))
5158 crq->msg_token, PAGE_SIZE);
5177 snprintf(crq->name, sizeof(crq->name), "ibmvnic-%x",
5179 rc = request_irq(vdev->irq, ibmvnic_interrupt, 0, crq->name, adapter);
5192 crq->cur = 0;
5193 spin_lock_init(&crq->lock);
5206 dma_unmap_single(dev, crq->msg_token, PAGE_SIZE, DMA_BIDIRECTIONAL);
5208 free_page((unsigned long)crq->msgs);
5209 crq->msgs = NULL;
5229 dev_err(dev, "Send crq init failed with error %d\n", rc);
5280 dev_err(dev, "Failed to initialize sub crq irqs\n");
5345 dev_err(&dev->dev, "Couldn't initialize crq. rc=%d\n",
5502 ret += PAGE_SIZE; /* the crq message queue */