Lines Matching full:request
99 * If the request packet has already been sent, we need to see in fw_cancel_transaction()
292 * __fw_send_request() - submit a request packet for transmission to generate callback for response
294 * @card: interface to send the request at
295 * @t: transaction instance to which the request belongs
298 * @generation: bus generation in which request and response are valid
301 * @payload: data payload for the request subaction
308 * Submit a request packet into the asynchronous request transmission queue.
316 * @generation. Otherwise the request is in danger to be sent to a wrong node.
327 * In case of request types without payload, @data is NULL and @length is 0.
334 * %RCODE_NO_ACK) denote transaction timeout, busy responder, stale request
338 * than when the request packet actually hits the wire. On the other hand,
425 * fw_run_transaction() - send request and sleep until transaction is completed
426 * @card: card interface for this request
429 * @generation: bus generation in which request and response are valid
432 * @payload: data payload for the request subaction
436 * Unlike fw_send_request(), @data points to the payload of the request or/and
438 * request payloads of >= 8 bytes but not to inbound response payloads.
596 * When a request is received that falls within the specified address range, the specified callback
597 * is invoked. The parameters passed to the callback give the details of the particular request.
598 * The callback is invoked in the workqueue context in most cases. However, if the request is
678 void fw_request_get(struct fw_request *request) in fw_request_get() argument
680 kref_get(&request->kref); in fw_request_get()
685 struct fw_request *request = container_of(kref, struct fw_request, kref); in release_request() local
687 kfree(request); in release_request()
690 void fw_request_put(struct fw_request *request) in fw_request_put() argument
692 kref_put(&request->kref, release_request); in fw_request_put()
698 struct fw_request *request = container_of(packet, struct fw_request, response); in free_response_callback() local
700 trace_async_response_outbound_complete((uintptr_t)request, card->index, packet->generation, in free_response_callback()
704 fw_request_put(request); in free_response_callback()
707 fw_request_put(request); in free_response_callback()
821 struct fw_request *request; in allocate_request() local
849 fw_notice(card, "ERROR - corrupt request received - %08x %08x %08x\n", in allocate_request()
854 request = kmalloc(sizeof(*request) + length, GFP_ATOMIC); in allocate_request()
855 if (request == NULL) in allocate_request()
857 kref_init(&request->kref); in allocate_request()
862 request->response.timestamp = compute_split_timeout_timestamp(card, p->timestamp); in allocate_request()
864 request->response.speed = p->speed; in allocate_request()
865 request->response.generation = p->generation; in allocate_request()
866 request->response.ack = 0; in allocate_request()
867 request->response.callback = free_response_callback; in allocate_request()
868 request->ack = p->ack; in allocate_request()
869 request->timestamp = p->timestamp; in allocate_request()
870 request->length = length; in allocate_request()
872 memcpy(request->data, data, length); in allocate_request()
874 memcpy(request->request_header, p->header, sizeof(p->header)); in allocate_request()
876 return request; in allocate_request()
882 * @request: firewire request data for the transaction.
885 * Submit a response packet into the asynchronous response transmission queue. The @request
889 struct fw_request *request, int rcode) in fw_send_response() argument
895 if (request->ack != ACK_PENDING || in fw_send_response()
896 HEADER_DESTINATION_IS_BROADCAST(request->request_header)) { in fw_send_response()
897 fw_request_put(request); in fw_send_response()
902 data = request->data; in fw_send_response()
903 data_length = fw_get_response_length(request); in fw_send_response()
906 fw_fill_response(&request->response, request->request_header, rcode, data, data_length); in fw_send_response()
909 fw_request_get(request); in fw_send_response()
911 trace_async_response_outbound_initiate((uintptr_t)request, card->index, in fw_send_response()
912 request->response.generation, request->response.speed, in fw_send_response()
913 request->response.header, data, in fw_send_response()
916 card->driver->send_response(card, &request->response); in fw_send_response()
921 * fw_get_request_speed() - returns speed at which the @request was received
922 * @request: firewire request data
924 int fw_get_request_speed(struct fw_request *request) in fw_get_request_speed() argument
926 return request->response.speed; in fw_get_request_speed()
931 * fw_request_get_timestamp: Get timestamp of the request.
932 * @request: The opaque pointer to request structure.
934 * Get timestamp when 1394 OHCI controller receives the asynchronous request subaction. The
938 * Returns: timestamp of the request.
940 u32 fw_request_get_timestamp(const struct fw_request *request) in fw_request_get_timestamp() argument
942 return request->timestamp; in fw_request_get_timestamp()
948 struct fw_request *request, in handle_exclusive_region_request() argument
962 request->length); in handle_exclusive_region_request()
968 fw_send_response(card, request, RCODE_ADDRESS_ERROR); in handle_exclusive_region_request()
973 handler->address_callback(card, request, tcode, destination, source, p->generation, offset, in handle_exclusive_region_request()
974 request->data, request->length, handler->callback_data); in handle_exclusive_region_request()
983 struct fw_request *request, in handle_fcp_region_request() argument
992 request->length > 0x200) { in handle_fcp_region_request()
993 fw_send_response(card, request, RCODE_ADDRESS_ERROR); in handle_fcp_region_request()
1004 fw_send_response(card, request, RCODE_TYPE_ERROR); in handle_fcp_region_request()
1014 if (is_enclosing_handler(handler, offset, request->length)) { in handle_fcp_region_request()
1049 handler->address_callback(card, request, tcode, destination, source, in handle_fcp_region_request()
1050 p->generation, offset, request->data, in handle_fcp_region_request()
1051 request->length, handler->callback_data); in handle_fcp_region_request()
1058 fw_send_response(card, request, RCODE_COMPLETE); in handle_fcp_region_request()
1063 struct fw_request *request; in fw_core_handle_request() local
1078 request = allocate_request(card, p); in fw_core_handle_request()
1079 if (request == NULL) { in fw_core_handle_request()
1084 trace_async_request_inbound((uintptr_t)request, card->index, p->generation, p->speed, in fw_core_handle_request()
1085 p->ack, p->timestamp, p->header, request->data, in fw_core_handle_request()
1086 tcode_is_read_request(tcode) ? 0 : request->length / 4); in fw_core_handle_request()
1090 if (!is_in_fcp_region(offset, request->length)) in fw_core_handle_request()
1091 handle_exclusive_region_request(card, p, request, offset); in fw_core_handle_request()
1093 handle_fcp_region_request(card, p, request, offset); in fw_core_handle_request()
1111 // and addresses match to the transaction request queried later. in fw_core_handle_response()
1164 * The response handler may be executed while the request handler in fw_core_handle_response()
1165 * is still pending. Cancel the request handler. in fw_core_handle_response()
1208 static void handle_topology_map(struct fw_card *card, struct fw_request *request, in handle_topology_map() argument
1216 fw_send_response(card, request, RCODE_TYPE_ERROR); in handle_topology_map()
1221 fw_send_response(card, request, RCODE_ADDRESS_ERROR); in handle_topology_map()
1232 fw_send_response(card, request, RCODE_COMPLETE); in handle_topology_map()
1258 static void handle_registers(struct fw_card *card, struct fw_request *request, in handle_registers() argument
1361 * the stack never sees these request. If we add in handle_registers()
1374 fw_send_response(card, request, rcode); in handle_registers()
1382 static void handle_low_memory(struct fw_card *card, struct fw_request *request, in handle_low_memory() argument
1391 fw_send_response(card, request, RCODE_TYPE_ERROR); in handle_low_memory()