Lines Matching refs:hmc
386 * @hmc: ibmvmc_hmc struct
390 static void ibmvmc_free_hmc_buffer(struct ibmvmc_hmc *hmc,
395 spin_lock_irqsave(&hmc->lock, flags);
397 spin_unlock_irqrestore(&hmc->lock, flags);
469 * @hmc: ibmvmc_hmc struct
478 static int ibmvmc_return_hmc(struct ibmvmc_hmc *hmc, bool release_readers)
486 if (!hmc || !hmc->adapter)
490 if (hmc->file_session) {
491 struct ibmvmc_file_session *session = hmc->file_session;
498 adapter = hmc->adapter;
501 spin_lock_irqsave(&hmc->lock, flags);
502 hmc->index = 0;
503 hmc->state = ibmhmc_state_free;
504 hmc->queue_head = 0;
505 hmc->queue_tail = 0;
506 buffer = hmc->buffer;
517 hmc->queue_outbound_msgs[i] = VMC_INVALID_BUFFER_ID;
520 spin_unlock_irqrestore(&hmc->lock, flags);
528 * @hmc: Pointer to ibmvmc_hmc struct
544 struct ibmvmc_hmc *hmc)
551 if (!hmc || !hmc->adapter)
554 adapter = hmc->adapter;
573 hmc->state = ibmhmc_state_opening;
579 crq_msg.hmc_session = hmc->session;
580 crq_msg.hmc_index = hmc->index;
593 * @hmc: Pointer to ibmvmc_hmc struct
605 static int ibmvmc_send_close(struct ibmvmc_hmc *hmc)
612 if (!hmc || !hmc->adapter)
615 adapter = hmc->adapter;
623 crq_msg.hmc_session = hmc->session;
624 crq_msg.hmc_index = hmc->index;
762 * @hmc: ibmvmc_hmc struct
779 struct ibmvmc_hmc *hmc, int msg_len)
801 crq_msg.hmc_session = hmc->session;
802 crq_msg.hmc_index = hmc->index;
856 struct ibmvmc_hmc *hmc;
867 hmc = session->hmc;
868 if (hmc) {
869 if (!hmc->adapter)
873 dev_warn(hmc->adapter->dev, "close: state_failed\n");
877 spin_lock_irqsave(&hmc->lock, flags);
878 if (hmc->state >= ibmhmc_state_opening) {
879 rc = ibmvmc_send_close(hmc);
881 dev_warn(hmc->adapter->dev, "close: send_close failed.\n");
883 spin_unlock_irqrestore(&hmc->lock, flags);
907 struct ibmvmc_hmc *hmc;
934 hmc = session->hmc;
935 if (!hmc) {
936 pr_warn("ibmvmc: read: no hmc\n");
940 adapter = hmc->adapter;
949 spin_lock_irqsave(&hmc->lock, flags);
950 if (hmc->queue_tail != hmc->queue_head)
954 spin_unlock_irqrestore(&hmc->lock, flags);
973 buffer = &(hmc->buffer[hmc->queue_outbound_msgs[hmc->queue_tail]]);
974 hmc->queue_tail++;
975 if (hmc->queue_tail == ibmvmc_max_buf_pool_size)
976 hmc->queue_tail = 0;
977 spin_unlock_irqrestore(&hmc->lock, flags);
982 ibmvmc_free_hmc_buffer(hmc, buffer);
1008 struct ibmvmc_hmc *hmc;
1015 hmc = session->hmc;
1016 if (!hmc)
1021 if (hmc->queue_head != hmc->queue_tail)
1046 struct ibmvmc_hmc *hmc;
1058 hmc = session->hmc;
1059 if (!hmc)
1062 spin_lock_irqsave(&hmc->lock, flags);
1063 if (hmc->state == ibmhmc_state_free) {
1069 adapter = hmc->adapter;
1083 if (hmc->state == ibmhmc_state_opening) {
1091 if (hmc->state != ibmhmc_state_ready) {
1096 vmc_buffer = ibmvmc_get_valid_hmc_buffer(hmc->index);
1133 ibmvmc_send_msg(adapter, vmc_buffer, hmc, count);
1136 spin_unlock_irqrestore(&hmc->lock, flags);
1151 struct ibmvmc_hmc *hmc;
1177 /* Get an hmc object, and transition to ibmhmc_state_initial */
1178 hmc = ibmvmc_get_free_hmc();
1179 if (!hmc) {
1180 pr_warn("%s: free hmc not found\n", __func__);
1184 hmc->session = hmc->session + 1;
1185 if (hmc->session == 0xff)
1186 hmc->session = 1;
1188 session->hmc = hmc;
1189 hmc->adapter = &ibmvmc_adapter;
1190 hmc->file_session = session;
1202 * IOCTL command to setup the hmc id
1211 struct ibmvmc_hmc *hmc;
1219 hmc = session->hmc;
1220 if (!hmc) {
1225 hmc = session->hmc;
1226 if (!hmc) {
1227 pr_err("ibmvmc: setup_hmc success but no hmc\n");
1232 if (hmc->state != ibmhmc_state_initial) {
1234 hmc->state);
1238 bytes = copy_from_user(hmc->hmc_id, new_hmc_id, HMC_ID_LEN);
1243 spin_lock_irqsave(&hmc->lock, flags);
1244 buffer = ibmvmc_get_valid_hmc_buffer(hmc->index);
1245 spin_unlock_irqrestore(&hmc->lock, flags);
1254 strncpy(print_buffer, hmc->hmc_id, HMC_ID_LEN);
1257 memcpy(buffer->real_addr_local, hmc->hmc_id, HMC_ID_LEN);
1259 rc = ibmvmc_send_open(buffer, hmc);
1601 struct ibmvmc_hmc *hmc;
1638 hmc = &hmcs[hmc_index];
1639 spin_lock_irqsave(&hmc->lock, flags);
1641 if (hmc->state == ibmhmc_state_free) {
1642 dev_err(adapter->dev, "Recv_msg: invalid hmc state = 0x%x\n",
1643 hmc->state);
1645 spin_unlock_irqrestore(&hmc->lock, flags);
1649 buffer = &hmc->buffer[buffer_id];
1654 spin_unlock_irqrestore(&hmc->lock, flags);
1667 (unsigned int)hmc->queue_head, (unsigned int)hmc_index);
1675 spin_unlock_irqrestore(&hmc->lock, flags);
1680 hmc->queue_outbound_msgs[hmc->queue_head] = buffer_id;
1681 hmc->queue_head++;
1682 if (hmc->queue_head == ibmvmc_max_buf_pool_size)
1683 hmc->queue_head = 0;
1685 if (hmc->queue_head == hmc->queue_tail)
1688 spin_unlock_irqrestore(&hmc->lock, flags);
1888 dev_dbg(adapter->dev, "open_resp: set hmc state = ready\n");
1891 dev_warn(adapter->dev, "open_resp: invalid hmc state (0x%x)\n",