• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/scsi/ibmvscsi/

Lines Matching refs:hostdata

134  * @hostdata:	ibmvscsi_host_data who owns the event pool
139 int size, struct ibmvscsi_host_data *hostdata)
150 dma_alloc_coherent(hostdata->dev,
167 evt->hostdata = hostdata;
178 * @hostdata: ibmvscsi_host_data who owns the even pool
183 struct ibmvscsi_host_data *hostdata)
190 dma_free_coherent(hostdata->dev,
197 dev_warn(hostdata->dev, "releasing event pool with %d "
200 dma_free_coherent(hostdata->dev,
233 dev_err(evt->hostdata->dev, "Freeing invalid event_struct %p "
238 dev_err(evt->hostdata->dev, "Freeing event_struct %p "
473 * @hostdata: the adapter
475 static void purge_requests(struct ibmvscsi_host_data *hostdata, int error_code)
480 spin_lock_irqsave(hostdata->host->host_lock, flags);
481 while (!list_empty(&hostdata->sent)) {
482 evt = list_first_entry(&hostdata->sent, struct srp_event_struct, list);
486 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
490 evt->hostdata->dev);
495 free_event_struct(&evt->hostdata->pool, evt);
496 spin_lock_irqsave(hostdata->host->host_lock, flags);
498 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
503 * @hostdata: struct ibmvscsi_host_data to reset
505 static void ibmvscsi_reset_host(struct ibmvscsi_host_data *hostdata)
507 scsi_block_requests(hostdata->host);
508 atomic_set(&hostdata->request_limit, 0);
510 purge_requests(hostdata, DID_ERROR);
511 hostdata->reset_crq = 1;
512 wake_up(&hostdata->work_wait_q);
523 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
525 dev_err(hostdata->dev, "Command timed out (%x). Resetting connection\n",
528 ibmvscsi_reset_host(hostdata);
538 * @hostdata: ibmvscsi_host_data of host
545 struct ibmvscsi_host_data *hostdata,
562 atomic_dec_if_positive(&hostdata->request_limit);
592 list_for_each_entry(tmp_evt, &hostdata->sent, list) {
609 list_add_tail(&evt_struct->list, &hostdata->sent);
620 ibmvscsi_ops->send_crq(hostdata, crq_as_u64[0], crq_as_u64[1])) != 0) {
630 dev_warn(hostdata->dev, "send warning. "
634 dev_err(hostdata->dev, "send error %d\n", rc);
636 atomic_inc(&hostdata->request_limit);
643 unmap_cmd_data(&evt_struct->iu.srp.cmd, evt_struct, hostdata->dev);
645 free_event_struct(&hostdata->pool, evt_struct);
647 atomic_inc(&hostdata->request_limit);
651 unmap_cmd_data(&evt_struct->iu.srp.cmd, evt_struct, hostdata->dev);
659 free_event_struct(&hostdata->pool, evt_struct);
677 dev_warn(evt_struct->hostdata->dev,
689 evt_struct->hostdata->dev);
722 struct ibmvscsi_host_data *hostdata = shost_priv(cmnd->device->host);
727 evt_struct = get_event_struct(&hostdata->pool);
738 if (!map_data_for_srp_cmd(cmnd, evt_struct, srp_cmd, hostdata->dev)) {
742 free_event_struct(&hostdata->pool, evt_struct);
766 return ibmvscsi_send_srp_event(evt_struct, hostdata, 0);
775 * @hostdata: ibmvscsi_host_data of host
780 static int map_persist_bufs(struct ibmvscsi_host_data *hostdata)
783 hostdata->caps_addr = dma_map_single(hostdata->dev, &hostdata->caps,
784 sizeof(hostdata->caps), DMA_BIDIRECTIONAL);
786 if (dma_mapping_error(hostdata->dev, hostdata->caps_addr)) {
787 dev_err(hostdata->dev, "Unable to map capabilities buffer!\n");
791 hostdata->adapter_info_addr = dma_map_single(hostdata->dev,
792 &hostdata->madapter_info,
793 sizeof(hostdata->madapter_info),
795 if (dma_mapping_error(hostdata->dev, hostdata->adapter_info_addr)) {
796 dev_err(hostdata->dev, "Unable to map adapter info buffer!\n");
797 dma_unmap_single(hostdata->dev, hostdata->caps_addr,
798 sizeof(hostdata->caps), DMA_BIDIRECTIONAL);
807 * @hostdata: ibmvscsi_host_data of host
811 static void unmap_persist_bufs(struct ibmvscsi_host_data *hostdata)
813 dma_unmap_single(hostdata->dev, hostdata->caps_addr,
814 sizeof(hostdata->caps), DMA_BIDIRECTIONAL);
816 dma_unmap_single(hostdata->dev, hostdata->adapter_info_addr,
817 sizeof(hostdata->madapter_info), DMA_BIDIRECTIONAL);
829 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
834 dev_info(hostdata->dev, "SRP_LOGIN_REJ reason %u\n",
837 atomic_set(&hostdata->request_limit, -1);
840 dev_err(hostdata->dev, "Invalid login response typecode 0x%02x!\n",
843 atomic_set(&hostdata->request_limit, -1);
847 dev_info(hostdata->dev, "SRP_LOGIN succeeded\n");
848 hostdata->client_migrated = 0;
854 atomic_set(&hostdata->request_limit,
858 scsi_unblock_requests(hostdata->host);
863 * @hostdata: ibmvscsi_host_data of host
867 static int send_srp_login(struct ibmvscsi_host_data *hostdata)
872 struct srp_event_struct *evt_struct = get_event_struct(&hostdata->pool);
884 spin_lock_irqsave(hostdata->host->host_lock, flags);
889 atomic_set(&hostdata->request_limit, 0);
891 rc = ibmvscsi_send_srp_event(evt_struct, hostdata, login_timeout * 2);
892 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
893 dev_info(hostdata->dev, "sent SRP login\n");
905 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
908 dev_err(hostdata->dev, "error 0x%X getting capabilities info\n",
911 if (hostdata->caps.migration.common.server_support != SERVER_SUPPORTS_CAP)
912 dev_info(hostdata->dev, "Partition migration not supported\n");
915 if (hostdata->caps.reserve.common.server_support ==
917 dev_info(hostdata->dev, "Client reserve enabled\n");
919 dev_info(hostdata->dev, "Client reserve not supported\n");
923 send_srp_login(hostdata);
929 * @hostdata: ibmvscsi_host_data of host
931 static void send_mad_capabilities(struct ibmvscsi_host_data *hostdata)
936 struct device_node *of_node = hostdata->dev->of_node;
939 evt_struct = get_event_struct(&hostdata->pool);
948 hostdata->caps.flags = CAP_LIST_SUPPORTED;
949 if (hostdata->client_migrated)
950 hostdata->caps.flags |= CLIENT_MIGRATED;
952 strncpy(hostdata->caps.name, dev_name(&hostdata->host->shost_gendev),
953 sizeof(hostdata->caps.name));
954 hostdata->caps.name[sizeof(hostdata->caps.name) - 1] = '\0';
957 location = location ? location : dev_name(hostdata->dev);
958 strncpy(hostdata->caps.loc, location, sizeof(hostdata->caps.loc));
959 hostdata->caps.loc[sizeof(hostdata->caps.loc) - 1] = '\0';
962 req->buffer = hostdata->caps_addr;
964 hostdata->caps.migration.common.cap_type = MIGRATION_CAPABILITIES;
965 hostdata->caps.migration.common.length = sizeof(hostdata->caps.migration);
966 hostdata->caps.migration.common.server_support = SERVER_SUPPORTS_CAP;
967 hostdata->caps.migration.ecl = 1;
970 hostdata->caps.reserve.common.cap_type = RESERVATION_CAPABILITIES;
971 hostdata->caps.reserve.common.length = sizeof(hostdata->caps.reserve);
972 hostdata->caps.reserve.common.server_support = SERVER_SUPPORTS_CAP;
973 hostdata->caps.reserve.type = CLIENT_RESERVE_SCSI_2;
974 req->common.length = sizeof(hostdata->caps);
976 req->common.length = sizeof(hostdata->caps) - sizeof(hostdata->caps.reserve);
978 spin_lock_irqsave(hostdata->host->host_lock, flags);
979 if (ibmvscsi_send_srp_event(evt_struct, hostdata, info_timeout * 2))
980 dev_err(hostdata->dev, "couldn't send CAPABILITIES_REQ!\n");
981 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
993 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
997 dev_err(hostdata->dev, "fast_fail not supported in server\n");
999 dev_err(hostdata->dev, "fast_fail request failed\n");
1001 dev_err(hostdata->dev, "error 0x%X enabling fast_fail\n", status);
1003 send_mad_capabilities(hostdata);
1008 * @hostdata: ibmvscsi_host_data of host
1012 static int enable_fast_fail(struct ibmvscsi_host_data *hostdata)
1020 send_mad_capabilities(hostdata);
1024 evt_struct = get_event_struct(&hostdata->pool);
1034 spin_lock_irqsave(hostdata->host->host_lock, flags);
1035 rc = ibmvscsi_send_srp_event(evt_struct, hostdata, info_timeout * 2);
1036 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1049 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
1052 dev_err(hostdata->dev, "error %d getting adapter info\n",
1055 dev_info(hostdata->dev, "host srp version: %s, "
1057 hostdata->madapter_info.srp_version,
1058 hostdata->madapter_info.partition_name,
1059 hostdata->madapter_info.partition_number,
1060 hostdata->madapter_info.os_type,
1061 hostdata->madapter_info.port_max_txu[0]);
1063 if (hostdata->madapter_info.port_max_txu[0])
1064 hostdata->host->max_sectors =
1065 hostdata->madapter_info.port_max_txu[0] >> 9;
1067 if (hostdata->madapter_info.os_type == 3 &&
1068 strcmp(hostdata->madapter_info.srp_version, "1.6a") <= 0) {
1069 dev_err(hostdata->dev, "host (Ver. %s) doesn't support large transfers\n",
1070 hostdata->madapter_info.srp_version);
1071 dev_err(hostdata->dev, "limiting scatterlists to %d\n",
1073 hostdata->host->sg_tablesize = MAX_INDIRECT_BUFS;
1076 if (hostdata->madapter_info.os_type == 3) {
1077 enable_fast_fail(hostdata);
1082 send_srp_login(hostdata);
1090 * @hostdata: ibmvscsi_host_data of host
1094 static void send_mad_adapter_info(struct ibmvscsi_host_data *hostdata)
1100 evt_struct = get_event_struct(&hostdata->pool);
1112 req->common.length = sizeof(hostdata->madapter_info);
1113 req->buffer = hostdata->adapter_info_addr;
1115 spin_lock_irqsave(hostdata->host->host_lock, flags);
1116 if (ibmvscsi_send_srp_event(evt_struct, hostdata, info_timeout * 2))
1117 dev_err(hostdata->dev, "couldn't send ADAPTER_INFO_REQ!\n");
1118 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1125 static void init_adapter(struct ibmvscsi_host_data *hostdata)
1127 send_mad_adapter_info(hostdata);
1151 struct ibmvscsi_host_data *hostdata = shost_priv(cmd->device->host);
1164 spin_lock_irqsave(hostdata->host->host_lock, flags);
1168 list_for_each_entry(tmp_evt, &hostdata->sent, list) {
1176 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1180 evt = get_event_struct(&hostdata->pool);
1182 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1205 rsp_rc = ibmvscsi_send_srp_event(evt, hostdata, abort_timeout * 2);
1210 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1212 spin_lock_irqsave(hostdata->host->host_lock, flags);
1215 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1254 spin_lock_irqsave(hostdata->host->host_lock, flags);
1256 list_for_each_entry(tmp_evt, &hostdata->sent, list) {
1264 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1276 found_evt->hostdata->dev);
1277 free_event_struct(&found_evt->hostdata->pool, found_evt);
1278 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1279 atomic_inc(&hostdata->request_limit);
1290 struct ibmvscsi_host_data *hostdata = shost_priv(cmd->device->host);
1300 spin_lock_irqsave(hostdata->host->host_lock, flags);
1303 evt = get_event_struct(&hostdata->pool);
1305 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1327 rsp_rc = ibmvscsi_send_srp_event(evt, hostdata, reset_timeout * 2);
1332 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1334 spin_lock_irqsave(hostdata->host->host_lock, flags);
1337 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1374 spin_lock_irqsave(hostdata->host->host_lock, flags);
1375 list_for_each_entry_safe(tmp_evt, pos, &hostdata->sent, list) {
1381 tmp_evt->hostdata->dev);
1382 free_event_struct(&tmp_evt->hostdata->pool,
1384 atomic_inc(&hostdata->request_limit);
1391 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1402 struct ibmvscsi_host_data *hostdata = shost_priv(cmd->device->host);
1404 dev_err(hostdata->dev, "Resetting connection due to error recovery\n");
1406 ibmvscsi_reset_host(hostdata);
1410 atomic_read(&hostdata->request_limit) < 2;) {
1415 if (atomic_read(&hostdata->request_limit) <= 0)
1424 * @hostdata: ibmvscsi_host_data of host
1428 struct ibmvscsi_host_data *hostdata)
1438 dev_info(hostdata->dev, "partner initialized\n");
1440 if ((rc = ibmvscsi_ops->send_crq(hostdata,
1443 init_adapter(hostdata);
1445 dev_err(hostdata->dev, "Unable to send init rsp. rc=%ld\n", rc);
1450 dev_info(hostdata->dev, "partner initialization complete\n");
1453 init_adapter(hostdata);
1456 dev_err(hostdata->dev, "unknown crq message type: %d\n", crq->format);
1460 scsi_block_requests(hostdata->host);
1461 atomic_set(&hostdata->request_limit, 0);
1464 dev_info(hostdata->dev, "Re-enabling adapter!\n");
1465 hostdata->client_migrated = 1;
1466 hostdata->reenable_crq = 1;
1467 purge_requests(hostdata, DID_REQUEUE);
1468 wake_up(&hostdata->work_wait_q);
1470 dev_err(hostdata->dev, "Virtual adapter failed rc %d!\n",
1472 ibmvscsi_reset_host(hostdata);
1478 dev_err(hostdata->dev, "got an invalid message type 0x%02x\n",
1487 if (!valid_event_struct(&hostdata->pool, evt_struct)) {
1488 dev_err(hostdata->dev, "returned correlation_token 0x%p is invalid!\n",
1494 dev_err(hostdata->dev, "received duplicate correlation_token 0x%p!\n",
1501 &hostdata->request_limit);
1510 dev_err(hostdata->dev, "returned done() is NULL; not running it!\n");
1516 spin_lock_irqsave(evt_struct->hostdata->host->host_lock, flags);
1518 free_event_struct(&evt_struct->hostdata->pool, evt_struct);
1519 spin_unlock_irqrestore(evt_struct->hostdata->host->host_lock, flags);
1526 static int ibmvscsi_do_host_config(struct ibmvscsi_host_data *hostdata,
1535 evt_struct = get_event_struct(&hostdata->pool);
1537 dev_err(hostdata->dev, "couldn't allocate event for HOST_CONFIG!\n");
1552 host_config->buffer = addr = dma_map_single(hostdata->dev, buffer,
1556 if (dma_mapping_error(hostdata->dev, host_config->buffer)) {
1558 dev_err(hostdata->dev,
1560 free_event_struct(&hostdata->pool, evt_struct);
1565 spin_lock_irqsave(hostdata->host->host_lock, flags);
1566 rc = ibmvscsi_send_srp_event(evt_struct, hostdata, info_timeout * 2);
1567 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1570 dma_unmap_single(hostdata->dev, addr, length, DMA_BIDIRECTIONAL);
1627 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1630 len = snprintf(buf, sizeof(hostdata->caps.loc), "%s\n",
1631 hostdata->caps.loc);
1647 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1650 len = snprintf(buf, sizeof(hostdata->caps.name), "%s\n",
1651 hostdata->caps.name);
1667 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1671 hostdata->madapter_info.srp_version);
1688 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1692 hostdata->madapter_info.partition_name);
1709 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1713 hostdata->madapter_info.partition_number);
1729 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1733 hostdata->madapter_info.mad_version);
1749 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1752 len = snprintf(buf, PAGE_SIZE, "%d\n", hostdata->madapter_info.os_type);
1768 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1771 if (ibmvscsi_do_host_config(hostdata, buf, PAGE_SIZE) == 0)
1838 static void ibmvscsi_do_work(struct ibmvscsi_host_data *hostdata)
1843 if (hostdata->reset_crq) {
1845 hostdata->reset_crq = 0;
1847 rc = ibmvscsi_ops->reset_crq_queue(&hostdata->queue, hostdata);
1849 rc = ibmvscsi_ops->send_crq(hostdata, 0xC001000000000000LL, 0);
1851 rc = vio_enable_interrupts(to_vio_dev(hostdata->dev));
1852 } else if (hostdata->reenable_crq) {
1855 rc = ibmvscsi_ops->reenable_crq_queue(&hostdata->queue, hostdata);
1856 hostdata->reenable_crq = 0;
1858 rc = ibmvscsi_ops->send_crq(hostdata, 0xC001000000000000LL, 0);
1863 atomic_set(&hostdata->request_limit, -1);
1864 dev_err(hostdata->dev, "error after %s\n", action);
1867 scsi_unblock_requests(hostdata->host);
1870 static int ibmvscsi_work_to_do(struct ibmvscsi_host_data *hostdata)
1874 else if (hostdata->reset_crq) {
1877 } else if (hostdata->reenable_crq) {
1887 struct ibmvscsi_host_data *hostdata = data;
1893 rc = wait_event_interruptible(hostdata->work_wait_q,
1894 ibmvscsi_work_to_do(hostdata));
1901 ibmvscsi_do_work(hostdata);
1912 struct ibmvscsi_host_data *hostdata;
1922 host = scsi_host_alloc(&driver_template, sizeof(*hostdata));
1929 hostdata = shost_priv(host);
1930 memset(hostdata, 0x00, sizeof(*hostdata));
1931 INIT_LIST_HEAD(&hostdata->sent);
1932 init_waitqueue_head(&hostdata->work_wait_q);
1933 hostdata->host = host;
1934 hostdata->dev = dev;
1935 atomic_set(&hostdata->request_limit, -1);
1936 hostdata->host->max_sectors = IBMVSCSI_MAX_SECTORS_DEFAULT;
1938 if (map_persist_bufs(hostdata)) {
1943 hostdata->work_thread = kthread_run(ibmvscsi_work, hostdata, "%s_%d",
1946 if (IS_ERR(hostdata->work_thread)) {
1948 PTR_ERR(hostdata->work_thread));
1952 rc = ibmvscsi_ops->init_crq_queue(&hostdata->queue, hostdata, max_events);
1957 if (initialize_event_pool(&hostdata->pool, max_events, hostdata) != 0) {
1967 if (scsi_add_host(hostdata->host, hostdata->dev))
1971 memcpy(ids.port_id, hostdata->madapter_info.partition_name,
1982 if (ibmvscsi_ops->send_crq(hostdata, 0xC001000000000000LL, 0) == 0
1992 atomic_read(&hostdata->request_limit) < 2;) {
1998 if (atomic_read(&hostdata->request_limit) > 0)
2002 dev_set_drvdata(&vdev->dev, hostdata);
2006 scsi_remove_host(hostdata->host);
2008 release_event_pool(&hostdata->pool, hostdata);
2010 ibmvscsi_ops->release_crq_queue(&hostdata->queue, hostdata, max_events);
2012 kthread_stop(hostdata->work_thread);
2014 unmap_persist_bufs(hostdata);
2023 struct ibmvscsi_host_data *hostdata = dev_get_drvdata(&vdev->dev);
2024 unmap_persist_bufs(hostdata);
2025 release_event_pool(&hostdata->pool, hostdata);
2026 ibmvscsi_ops->release_crq_queue(&hostdata->queue, hostdata,
2029 kthread_stop(hostdata->work_thread);
2030 srp_remove_host(hostdata->host);
2031 scsi_remove_host(hostdata->host);
2032 scsi_host_put(hostdata->host);
2046 struct ibmvscsi_host_data *hostdata = dev_get_drvdata(dev);
2047 return ibmvscsi_ops->resume(hostdata);