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)
1045 struct ibmvmc_hmc *hmc;
1057 hmc = session->hmc;
1058 if (!hmc)
1061 spin_lock_irqsave(&hmc->lock, flags);
1062 if (hmc->state == ibmhmc_state_free) {
1068 adapter = hmc->adapter;
1082 if (hmc->state == ibmhmc_state_opening) {
1090 if (hmc->state != ibmhmc_state_ready) {
1095 vmc_buffer = ibmvmc_get_valid_hmc_buffer(hmc->index);
1131 ibmvmc_send_msg(adapter, vmc_buffer, hmc, count);
1134 spin_unlock_irqrestore(&hmc->lock, flags);
1149 struct ibmvmc_hmc *hmc;
1175 /* Get an hmc object, and transition to ibmhmc_state_initial */
1176 hmc = ibmvmc_get_free_hmc();
1177 if (!hmc) {
1178 pr_warn("%s: free hmc not found\n", __func__);
1182 hmc->session = hmc->session + 1;
1183 if (hmc->session == 0xff)
1184 hmc->session = 1;
1186 session->hmc = hmc;
1187 hmc->adapter = &ibmvmc_adapter;
1188 hmc->file_session = session;
1200 * IOCTL command to setup the hmc id
1209 struct ibmvmc_hmc *hmc;
1217 hmc = session->hmc;
1218 if (!hmc) {
1223 hmc = session->hmc;
1224 if (!hmc) {
1225 pr_err("ibmvmc: setup_hmc success but no hmc\n");
1230 if (hmc->state != ibmhmc_state_initial) {
1232 hmc->state);
1236 bytes = copy_from_user(hmc->hmc_id, new_hmc_id, HMC_ID_LEN);
1241 spin_lock_irqsave(&hmc->lock, flags);
1242 buffer = ibmvmc_get_valid_hmc_buffer(hmc->index);
1243 spin_unlock_irqrestore(&hmc->lock, flags);
1252 strncpy(print_buffer, hmc->hmc_id, HMC_ID_LEN);
1255 memcpy(buffer->real_addr_local, hmc->hmc_id, HMC_ID_LEN);
1257 rc = ibmvmc_send_open(buffer, hmc);
1599 struct ibmvmc_hmc *hmc;
1636 hmc = &hmcs[hmc_index];
1637 spin_lock_irqsave(&hmc->lock, flags);
1639 if (hmc->state == ibmhmc_state_free) {
1640 dev_err(adapter->dev, "Recv_msg: invalid hmc state = 0x%x\n",
1641 hmc->state);
1643 spin_unlock_irqrestore(&hmc->lock, flags);
1647 buffer = &hmc->buffer[buffer_id];
1652 spin_unlock_irqrestore(&hmc->lock, flags);
1665 (unsigned int)hmc->queue_head, (unsigned int)hmc_index);
1673 spin_unlock_irqrestore(&hmc->lock, flags);
1678 hmc->queue_outbound_msgs[hmc->queue_head] = buffer_id;
1679 hmc->queue_head++;
1680 if (hmc->queue_head == ibmvmc_max_buf_pool_size)
1681 hmc->queue_head = 0;
1683 if (hmc->queue_head == hmc->queue_tail)
1686 spin_unlock_irqrestore(&hmc->lock, flags);
1886 dev_dbg(adapter->dev, "open_resp: set hmc state = ready\n");
1889 dev_warn(adapter->dev, "open_resp: invalid hmc state (0x%x)\n",