Lines Matching refs:crq
157 union ibmvnic_crq crq;
159 memset(&crq, 0, sizeof(crq));
160 crq.generic.first = IBMVNIC_CRQ_INIT_CMD;
161 crq.generic.cmd = IBMVNIC_CRQ_INIT_COMPLETE;
163 return ibmvnic_send_crq(adapter, &crq);
168 union ibmvnic_crq crq;
170 memset(&crq, 0, sizeof(crq));
171 crq.version_exchange.first = IBMVNIC_CRQ_CMD;
172 crq.version_exchange.cmd = VERSION_EXCHANGE;
173 crq.version_exchange.version = cpu_to_be16(ibmvnic_version);
175 return ibmvnic_send_crq(adapter, &crq);
402 if (!adapter->crq.active) {
1683 union ibmvnic_crq crq;
1689 memset(&crq, 0, sizeof(crq));
1690 crq.logical_link_state.first = IBMVNIC_CRQ_CMD;
1691 crq.logical_link_state.cmd = LOGICAL_LINK_STATE;
1692 crq.logical_link_state.link_state = link_state;
1698 rc = ibmvnic_send_crq(adapter, &crq);
1748 union ibmvnic_crq crq;
1759 crq.get_vpd_size.first = IBMVNIC_CRQ_CMD;
1760 crq.get_vpd_size.cmd = GET_VPD_SIZE;
1761 rc = ibmvnic_send_crq(adapter, &crq);
1804 crq.get_vpd.first = IBMVNIC_CRQ_CMD;
1805 crq.get_vpd.cmd = GET_VPD;
1806 crq.get_vpd.ioba = cpu_to_be32(adapter->vpd->dma_addr);
1807 crq.get_vpd.len = cpu_to_be32((u32)adapter->vpd->len);
1808 rc = ibmvnic_send_crq(adapter, &crq);
1873 /* We're ready to receive frames, enable the sub-crq interrupts and
2603 union ibmvnic_crq crq;
2605 memset(&crq, 0, sizeof(crq));
2606 crq.request_capability.first = IBMVNIC_CRQ_CMD;
2607 crq.request_capability.cmd = REQUEST_CAPABILITY;
2615 memset(&crq, 0, sizeof(crq));
2616 crq.multicast_ctrl.first = IBMVNIC_CRQ_CMD;
2617 crq.multicast_ctrl.cmd = MULTICAST_CTRL;
2618 crq.multicast_ctrl.flags = IBMVNIC_ENABLE_ALL;
2619 ibmvnic_send_crq(adapter, &crq);
2622 memset(&crq, 0, sizeof(crq));
2623 crq.multicast_ctrl.first = IBMVNIC_CRQ_CMD;
2624 crq.multicast_ctrl.cmd = MULTICAST_CTRL;
2625 crq.multicast_ctrl.flags = IBMVNIC_DISABLE_ALL;
2626 ibmvnic_send_crq(adapter, &crq);
2630 memset(&crq, 0, sizeof(crq));
2631 crq.multicast_ctrl.first = IBMVNIC_CRQ_CMD;
2632 crq.multicast_ctrl.cmd = MULTICAST_CTRL;
2633 crq.multicast_ctrl.flags = IBMVNIC_ENABLE_MC;
2634 ether_addr_copy(&crq.multicast_ctrl.mac_addr[0],
2636 ibmvnic_send_crq(adapter, &crq);
2645 union ibmvnic_crq crq;
2653 memset(&crq, 0, sizeof(crq));
2654 crq.change_mac_addr.first = IBMVNIC_CRQ_CMD;
2655 crq.change_mac_addr.cmd = CHANGE_MAC_ADDR;
2656 ether_addr_copy(&crq.change_mac_addr.mac_addr[0], dev_addr);
2662 rc = ibmvnic_send_crq(adapter, &crq);
2860 "Reset couldn't initialize crq. rc=%d\n", rc);
2990 "Couldn't initialize crq. rc=%d\n", rc);
3080 adapter->crq.active = true;
3104 dev_err(dev, "Failed to initialize sub crq irqs\n, rc=%d", rc);
3798 union ibmvnic_crq crq;
3802 memset(&crq, 0, sizeof(crq));
3803 crq.request_statistics.first = IBMVNIC_CRQ_CMD;
3804 crq.request_statistics.cmd = REQUEST_STATISTICS;
3805 crq.request_statistics.ioba = cpu_to_be32(adapter->stats_token);
3806 crq.request_statistics.len =
3811 rc = ibmvnic_send_crq(adapter, &crq);
3965 dev_warn(dev, "Couldn't allocate crq queue messages page\n");
3974 dev_warn(dev, "Couldn't map crq queue messages page\n");
3987 dev_warn(dev, "Error %d registering sub-crq\n", rc);
4007 "sub-crq initialized, num %lx, hw_irq=%lx, irq=%x\n",
4423 union ibmvnic_crq crq;
4446 dev_err(dev, "Fatal, invalid entries per sub-crq\n");
4507 memset(&crq, 0, sizeof(crq));
4508 crq.request_capability.first = IBMVNIC_CRQ_CMD;
4509 crq.request_capability.cmd = REQUEST_CAPABILITY;
4511 crq.request_capability.capability = cpu_to_be16(REQ_TX_QUEUES);
4512 crq.request_capability.number = cpu_to_be64(adapter->req_tx_queues);
4514 ibmvnic_send_crq(adapter, &crq);
4516 crq.request_capability.capability = cpu_to_be16(REQ_RX_QUEUES);
4517 crq.request_capability.number = cpu_to_be64(adapter->req_rx_queues);
4519 ibmvnic_send_crq(adapter, &crq);
4521 crq.request_capability.capability = cpu_to_be16(REQ_RX_ADD_QUEUES);
4522 crq.request_capability.number = cpu_to_be64(adapter->req_rx_add_queues);
4524 ibmvnic_send_crq(adapter, &crq);
4526 crq.request_capability.capability =
4528 crq.request_capability.number =
4531 ibmvnic_send_crq(adapter, &crq);
4533 crq.request_capability.capability =
4535 crq.request_capability.number =
4538 ibmvnic_send_crq(adapter, &crq);
4540 crq.request_capability.capability = cpu_to_be16(REQ_MTU);
4541 crq.request_capability.number = cpu_to_be64(adapter->req_mtu);
4543 ibmvnic_send_crq(adapter, &crq);
4547 crq.request_capability.capability =
4549 crq.request_capability.number = cpu_to_be64(1);
4551 ibmvnic_send_crq(adapter, &crq);
4554 crq.request_capability.capability =
4556 crq.request_capability.number = cpu_to_be64(0);
4558 ibmvnic_send_crq(adapter, &crq);
4609 struct ibmvnic_crq_queue *queue = &adapter->crq;
4610 union ibmvnic_crq *crq;
4612 crq = &queue->msgs[queue->cur];
4613 if (crq->generic.first & IBMVNIC_CRQ_CMD_RSP) {
4617 crq = NULL;
4620 return crq;
4662 union ibmvnic_crq *crq)
4666 u64 *u64_crq = (u64 *)crq;
4673 if (!adapter->crq.active &&
4674 crq->generic.first != IBMVNIC_CRQ_INIT_CMD) {
4701 union ibmvnic_crq crq;
4705 memset(&crq, 0, sizeof(crq));
4706 crq.generic.first = IBMVNIC_CRQ_INIT_CMD;
4707 crq.generic.cmd = IBMVNIC_CRQ_INIT;
4711 rc = ibmvnic_send_crq(adapter, &crq);
4785 union ibmvnic_crq crq;
4891 memset(&crq, 0, sizeof(crq));
4892 crq.login.first = IBMVNIC_CRQ_CMD;
4893 crq.login.cmd = LOGIN;
4894 crq.login.ioba = cpu_to_be32(buffer_token);
4895 crq.login.len = cpu_to_be32(buffer_size);
4898 rc = ibmvnic_send_crq(adapter, &crq);
4925 union ibmvnic_crq crq;
4927 memset(&crq, 0, sizeof(crq));
4928 crq.request_map.first = IBMVNIC_CRQ_CMD;
4929 crq.request_map.cmd = REQUEST_MAP;
4930 crq.request_map.map_id = map_id;
4931 crq.request_map.ioba = cpu_to_be32(addr);
4932 crq.request_map.len = cpu_to_be32(len);
4933 return ibmvnic_send_crq(adapter, &crq);
4938 union ibmvnic_crq crq;
4940 memset(&crq, 0, sizeof(crq));
4941 crq.request_unmap.first = IBMVNIC_CRQ_CMD;
4942 crq.request_unmap.cmd = REQUEST_UNMAP;
4943 crq.request_unmap.map_id = map_id;
4944 return ibmvnic_send_crq(adapter, &crq);
4949 union ibmvnic_crq crq;
4951 memset(&crq, 0, sizeof(crq));
4952 crq.query_map.first = IBMVNIC_CRQ_CMD;
4953 crq.query_map.cmd = QUERY_MAP;
4954 ibmvnic_send_crq(adapter, &crq);
4960 union ibmvnic_crq crq;
4971 memset(&crq, 0, sizeof(crq));
4972 crq.query_capability.first = IBMVNIC_CRQ_CMD;
4973 crq.query_capability.cmd = QUERY_CAPABILITY;
4975 crq.query_capability.capability = cpu_to_be16(MIN_TX_QUEUES);
4976 ibmvnic_send_crq(adapter, &crq);
4979 crq.query_capability.capability = cpu_to_be16(MIN_RX_QUEUES);
4980 ibmvnic_send_crq(adapter, &crq);
4983 crq.query_capability.capability = cpu_to_be16(MIN_RX_ADD_QUEUES);
4984 ibmvnic_send_crq(adapter, &crq);
4987 crq.query_capability.capability = cpu_to_be16(MAX_TX_QUEUES);
4988 ibmvnic_send_crq(adapter, &crq);
4991 crq.query_capability.capability = cpu_to_be16(MAX_RX_QUEUES);
4992 ibmvnic_send_crq(adapter, &crq);
4995 crq.query_capability.capability = cpu_to_be16(MAX_RX_ADD_QUEUES);
4996 ibmvnic_send_crq(adapter, &crq);
4999 crq.query_capability.capability =
5001 ibmvnic_send_crq(adapter, &crq);
5004 crq.query_capability.capability =
5006 ibmvnic_send_crq(adapter, &crq);
5009 crq.query_capability.capability =
5011 ibmvnic_send_crq(adapter, &crq);
5014 crq.query_capability.capability =
5016 ibmvnic_send_crq(adapter, &crq);
5019 crq.query_capability.capability = cpu_to_be16(TCP_IP_OFFLOAD);
5020 ibmvnic_send_crq(adapter, &crq);
5023 crq.query_capability.capability = cpu_to_be16(PROMISC_SUPPORTED);
5024 ibmvnic_send_crq(adapter, &crq);
5027 crq.query_capability.capability = cpu_to_be16(MIN_MTU);
5028 ibmvnic_send_crq(adapter, &crq);
5031 crq.query_capability.capability = cpu_to_be16(MAX_MTU);
5032 ibmvnic_send_crq(adapter, &crq);
5035 crq.query_capability.capability = cpu_to_be16(MAX_MULTICAST_FILTERS);
5036 ibmvnic_send_crq(adapter, &crq);
5039 crq.query_capability.capability = cpu_to_be16(VLAN_HEADER_INSERTION);
5040 ibmvnic_send_crq(adapter, &crq);
5043 crq.query_capability.capability = cpu_to_be16(RX_VLAN_HEADER_INSERTION);
5044 ibmvnic_send_crq(adapter, &crq);
5047 crq.query_capability.capability = cpu_to_be16(MAX_TX_SG_ENTRIES);
5048 ibmvnic_send_crq(adapter, &crq);
5051 crq.query_capability.capability = cpu_to_be16(RX_SG_SUPPORTED);
5052 ibmvnic_send_crq(adapter, &crq);
5055 crq.query_capability.capability = cpu_to_be16(OPT_TX_COMP_SUB_QUEUES);
5056 ibmvnic_send_crq(adapter, &crq);
5059 crq.query_capability.capability = cpu_to_be16(OPT_RX_COMP_QUEUES);
5060 ibmvnic_send_crq(adapter, &crq);
5063 crq.query_capability.capability =
5065 ibmvnic_send_crq(adapter, &crq);
5068 crq.query_capability.capability =
5070 ibmvnic_send_crq(adapter, &crq);
5073 crq.query_capability.capability =
5075 ibmvnic_send_crq(adapter, &crq);
5078 crq.query_capability.capability = cpu_to_be16(TX_RX_DESC_REQ);
5080 ibmvnic_send_crq(adapter, &crq);
5093 union ibmvnic_crq crq;
5107 memset(&crq, 0, sizeof(crq));
5108 crq.query_ip_offload.first = IBMVNIC_CRQ_CMD;
5109 crq.query_ip_offload.cmd = QUERY_IP_OFFLOAD;
5110 crq.query_ip_offload.len = cpu_to_be32(buf_sz);
5111 crq.query_ip_offload.ioba =
5114 ibmvnic_send_crq(adapter, &crq);
5123 union ibmvnic_crq crq;
5187 memset(&crq, 0, sizeof(crq));
5188 crq.control_ip_offload.first = IBMVNIC_CRQ_CMD;
5189 crq.control_ip_offload.cmd = CONTROL_IP_OFFLOAD;
5190 crq.control_ip_offload.len =
5192 crq.control_ip_offload.ioba = cpu_to_be32(adapter->ip_offload_ctrl_tok);
5193 ibmvnic_send_crq(adapter, &crq);
5196 static void handle_vpd_size_rsp(union ibmvnic_crq *crq,
5201 if (crq->get_vpd_size_rsp.rc.code) {
5203 crq->get_vpd_size_rsp.rc.code);
5208 adapter->vpd->len = be64_to_cpu(crq->get_vpd_size_rsp.len);
5212 static void handle_vpd_rsp(union ibmvnic_crq *crq,
5224 if (crq->get_vpd_rsp.rc.code) {
5226 crq->get_vpd_rsp.rc.code);
5339 static void handle_error_indication(union ibmvnic_crq *crq,
5345 cause = be16_to_cpu(crq->error_indication.error_cause);
5349 crq->error_indication.flags
5353 if (crq->error_indication.flags & IBMVNIC_FATAL_ERROR)
5359 static int handle_change_mac_rsp(union ibmvnic_crq *crq,
5366 rc = crq->change_mac_addr_rsp.rc.code;
5371 /* crq->change_mac_addr.mac_addr is the requested one
5372 * crq->change_mac_addr_rsp.mac_addr is the returned valid one.
5374 eth_hw_addr_set(netdev, &crq->change_mac_addr_rsp.mac_addr[0]);
5376 &crq->change_mac_addr_rsp.mac_addr[0]);
5382 static void handle_request_cap_rsp(union ibmvnic_crq *crq,
5392 switch (be16_to_cpu(crq->request_capability_rsp.capability)) {
5423 crq->request_capability.capability);
5427 switch (crq->request_capability_rsp.rc.code) {
5433 (long)be64_to_cpu(crq->request_capability_rsp.number),
5436 if (be16_to_cpu(crq->request_capability_rsp.capability) ==
5443 be64_to_cpu(crq->request_capability_rsp.number);
5450 crq->request_capability_rsp.rc.code);
5526 * 2 outstanding login requests sent, the LOGIN_RSP crq
5565 static void handle_request_unmap_rsp(union ibmvnic_crq *crq,
5571 rc = crq->request_unmap_rsp.rc.code;
5576 static void handle_query_map_rsp(union ibmvnic_crq *crq,
5583 rc = crq->query_map_rsp.rc.code;
5589 crq->query_map_rsp.page_size,
5590 __be32_to_cpu(crq->query_map_rsp.tot_pages),
5591 __be32_to_cpu(crq->query_map_rsp.free_pages));
5594 static void handle_query_cap_rsp(union ibmvnic_crq *crq,
5604 rc = crq->query_capability.rc.code;
5610 switch (be16_to_cpu(crq->query_capability.capability)) {
5613 be64_to_cpu(crq->query_capability.number);
5619 be64_to_cpu(crq->query_capability.number);
5625 be64_to_cpu(crq->query_capability.number);
5631 be64_to_cpu(crq->query_capability.number);
5637 be64_to_cpu(crq->query_capability.number);
5643 be64_to_cpu(crq->query_capability.number);
5649 be64_to_cpu(crq->query_capability.number);
5655 be64_to_cpu(crq->query_capability.number);
5661 be64_to_cpu(crq->query_capability.number);
5667 be64_to_cpu(crq->query_capability.number);
5673 be64_to_cpu(crq->query_capability.number);
5679 be64_to_cpu(crq->query_capability.number);
5684 adapter->min_mtu = be64_to_cpu(crq->query_capability.number);
5689 adapter->max_mtu = be64_to_cpu(crq->query_capability.number);
5695 be64_to_cpu(crq->query_capability.number);
5701 be64_to_cpu(crq->query_capability.number);
5709 be64_to_cpu(crq->query_capability.number);
5715 be64_to_cpu(crq->query_capability.number);
5721 be64_to_cpu(crq->query_capability.number);
5727 be64_to_cpu(crq->query_capability.number);
5733 be64_to_cpu(crq->query_capability.number);
5739 be64_to_cpu(crq->query_capability.number);
5745 be64_to_cpu(crq->query_capability.number);
5751 be64_to_cpu(crq->query_capability.number);
5756 adapter->tx_rx_desc_req = crq->query_capability.number;
5763 crq->query_capability.capability);
5773 union ibmvnic_crq crq;
5776 memset(&crq, 0, sizeof(crq));
5777 crq.query_phys_parms.first = IBMVNIC_CRQ_CMD;
5778 crq.query_phys_parms.cmd = QUERY_PHYS_PARMS;
5784 rc = ibmvnic_send_crq(adapter, &crq);
5800 static int handle_query_phys_parms_rsp(union ibmvnic_crq *crq,
5805 __be32 rspeed = cpu_to_be32(crq->query_phys_parms_rsp.speed);
5807 rc = crq->query_phys_parms_rsp.rc.code;
5845 if (crq->query_phys_parms_rsp.flags1 & IBMVNIC_FULL_DUPLEX)
5847 else if (crq->query_phys_parms_rsp.flags1 & IBMVNIC_HALF_DUPLEX)
5855 static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
5858 struct ibmvnic_generic_crq *gen_crq = &crq->generic;
5861 u64 *u64_crq = (u64 *)crq;
5908 adapter->crq.active = true;
5912 dev_err(dev, "Unknown crq cmd: %d\n", gen_crq->cmd);
5917 adapter->crq.active = false;
5926 /* if we got here during crq-init, retry crq-init */
5959 rc = crq->version_exchange_rsp.rc.code;
5965 be16_to_cpu(crq->version_exchange_rsp.version);
5971 handle_query_cap_rsp(crq, adapter);
5974 handle_query_map_rsp(crq, adapter);
5977 adapter->fw_done_rc = crq->request_map_rsp.rc.code;
5981 handle_request_unmap_rsp(crq, adapter);
5984 handle_request_cap_rsp(crq, adapter);
5988 handle_login_rsp(crq, adapter);
5993 crq->logical_link_state_rsp.link_state,
5994 crq->logical_link_state_rsp.rc.code);
5996 crq->logical_link_state_rsp.link_state;
5997 adapter->init_done_rc = crq->logical_link_state_rsp.rc.code;
6003 crq->link_state_indication.phys_link_state;
6005 crq->link_state_indication.logical_link_state;
6013 adapter->fw_done_rc = handle_change_mac_rsp(crq, adapter);
6017 handle_error_indication(crq, adapter);
6042 handle_vpd_size_rsp(crq, adapter);
6045 handle_vpd_rsp(crq, adapter);
6048 adapter->fw_done_rc = handle_query_phys_parms_rsp(crq, adapter);
6068 struct ibmvnic_crq_queue *queue = &adapter->crq;
6069 union ibmvnic_crq *crq;
6075 while ((crq = ibmvnic_next_crq(adapter)) != NULL) {
6077 * crq->generic.first & IBMVNIC_CRQ_CMD_RSP is loaded
6082 ibmvnic_handle_crq(crq, adapter);
6083 crq->generic.first = 0;
6106 struct ibmvnic_crq_queue *crq = &adapter->crq;
6117 if (!crq->msgs)
6120 memset(crq->msgs, 0, PAGE_SIZE);
6121 crq->cur = 0;
6122 crq->active = false;
6126 crq->msg_token, PAGE_SIZE);
6132 dev_warn(dev, "Couldn't register crq (rc=%d)\n", rc);
6139 struct ibmvnic_crq_queue *crq = &adapter->crq;
6143 if (!crq->msgs)
6153 dma_unmap_single(&vdev->dev, crq->msg_token, PAGE_SIZE,
6155 free_page((unsigned long)crq->msgs);
6156 crq->msgs = NULL;
6157 crq->active = false;
6162 struct ibmvnic_crq_queue *crq = &adapter->crq;
6167 if (crq->msgs)
6170 crq->msgs = (union ibmvnic_crq *)get_zeroed_page(GFP_KERNEL);
6173 if (!crq->msgs)
6176 crq->size = PAGE_SIZE / sizeof(*crq->msgs);
6177 crq->msg_token = dma_map_single(dev, crq->msgs, PAGE_SIZE,
6179 if (dma_mapping_error(dev, crq->msg_token))
6183 crq->msg_token, PAGE_SIZE);
6202 snprintf(crq->name, sizeof(crq->name), "ibmvnic-%x",
6204 rc = request_irq(vdev->irq, ibmvnic_interrupt, 0, crq->name, adapter);
6217 crq->cur = 0;
6218 spin_lock_init(&crq->lock);
6231 dma_unmap_single(dev, crq->msg_token, PAGE_SIZE, DMA_BIDIRECTIONAL);
6233 free_page((unsigned long)crq->msgs);
6234 crq->msgs = NULL;
6250 dev_err(dev, "Send crq init failed with error %d\n", rc);
6303 dev_err(dev, "Failed to initialize sub crq irqs\n");
6402 dev_err(&dev->dev, "Couldn't initialize crq. rc=%d\n",
6598 ret += PAGE_SIZE; /* the crq message queue */