Lines Matching refs:fi
135 struct file_info *fi = req->file_info; in __queue_complete_req() local
137 list_move_tail(&req->list, &fi->req_complete); in __queue_complete_req()
138 wake_up(&fi->wait_complete); in __queue_complete_req()
144 struct file_info *fi = req->file_info; in queue_complete_req() local
146 spin_lock_irqsave(&fi->reqlists_lock, flags); in queue_complete_req()
148 spin_unlock_irqrestore(&fi->reqlists_lock, flags); in queue_complete_req()
253 struct file_info *fi; in host_reset() local
260 list_for_each_entry(fi, &hi->file_info_list, list) { in host_reset()
261 if (fi->notification == RAW1394_NOTIFY_ON) { in host_reset()
265 req->file_info = fi; in host_reset()
271 if (fi->protocol_version > 3) { in host_reset()
291 struct file_info *fi; in fcp_request() local
305 list_for_each_entry(fi, &hi->file_info_list, list) { in fcp_request()
306 if (!fi->fcp_buffer) in fcp_request()
329 req->file_info = fi; in fcp_request()
335 req->req.recvb = ptr2int(fi->fcp_buffer); in fcp_request()
410 static inline struct pending_request *__next_complete_req(struct file_info *fi) in __next_complete_req() argument
415 if (!list_empty(&fi->req_complete)) { in __next_complete_req()
416 lh = fi->req_complete.next; in __next_complete_req()
424 static struct pending_request *next_complete_req(struct file_info *fi) in next_complete_req() argument
429 spin_lock_irqsave(&fi->reqlists_lock, flags); in next_complete_req()
430 req = __next_complete_req(fi); in next_complete_req()
431 spin_unlock_irqrestore(&fi->reqlists_lock, flags); in next_complete_req()
438 struct file_info *fi = (struct file_info *)file->private_data; in raw1394_read() local
456 if (!(req = next_complete_req(fi))) in raw1394_read()
466 if (wait_event_interruptible(fi->wait_complete, in raw1394_read()
467 (req = next_complete_req(fi)))) in raw1394_read()
497 static int state_opened(struct file_info *fi, struct pending_request *req) in state_opened() argument
503 fi->state = initialized; in state_opened()
504 fi->protocol_version = req->req.misc; in state_opened()
522 static int state_initialized(struct file_info *fi, struct pending_request *req) in state_initialized() argument
575 list_add_tail(&fi->list, &hi->file_info_list); in state_initialized()
582 WARN_ON(fi->host); in state_initialized()
583 fi->host = hi->host; in state_initialized()
584 fi->state = connected; in state_initialized()
587 req->req.generation = get_hpsb_generation(fi->host); in state_initialized()
588 req->req.misc = (fi->host->node_id << 16) in state_initialized()
589 | fi->host->node_count; in state_initialized()
590 if (fi->protocol_version > 3) in state_initialized()
591 req->req.misc |= NODEID_TO_NODE(fi->host->irm_id) << 8; in state_initialized()
608 static void handle_fcp_listen(struct file_info *fi, struct pending_request *req) in handle_fcp_listen() argument
611 if (fi->fcp_buffer) { in handle_fcp_listen()
614 fi->fcp_buffer = int2ptr(req->req.recvb); in handle_fcp_listen()
617 if (!fi->fcp_buffer) { in handle_fcp_listen()
620 fi->fcp_buffer = NULL; in handle_fcp_listen()
628 static int handle_async_request(struct file_info *fi, in handle_async_request() argument
639 hpsb_make_readpacket(fi->host, node, addr, req->req.length); in handle_async_request()
654 packet = hpsb_make_writepacket(fi->host, node, addr, NULL, in handle_async_request()
678 hpsb_make_streampacket(fi->host, NULL, req->req.length, in handle_async_request()
707 packet = hpsb_make_lockpacket(fi->host, node, addr, in handle_async_request()
736 packet = hpsb_make_lock64packet(fi->host, node, addr, in handle_async_request()
766 spin_lock_irqsave(&fi->reqlists_lock, flags); in handle_async_request()
767 list_add_tail(&req->list, &fi->req_pending); in handle_async_request()
768 spin_unlock_irqrestore(&fi->reqlists_lock, flags); in handle_async_request()
781 static int handle_async_send(struct file_info *fi, struct pending_request *req) in handle_async_send() argument
824 packet->host = fi->host; in handle_async_send()
833 spin_lock_irqsave(&fi->reqlists_lock, flags); in handle_async_send()
834 list_add_tail(&req->list, &fi->req_pending); in handle_async_send()
835 spin_unlock_irqrestore(&fi->reqlists_lock, flags); in handle_async_send()
854 struct file_info *fi = NULL; in arm_read() local
869 list_for_each_entry(fi, &hi->file_info_list, list) { in arm_read()
870 entry = fi->addr_list.next; in arm_read()
871 while (entry != &(fi->addr_list)) { in arm_read()
946 req->file_info = fi; in arm_read()
1008 struct file_info *fi = NULL; in arm_write() local
1023 list_for_each_entry(fi, &hi->file_info_list, list) { in arm_write()
1024 entry = fi->addr_list.next; in arm_write()
1025 while (entry != &(fi->addr_list)) { in arm_write()
1091 req->file_info = fi; in arm_write()
1144 struct file_info *fi = NULL; in arm_lock() local
1170 list_for_each_entry(fi, &hi->file_info_list, list) { in arm_lock()
1171 entry = fi->addr_list.next; in arm_lock()
1172 while (entry != &(fi->addr_list)) { in arm_lock()
1316 req->file_info = fi; in arm_lock()
1362 struct file_info *fi = NULL; in arm_lock64() local
1395 list_for_each_entry(fi, &hi->file_info_list, list) { in arm_lock64()
1396 entry = fi->addr_list.next; in arm_lock64()
1397 while (entry != &(fi->addr_list)) { in arm_lock64()
1544 req->file_info = fi; in arm_lock64()
1583 static int arm_register(struct file_info *fi, struct pending_request *req) in arm_register() argument
1649 hi = find_host_info(fi->host); in arm_register()
1680 if (hi->host != fi->host) { in arm_register()
1718 list_add_tail(&addr->addr_list, &fi->addr_list); in arm_register()
1723 hpsb_register_addrspace(&raw1394_highlevel, fi->host, &arm_ops, in arm_register()
1729 list_add_tail(&addr->addr_list, &fi->addr_list); in arm_register()
1741 static int arm_unregister(struct file_info *fi, struct pending_request *req) in arm_unregister() argument
1759 entry = fi->addr_list.next; in arm_unregister()
1760 while (entry != &(fi->addr_list)) { in arm_unregister()
1778 if (hi->host != fi->host) { in arm_unregister()
1809 hpsb_unregister_addrspace(&raw1394_highlevel, fi->host, in arm_unregister()
1826 static int arm_get_buf(struct file_info *fi, struct pending_request *req) in arm_get_buf() argument
1840 entry = fi->addr_list.next; in arm_get_buf()
1841 while (entry != &(fi->addr_list)) { in arm_get_buf()
1878 static int arm_set_buf(struct file_info *fi, struct pending_request *req) in arm_set_buf() argument
1892 entry = fi->addr_list.next; in arm_set_buf()
1893 while (entry != &(fi->addr_list)) { in arm_set_buf()
1929 static int reset_notification(struct file_info *fi, struct pending_request *req) in reset_notification() argument
1935 fi->notification = (u8) req->req.misc; in reset_notification()
1943 static int write_phypacket(struct file_info *fi, struct pending_request *req) in write_phypacket() argument
1952 packet = hpsb_make_phypacket(fi->host, data); in write_phypacket()
1959 spin_lock_irqsave(&fi->reqlists_lock, flags); in write_phypacket()
1960 list_add_tail(&req->list, &fi->req_pending); in write_phypacket()
1961 spin_unlock_irqrestore(&fi->reqlists_lock, flags); in write_phypacket()
1973 static int get_config_rom(struct file_info *fi, struct pending_request *req) in get_config_rom() argument
1983 csr1212_read(fi->host->csr.rom, CSR1212_CONFIG_ROM_SPACE_OFFSET, in get_config_rom()
1988 (int2ptr(req->req.tag), &fi->host->csr.rom->cache_head->len, in get_config_rom()
1989 sizeof(fi->host->csr.rom->cache_head->len))) in get_config_rom()
1991 if (copy_to_user(int2ptr(req->req.address), &fi->host->csr.generation, in get_config_rom()
1992 sizeof(fi->host->csr.generation))) in get_config_rom()
2003 static int update_config_rom(struct file_info *fi, struct pending_request *req) in update_config_rom() argument
2012 int status = hpsb_update_config_rom(fi->host, in update_config_rom()
2023 fi->cfgrom_upd = 1; in update_config_rom()
2028 static int modify_config_rom(struct file_info *fi, struct pending_request *req) in modify_config_rom() argument
2042 dr < RAW1394_MAX_USER_CSR_DIRS && fi->csr1212_dirs[dr]; in modify_config_rom()
2048 fi->csr1212_dirs[dr] = in modify_config_rom()
2050 if (!fi->csr1212_dirs[dr]) in modify_config_rom()
2054 if (!fi->csr1212_dirs[dr]) in modify_config_rom()
2059 fi->csr1212_dirs[dr]->value.directory.dentries_head; in modify_config_rom()
2061 csr1212_detach_keyval_from_directory(fi->host->csr.rom-> in modify_config_rom()
2067 csr1212_release_keyval(fi->csr1212_dirs[dr]); in modify_config_rom()
2068 fi->csr1212_dirs[dr] = NULL; in modify_config_rom()
2070 hpsb_update_config_rom_image(fi->host); in modify_config_rom()
2078 csr1212_release_keyval(fi->csr1212_dirs[dr]); in modify_config_rom()
2079 fi->csr1212_dirs[dr] = NULL; in modify_config_rom()
2085 csr1212_release_keyval(fi->csr1212_dirs[dr]); in modify_config_rom()
2086 fi->csr1212_dirs[dr] = NULL; in modify_config_rom()
2094 csr1212_release_keyval(fi->csr1212_dirs[dr]); in modify_config_rom()
2095 fi->csr1212_dirs[dr] = NULL; in modify_config_rom()
2102 cache->layout_head = cache->layout_tail = fi->csr1212_dirs[dr]; in modify_config_rom()
2113 fi->csr1212_dirs[dr]->value.directory.dentries_head; in modify_config_rom()
2116 csr1212_attach_keyval_to_directory(fi->host->csr. in modify_config_rom()
2122 ret = hpsb_update_config_rom_image(fi->host); in modify_config_rom()
2140 fi->csr1212_dirs[dr]->value.directory.dentries_head; in modify_config_rom()
2142 csr1212_detach_keyval_from_directory(fi->host->csr.rom-> in modify_config_rom()
2146 csr1212_release_keyval(fi->csr1212_dirs[dr]); in modify_config_rom()
2147 fi->csr1212_dirs[dr] = NULL; in modify_config_rom()
2152 static int state_connected(struct file_info *fi, struct pending_request *req) in state_connected() argument
2165 return arm_register(fi, req); in state_connected()
2168 return arm_unregister(fi, req); in state_connected()
2171 return arm_set_buf(fi, req); in state_connected()
2174 return arm_get_buf(fi, req); in state_connected()
2177 return reset_notification(fi, req); in state_connected()
2188 handle_fcp_listen(fi, req); in state_connected()
2194 hpsb_reset_bus(fi->host, LONG_RESET); in state_connected()
2200 hpsb_reset_bus(fi->host, SHORT_RESET); in state_connected()
2207 return get_config_rom(fi, req); in state_connected()
2210 return update_config_rom(fi, req); in state_connected()
2213 return modify_config_rom(fi, req); in state_connected()
2216 if (req->req.generation != get_hpsb_generation(fi->host)) { in state_connected()
2218 req->req.generation = get_hpsb_generation(fi->host); in state_connected()
2226 return write_phypacket(fi, req); in state_connected()
2228 return handle_async_send(fi, req); in state_connected()
2237 return handle_async_request(fi, req, node); in state_connected()
2243 struct file_info *fi = (struct file_info *)file->private_data; in raw1394_write() local
2264 req->file_info = fi; in raw1394_write()
2271 if (!mutex_trylock(&fi->state_mutex)) in raw1394_write()
2274 switch (fi->state) { in raw1394_write()
2276 retval = state_opened(fi, req); in raw1394_write()
2280 retval = state_initialized(fi, req); in raw1394_write()
2284 retval = state_connected(fi, req); in raw1394_write()
2288 mutex_unlock(&fi->state_mutex); in raw1394_write()
2304 static inline int __rawiso_event_in_queue(struct file_info *fi) in __rawiso_event_in_queue() argument
2308 list_for_each_entry(req, &fi->req_complete, list) in __rawiso_event_in_queue()
2316 static void queue_rawiso_event(struct file_info *fi) in queue_rawiso_event() argument
2320 spin_lock_irqsave(&fi->reqlists_lock, flags); in queue_rawiso_event()
2323 if (!__rawiso_event_in_queue(fi)) { in queue_rawiso_event()
2328 req->file_info = fi; in queue_rawiso_event()
2330 req->req.generation = get_hpsb_generation(fi->host); in queue_rawiso_event()
2334 if (fi->iso_handle) { in queue_rawiso_event()
2335 atomic_inc(&fi->iso_handle->overflows); in queue_rawiso_event()
2339 spin_unlock_irqrestore(&fi->reqlists_lock, flags); in queue_rawiso_event()
2346 struct file_info *fi; in rawiso_activity_cb() local
2352 list_for_each_entry(fi, &hi->file_info_list, list) { in rawiso_activity_cb()
2353 if (fi->iso_handle == iso) in rawiso_activity_cb()
2354 queue_rawiso_event(fi); in rawiso_activity_cb()
2378 static int raw1394_iso_xmit_init(struct file_info *fi, void __user * uaddr) in raw1394_iso_xmit_init() argument
2382 if (!fi->host) in raw1394_iso_xmit_init()
2388 fi->iso_handle = hpsb_iso_xmit_init(fi->host, in raw1394_iso_xmit_init()
2395 if (!fi->iso_handle) in raw1394_iso_xmit_init()
2398 fi->iso_state = RAW1394_ISO_XMIT; in raw1394_iso_xmit_init()
2400 raw1394_iso_fill_status(fi->iso_handle, &stat); in raw1394_iso_xmit_init()
2405 rawiso_activity_cb(fi->iso_handle); in raw1394_iso_xmit_init()
2410 static int raw1394_iso_recv_init(struct file_info *fi, void __user * uaddr) in raw1394_iso_recv_init() argument
2414 if (!fi->host) in raw1394_iso_recv_init()
2420 fi->iso_handle = hpsb_iso_recv_init(fi->host, in raw1394_iso_recv_init()
2427 if (!fi->iso_handle) in raw1394_iso_recv_init()
2430 fi->iso_state = RAW1394_ISO_RECV; in raw1394_iso_recv_init()
2432 raw1394_iso_fill_status(fi->iso_handle, &stat); in raw1394_iso_recv_init()
2438 static int raw1394_iso_get_status(struct file_info *fi, void __user * uaddr) in raw1394_iso_get_status() argument
2441 struct hpsb_iso *iso = fi->iso_handle; in raw1394_iso_get_status()
2443 raw1394_iso_fill_status(fi->iso_handle, &stat); in raw1394_iso_get_status()
2456 static int raw1394_iso_recv_packets(struct file_info *fi, void __user * uaddr) in raw1394_iso_recv_packets() argument
2459 unsigned int packet = fi->iso_handle->first_packet; in raw1394_iso_recv_packets()
2465 if (upackets.n_packets > hpsb_iso_n_ready(fi->iso_handle)) in raw1394_iso_recv_packets()
2477 &fi->iso_handle->infos[packet], in raw1394_iso_recv_packets()
2481 packet = (packet + 1) % fi->iso_handle->buf_packets; in raw1394_iso_recv_packets()
2488 static int raw1394_iso_send_packets(struct file_info *fi, void __user * uaddr) in raw1394_iso_send_packets() argument
2496 if (upackets.n_packets >= fi->iso_handle->buf_packets) in raw1394_iso_send_packets()
2499 if (upackets.n_packets >= hpsb_iso_n_ready(fi->iso_handle)) in raw1394_iso_send_packets()
2516 rv = hpsb_iso_xmit_queue_packet(fi->iso_handle, info.offset, in raw1394_iso_send_packets()
2525 static void raw1394_iso_shutdown(struct file_info *fi) in raw1394_iso_shutdown() argument
2527 if (fi->iso_handle) in raw1394_iso_shutdown()
2528 hpsb_iso_shutdown(fi->iso_handle); in raw1394_iso_shutdown()
2530 fi->iso_handle = NULL; in raw1394_iso_shutdown()
2531 fi->iso_state = RAW1394_ISO_INACTIVE; in raw1394_iso_shutdown()
2534 static int raw1394_read_cycle_timer(struct file_info *fi, void __user * uaddr) in raw1394_read_cycle_timer() argument
2539 err = hpsb_read_cycle_timer(fi->host, &ct.cycle_timer, &ct.local_time); in raw1394_read_cycle_timer()
2549 struct file_info *fi = file->private_data; in raw1394_mmap() local
2552 if (!mutex_trylock(&fi->state_mutex)) in raw1394_mmap()
2555 if (fi->iso_state == RAW1394_ISO_INACTIVE) in raw1394_mmap()
2558 ret = dma_region_mmap(&fi->iso_handle->data_buf, file, vma); in raw1394_mmap()
2560 mutex_unlock(&fi->state_mutex); in raw1394_mmap()
2565 static long raw1394_ioctl_inactive(struct file_info *fi, unsigned int cmd, in raw1394_ioctl_inactive() argument
2570 return raw1394_iso_xmit_init(fi, argp); in raw1394_ioctl_inactive()
2572 return raw1394_iso_recv_init(fi, argp); in raw1394_ioctl_inactive()
2578 static long raw1394_ioctl_recv(struct file_info *fi, unsigned int cmd, in raw1394_ioctl_recv() argument
2589 return hpsb_iso_recv_start(fi->iso_handle, in raw1394_ioctl_recv()
2593 hpsb_iso_stop(fi->iso_handle); in raw1394_ioctl_recv()
2596 return hpsb_iso_recv_listen_channel(fi->iso_handle, arg); in raw1394_ioctl_recv()
2598 return hpsb_iso_recv_unlisten_channel(fi->iso_handle, arg); in raw1394_ioctl_recv()
2604 return hpsb_iso_recv_set_channel_mask(fi->iso_handle, in raw1394_ioctl_recv()
2608 return raw1394_iso_get_status(fi, argp); in raw1394_ioctl_recv()
2610 return raw1394_iso_recv_packets(fi, argp); in raw1394_ioctl_recv()
2612 return hpsb_iso_recv_release_packets(fi->iso_handle, arg); in raw1394_ioctl_recv()
2614 return hpsb_iso_recv_flush(fi->iso_handle); in raw1394_ioctl_recv()
2616 raw1394_iso_shutdown(fi); in raw1394_ioctl_recv()
2619 queue_rawiso_event(fi); in raw1394_ioctl_recv()
2626 static long raw1394_ioctl_xmit(struct file_info *fi, unsigned int cmd, in raw1394_ioctl_xmit() argument
2635 return hpsb_iso_xmit_start(fi->iso_handle, in raw1394_ioctl_xmit()
2639 return hpsb_iso_xmit_sync(fi->iso_handle); in raw1394_ioctl_xmit()
2641 hpsb_iso_stop(fi->iso_handle); in raw1394_ioctl_xmit()
2644 return raw1394_iso_get_status(fi, argp); in raw1394_ioctl_xmit()
2646 return raw1394_iso_send_packets(fi, argp); in raw1394_ioctl_xmit()
2648 raw1394_iso_shutdown(fi); in raw1394_ioctl_xmit()
2651 queue_rawiso_event(fi); in raw1394_ioctl_xmit()
2662 struct file_info *fi = file->private_data; in raw1394_ioctl() local
2669 return raw1394_read_cycle_timer(fi, argp); in raw1394_ioctl()
2674 if (!mutex_trylock(&fi->state_mutex)) in raw1394_ioctl()
2677 switch (fi->iso_state) { in raw1394_ioctl()
2679 ret = raw1394_ioctl_inactive(fi, cmd, argp); in raw1394_ioctl()
2682 ret = raw1394_ioctl_recv(fi, cmd, arg); in raw1394_ioctl()
2685 ret = raw1394_ioctl_xmit(fi, cmd, argp); in raw1394_ioctl()
2692 mutex_unlock(&fi->state_mutex); in raw1394_ioctl()
2736 static long raw1394_read_cycle_timer32(struct file_info *fi, void __user * uaddr) in raw1394_read_cycle_timer32() argument
2741 err = hpsb_read_cycle_timer(fi->host, &ct.cycle_timer, &ct.local_time); in raw1394_read_cycle_timer32()
2751 struct file_info *fi = file->private_data; in raw1394_compat_ioctl() local
2781 err = raw1394_read_cycle_timer32(fi, argp); in raw1394_compat_ioctl()
2794 struct file_info *fi = file->private_data; in raw1394_poll() local
2798 poll_wait(file, &fi->wait_complete, pt); in raw1394_poll()
2800 spin_lock_irqsave(&fi->reqlists_lock, flags); in raw1394_poll()
2801 if (!list_empty(&fi->req_complete)) { in raw1394_poll()
2804 spin_unlock_irqrestore(&fi->reqlists_lock, flags); in raw1394_poll()
2811 struct file_info *fi; in raw1394_open() local
2813 fi = kzalloc(sizeof(*fi), GFP_KERNEL); in raw1394_open()
2814 if (!fi) in raw1394_open()
2817 fi->notification = (u8) RAW1394_NOTIFY_ON; /* busreset notification */ in raw1394_open()
2819 INIT_LIST_HEAD(&fi->list); in raw1394_open()
2820 mutex_init(&fi->state_mutex); in raw1394_open()
2821 fi->state = opened; in raw1394_open()
2822 INIT_LIST_HEAD(&fi->req_pending); in raw1394_open()
2823 INIT_LIST_HEAD(&fi->req_complete); in raw1394_open()
2824 spin_lock_init(&fi->reqlists_lock); in raw1394_open()
2825 init_waitqueue_head(&fi->wait_complete); in raw1394_open()
2826 INIT_LIST_HEAD(&fi->addr_list); in raw1394_open()
2828 file->private_data = fi; in raw1394_open()
2835 struct file_info *fi = file->private_data; in raw1394_release() local
2849 if (fi->iso_state != RAW1394_ISO_INACTIVE) in raw1394_release()
2850 raw1394_iso_shutdown(fi); in raw1394_release()
2857 while (!list_empty(&fi->addr_list)) { in raw1394_release()
2859 lh = fi->addr_list.next; in raw1394_release()
2864 if (hi->host != fi->host) { in raw1394_release()
2893 fi->host, addr->start); in raw1394_release()
2914 spin_lock_irqsave(&fi->reqlists_lock, flags); in raw1394_release()
2915 while ((req = __next_complete_req(fi))) in raw1394_release()
2918 i = list_empty(&fi->req_pending); in raw1394_release()
2919 spin_unlock_irqrestore(&fi->reqlists_lock, flags); in raw1394_release()
2931 wait_event(fi->wait_complete, (req = next_complete_req(fi))); in raw1394_release()
2938 if (!fi->csr1212_dirs[i]) in raw1394_release()
2941 fi->csr1212_dirs[i]->value.directory.dentries_head; dentry; in raw1394_release()
2943 csr1212_detach_keyval_from_directory(fi->host->csr.rom-> in raw1394_release()
2947 csr1212_release_keyval(fi->csr1212_dirs[i]); in raw1394_release()
2948 fi->csr1212_dirs[i] = NULL; in raw1394_release()
2952 if ((csr_mod || fi->cfgrom_upd) in raw1394_release()
2953 && hpsb_update_config_rom_image(fi->host) < 0) in raw1394_release()
2956 fi->host->id); in raw1394_release()
2958 if (fi->state == connected) { in raw1394_release()
2960 list_del(&fi->list); in raw1394_release()
2963 put_device(&fi->host->device); in raw1394_release()
2967 if (fi->host) in raw1394_release()
2968 module_put(fi->host->driver->owner); in raw1394_release()
2971 kfree(fi); in raw1394_release()