• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/firewire/

Lines Matching defs:orb

101 /* Management orb opcodes */
150 void (*callback)(struct sbp2_orb * orb, struct sbp2_status * status);
276 struct sbp2_orb *orb;
292 fw_notify("non-orb related status write, not handled\n");
297 /* Lookup the orb corresponding to this status write. */
299 list_for_each_entry(orb, &sd->orb_list, link) {
301 STATUS_GET_ORB_LOW(status) == orb->request_bus &&
302 orb->rcode == RCODE_COMPLETE) {
303 list_del(&orb->link);
309 if (&orb->link != &sd->orb_list)
310 orb->callback(orb, &status);
312 fw_error("status write for unknown orb\n");
321 struct sbp2_orb *orb = data;
324 orb->rcode = rcode;
327 list_del(&orb->link);
329 orb->callback(orb, NULL);
334 sbp2_send_orb(struct sbp2_orb *orb, struct fw_unit *unit,
341 orb->pointer.high = 0;
342 orb->pointer.low = orb->request_bus;
343 fw_memcpy_to_be32(&orb->pointer, &orb->pointer, sizeof(orb->pointer));
346 list_add_tail(&orb->link, &sd->orb_list);
349 fw_send_request(device->card, &orb->t, TCODE_WRITE_BLOCK_REQUEST,
352 &orb->pointer, sizeof(orb->pointer),
353 complete_transaction, orb);
360 struct sbp2_orb *orb, *next;
370 list_for_each_entry_safe(orb, next, &list, link) {
372 if (fw_cancel_transaction(device->card, &orb->t) == 0)
375 orb->rcode = RCODE_CANCELLED;
376 orb->callback(orb, NULL);
385 struct sbp2_management_orb *orb =
389 memcpy(&orb->status, status, sizeof(*status));
390 complete(&orb->done);
399 struct sbp2_management_orb *orb;
402 orb = kzalloc(sizeof(*orb), GFP_ATOMIC);
403 if (orb == NULL)
410 orb->base.request_bus =
411 dma_map_single(device->card->device, &orb->request,
412 sizeof(orb->request), DMA_TO_DEVICE);
413 if (dma_mapping_error(orb->base.request_bus))
416 orb->response_bus =
417 dma_map_single(device->card->device, &orb->response,
418 sizeof(orb->response), DMA_FROM_DEVICE);
419 if (dma_mapping_error(orb->response_bus))
422 orb->request.response.high = 0;
423 orb->request.response.low = orb->response_bus;
425 orb->request.misc =
429 orb->request.length =
430 MANAGEMENT_ORB_RESPONSE_LENGTH(sizeof(orb->response));
432 orb->request.status_fifo.high = sd->address_handler.offset >> 32;
433 orb->request.status_fifo.low = sd->address_handler.offset;
436 orb->request.misc |=
441 fw_memcpy_to_be32(&orb->request, &orb->request, sizeof(orb->request));
443 init_completion(&orb->done);
444 orb->base.callback = complete_management_orb;
446 sbp2_send_orb(&orb->base, unit,
449 wait_for_completion_timeout(&orb->done,
454 fw_error("orb reply timed out, rcode=0x%02x\n",
455 orb->base.rcode);
459 if (orb->base.rcode != RCODE_COMPLETE) {
461 orb->base.rcode);
465 if (STATUS_GET_RESPONSE(orb->status) != 0 ||
466 STATUS_GET_SBP_STATUS(orb->status) != 0) {
468 STATUS_GET_RESPONSE(orb->status),
469 STATUS_GET_SBP_STATUS(orb->status));
475 dma_unmap_single(device->card->device, orb->base.request_bus,
476 sizeof(orb->request), DMA_TO_DEVICE);
477 dma_unmap_single(device->card->device, orb->response_bus,
478 sizeof(orb->response), DMA_FROM_DEVICE);
482 orb->response, sizeof(orb->response));
483 kfree(orb);
825 struct sbp2_command_orb *orb = (struct sbp2_command_orb *)base_orb;
826 struct fw_unit *unit = orb->unit;
851 orb->cmd->sense_buffer);
854 * If the orb completes with status == NULL, something
855 * went wrong, typically a bus reset happened mid-orb
861 dma_unmap_single(device->card->device, orb->base.request_bus,
862 sizeof(orb->request), DMA_TO_DEVICE);
864 if (orb->cmd->use_sg > 0) {
865 sg = (struct scatterlist *)orb->cmd->request_buffer;
866 dma_unmap_sg(device->card->device, sg, orb->cmd->use_sg,
867 orb->cmd->sc_data_direction);
870 if (orb->page_table_bus != 0)
871 dma_unmap_single(device->card->device, orb->page_table_bus,
872 sizeof(orb->page_table_bus), DMA_TO_DEVICE);
874 if (orb->request_buffer_bus != 0)
875 dma_unmap_single(device->card->device, orb->request_buffer_bus,
876 sizeof(orb->request_buffer_bus),
879 orb->cmd->result = result;
880 orb->done(orb->cmd);
881 kfree(orb);
884 static int sbp2_command_orb_map_scatterlist(struct sbp2_command_orb *orb)
887 (struct sbp2_device *)orb->cmd->device->host->hostdata;
895 sg = (struct scatterlist *)orb->cmd->request_buffer;
896 count = dma_map_sg(device->card->device, sg, orb->cmd->use_sg,
897 orb->cmd->sc_data_direction);
902 orb->request.data_descriptor.high = sd->address_high;
903 orb->request.data_descriptor.low = sg_dma_address(sg);
904 orb->request.misc |=
921 orb->page_table[j].low = sg_addr;
922 orb->page_table[j].high = (l << 16);
929 size = sizeof(orb->page_table[0]) * j;
939 orb->page_table_bus =
940 dma_map_single(device->card->device, orb->page_table,
942 if (dma_mapping_error(orb->page_table_bus))
944 orb->request.data_descriptor.high = sd->address_high;
945 orb->request.data_descriptor.low = orb->page_table_bus;
946 orb->request.misc |=
950 fw_memcpy_to_be32(orb->page_table, orb->page_table, size);
955 dma_unmap_sg(device->card->device, sg, orb->cmd->use_sg,
956 orb->cmd->sc_data_direction);
969 struct sbp2_command_orb *orb;
982 orb = kzalloc(sizeof(*orb), GFP_ATOMIC);
983 if (orb == NULL) {
984 fw_notify("failed to alloc orb\n");
989 orb->base.rcode = -1;
990 orb->base.request_bus =
991 dma_map_single(device->card->device, &orb->request,
992 sizeof(orb->request), DMA_TO_DEVICE);
993 if (dma_mapping_error(orb->base.request_bus))
996 orb->unit = unit;
997 orb->done = done;
998 orb->cmd = cmd;
1000 orb->request.next.high = SBP2_ORB_NULL;
1001 orb->request.next.low = 0x0;
1008 orb->request.misc =
1014 orb->request.misc |=
1017 orb->request.misc |=
1020 if (cmd->use_sg && sbp2_command_orb_map_scatterlist(orb) < 0)
1023 fw_memcpy_to_be32(&orb->request, &orb->request, sizeof(orb->request));
1025 memset(orb->request.command_block,
1026 0, sizeof(orb->request.command_block));
1027 memcpy(orb->request.command_block, cmd->cmnd, COMMAND_SIZE(*cmd->cmnd));
1029 orb->base.callback = complete_command_orb;
1031 sbp2_send_orb(&orb->base, unit, sd->node_id, sd->generation,
1037 dma_unmap_single(device->card->device, orb->base.request_bus,
1038 sizeof(orb->request), DMA_TO_DEVICE);
1040 kfree(orb);