• Home
  • Raw
  • Download

Lines Matching refs:orb

273 	void (*callback)(struct sbp2_orb * orb, struct sbp2_status * status);
413 struct sbp2_orb *orb = container_of(kref, struct sbp2_orb, kref); in free_orb() local
415 kfree(orb); in free_orb()
424 struct sbp2_orb *orb; in sbp2_status_write() local
449 list_for_each_entry(orb, &lu->orb_list, link) { in sbp2_status_write()
451 STATUS_GET_ORB_LOW(status) == orb->request_bus) { in sbp2_status_write()
452 orb->rcode = RCODE_COMPLETE; in sbp2_status_write()
453 list_del(&orb->link); in sbp2_status_write()
459 if (&orb->link != &lu->orb_list) { in sbp2_status_write()
460 orb->callback(orb, &status); in sbp2_status_write()
461 kref_put(&orb->kref, free_orb); /* orb callback reference */ in sbp2_status_write()
472 struct sbp2_orb *orb = data; in complete_transaction() local
484 spin_lock_irqsave(&orb->lu->tgt->lock, flags); in complete_transaction()
486 if (orb->rcode == -1) in complete_transaction()
487 orb->rcode = rcode; in complete_transaction()
488 if (orb->rcode != RCODE_COMPLETE) { in complete_transaction()
489 list_del(&orb->link); in complete_transaction()
490 spin_unlock_irqrestore(&orb->lu->tgt->lock, flags); in complete_transaction()
492 orb->callback(orb, NULL); in complete_transaction()
493 kref_put(&orb->kref, free_orb); /* orb callback reference */ in complete_transaction()
495 spin_unlock_irqrestore(&orb->lu->tgt->lock, flags); in complete_transaction()
498 kref_put(&orb->kref, free_orb); /* transaction callback reference */ in complete_transaction()
501 static void sbp2_send_orb(struct sbp2_orb *orb, struct sbp2_logical_unit *lu, in sbp2_send_orb() argument
509 orb_pointer.low = cpu_to_be32(orb->request_bus); in sbp2_send_orb()
511 orb->lu = lu; in sbp2_send_orb()
513 list_add_tail(&orb->link, &lu->orb_list); in sbp2_send_orb()
516 kref_get(&orb->kref); /* transaction callback reference */ in sbp2_send_orb()
517 kref_get(&orb->kref); /* orb callback reference */ in sbp2_send_orb()
519 fw_send_request(device->card, &orb->t, TCODE_WRITE_BLOCK_REQUEST, in sbp2_send_orb()
521 &orb_pointer, 8, complete_transaction, orb); in sbp2_send_orb()
527 struct sbp2_orb *orb, *next; in sbp2_cancel_orbs() local
536 list_for_each_entry_safe(orb, next, &list, link) { in sbp2_cancel_orbs()
538 if (fw_cancel_transaction(device->card, &orb->t) == 0) in sbp2_cancel_orbs()
541 orb->rcode = RCODE_CANCELLED; in sbp2_cancel_orbs()
542 orb->callback(orb, NULL); in sbp2_cancel_orbs()
543 kref_put(&orb->kref, free_orb); /* orb callback reference */ in sbp2_cancel_orbs()
552 struct sbp2_management_orb *orb = in complete_management_orb() local
556 memcpy(&orb->status, status, sizeof(*status)); in complete_management_orb()
557 complete(&orb->done); in complete_management_orb()
565 struct sbp2_management_orb *orb; in sbp2_send_management_orb() local
572 orb = kzalloc(sizeof(*orb), GFP_NOIO); in sbp2_send_management_orb()
573 if (orb == NULL) in sbp2_send_management_orb()
576 kref_init(&orb->base.kref); in sbp2_send_management_orb()
577 orb->response_bus = in sbp2_send_management_orb()
578 dma_map_single(device->card->device, &orb->response, in sbp2_send_management_orb()
579 sizeof(orb->response), DMA_FROM_DEVICE); in sbp2_send_management_orb()
580 if (dma_mapping_error(device->card->device, orb->response_bus)) in sbp2_send_management_orb()
583 orb->request.response.high = 0; in sbp2_send_management_orb()
584 orb->request.response.low = cpu_to_be32(orb->response_bus); in sbp2_send_management_orb()
586 orb->request.misc = cpu_to_be32( in sbp2_send_management_orb()
590 orb->request.length = cpu_to_be32( in sbp2_send_management_orb()
591 MANAGEMENT_ORB_RESPONSE_LENGTH(sizeof(orb->response))); in sbp2_send_management_orb()
593 orb->request.status_fifo.high = in sbp2_send_management_orb()
595 orb->request.status_fifo.low = in sbp2_send_management_orb()
600 orb->request.misc |= cpu_to_be32( in sbp2_send_management_orb()
608 init_completion(&orb->done); in sbp2_send_management_orb()
609 orb->base.callback = complete_management_orb; in sbp2_send_management_orb()
611 orb->base.request_bus = in sbp2_send_management_orb()
612 dma_map_single(device->card->device, &orb->request, in sbp2_send_management_orb()
613 sizeof(orb->request), DMA_TO_DEVICE); in sbp2_send_management_orb()
614 if (dma_mapping_error(device->card->device, orb->base.request_bus)) in sbp2_send_management_orb()
617 sbp2_send_orb(&orb->base, lu, node_id, generation, in sbp2_send_management_orb()
620 wait_for_completion_timeout(&orb->done, msecs_to_jiffies(timeout)); in sbp2_send_management_orb()
625 orb->base.rcode); in sbp2_send_management_orb()
629 if (orb->base.rcode != RCODE_COMPLETE) { in sbp2_send_management_orb()
631 orb->base.rcode); in sbp2_send_management_orb()
635 if (STATUS_GET_RESPONSE(orb->status) != 0 || in sbp2_send_management_orb()
636 STATUS_GET_SBP_STATUS(orb->status) != 0) { in sbp2_send_management_orb()
638 STATUS_GET_RESPONSE(orb->status), in sbp2_send_management_orb()
639 STATUS_GET_SBP_STATUS(orb->status)); in sbp2_send_management_orb()
645 dma_unmap_single(device->card->device, orb->base.request_bus, in sbp2_send_management_orb()
646 sizeof(orb->request), DMA_TO_DEVICE); in sbp2_send_management_orb()
648 dma_unmap_single(device->card->device, orb->response_bus, in sbp2_send_management_orb()
649 sizeof(orb->response), DMA_FROM_DEVICE); in sbp2_send_management_orb()
652 memcpy(response, orb->response, sizeof(orb->response)); in sbp2_send_management_orb()
653 kref_put(&orb->base.kref, free_orb); in sbp2_send_management_orb()
1296 struct sbp2_command_orb *orb) in sbp2_unmap_scatterlist() argument
1298 scsi_dma_unmap(orb->cmd); in sbp2_unmap_scatterlist()
1300 if (orb->request.misc & cpu_to_be32(COMMAND_ORB_PAGE_TABLE_PRESENT)) in sbp2_unmap_scatterlist()
1301 dma_unmap_single(card_device, orb->page_table_bus, in sbp2_unmap_scatterlist()
1302 sizeof(orb->page_table), DMA_TO_DEVICE); in sbp2_unmap_scatterlist()
1354 struct sbp2_command_orb *orb = in complete_command_orb() local
1379 orb->cmd->sense_buffer); in complete_command_orb()
1390 dma_unmap_single(device->card->device, orb->base.request_bus, in complete_command_orb()
1391 sizeof(orb->request), DMA_TO_DEVICE); in complete_command_orb()
1392 sbp2_unmap_scatterlist(device->card->device, orb); in complete_command_orb()
1394 orb->cmd->result = result; in complete_command_orb()
1395 orb->cmd->scsi_done(orb->cmd); in complete_command_orb()
1398 static int sbp2_map_scatterlist(struct sbp2_command_orb *orb, in sbp2_map_scatterlist() argument
1401 struct scatterlist *sg = scsi_sglist(orb->cmd); in sbp2_map_scatterlist()
1404 n = scsi_dma_map(orb->cmd); in sbp2_map_scatterlist()
1416 orb->request.data_descriptor.high = in sbp2_map_scatterlist()
1418 orb->request.data_descriptor.low = in sbp2_map_scatterlist()
1420 orb->request.misc |= in sbp2_map_scatterlist()
1426 orb->page_table[i].high = cpu_to_be32(sg_dma_len(sg) << 16); in sbp2_map_scatterlist()
1427 orb->page_table[i].low = cpu_to_be32(sg_dma_address(sg)); in sbp2_map_scatterlist()
1430 orb->page_table_bus = in sbp2_map_scatterlist()
1431 dma_map_single(device->card->device, orb->page_table, in sbp2_map_scatterlist()
1432 sizeof(orb->page_table), DMA_TO_DEVICE); in sbp2_map_scatterlist()
1433 if (dma_mapping_error(device->card->device, orb->page_table_bus)) in sbp2_map_scatterlist()
1443 orb->request.data_descriptor.high = cpu_to_be32(lu->tgt->address_high); in sbp2_map_scatterlist()
1444 orb->request.data_descriptor.low = cpu_to_be32(orb->page_table_bus); in sbp2_map_scatterlist()
1445 orb->request.misc |= cpu_to_be32(COMMAND_ORB_PAGE_TABLE_PRESENT | in sbp2_map_scatterlist()
1451 scsi_dma_unmap(orb->cmd); in sbp2_map_scatterlist()
1463 struct sbp2_command_orb *orb; in sbp2_scsi_queuecommand() local
1466 orb = kzalloc(sizeof(*orb), GFP_ATOMIC); in sbp2_scsi_queuecommand()
1467 if (orb == NULL) in sbp2_scsi_queuecommand()
1471 orb->base.rcode = -1; in sbp2_scsi_queuecommand()
1472 kref_init(&orb->base.kref); in sbp2_scsi_queuecommand()
1473 orb->cmd = cmd; in sbp2_scsi_queuecommand()
1474 orb->request.next.high = cpu_to_be32(SBP2_ORB_NULL); in sbp2_scsi_queuecommand()
1475 orb->request.misc = cpu_to_be32( in sbp2_scsi_queuecommand()
1481 orb->request.misc |= cpu_to_be32(COMMAND_ORB_DIRECTION); in sbp2_scsi_queuecommand()
1486 if (scsi_sg_count(cmd) && sbp2_map_scatterlist(orb, device, lu) < 0) in sbp2_scsi_queuecommand()
1489 memcpy(orb->request.command_block, cmd->cmnd, cmd->cmd_len); in sbp2_scsi_queuecommand()
1491 orb->base.callback = complete_command_orb; in sbp2_scsi_queuecommand()
1492 orb->base.request_bus = in sbp2_scsi_queuecommand()
1493 dma_map_single(device->card->device, &orb->request, in sbp2_scsi_queuecommand()
1494 sizeof(orb->request), DMA_TO_DEVICE); in sbp2_scsi_queuecommand()
1495 if (dma_mapping_error(device->card->device, orb->base.request_bus)) { in sbp2_scsi_queuecommand()
1496 sbp2_unmap_scatterlist(device->card->device, orb); in sbp2_scsi_queuecommand()
1500 sbp2_send_orb(&orb->base, lu, lu->tgt->node_id, generation, in sbp2_scsi_queuecommand()
1504 kref_put(&orb->base.kref, free_orb); in sbp2_scsi_queuecommand()