Lines Matching refs:sfp
194 static int sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size);
195 static ssize_t sg_new_read(Sg_fd * sfp, char __user *buf, size_t count,
197 static ssize_t sg_new_write(Sg_fd *sfp, struct file *file,
200 static int sg_common_write(Sg_fd * sfp, Sg_request * srp,
203 static void sg_remove_scat(Sg_fd * sfp, Sg_scatter_hold * schp);
204 static void sg_build_reserve(Sg_fd * sfp, int req_size);
205 static void sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size);
206 static void sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp);
209 static Sg_request *sg_get_rq_mark(Sg_fd * sfp, int pack_id);
210 static Sg_request *sg_add_request(Sg_fd * sfp);
211 static int sg_remove_request(Sg_fd * sfp, Sg_request * srp);
212 static int sg_res_in_use(Sg_fd * sfp);
227 struct sg_fd *sfp = filp->private_data; in sg_allow_access() local
229 if (sfp->parentdp->device->type == TYPE_SCANNER) in sg_allow_access()
279 Sg_fd *sfp; in sg_open() local
340 sfp = sg_add_sfp(sdp); in sg_open()
341 if (IS_ERR(sfp)) { in sg_open()
342 retval = PTR_ERR(sfp); in sg_open()
346 filp->private_data = sfp; in sg_open()
375 Sg_fd *sfp; in sg_release() local
377 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_release()
383 kref_put(&sfp->f_ref, sg_remove_sfp); in sg_release()
402 Sg_fd *sfp; in sg_read() local
409 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_read()
416 if (sfp->force_packid && (count >= SZ_SG_HEADER)) { in sg_read()
444 srp = sg_get_rq_mark(sfp, req_pack_id); in sg_read()
454 retval = wait_event_interruptible(sfp->read_wait, in sg_read()
456 (srp = sg_get_rq_mark(sfp, req_pack_id)))); in sg_read()
467 retval = sg_new_read(sfp, buf, count, srp); in sg_read()
546 sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp) in sg_new_read() argument
589 Sg_fd *sfp; in sg_write() local
595 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_write()
613 return sg_new_write(sfp, filp, buf, count, in sg_write()
618 if (!(srp = sg_add_request(sfp))) { in sg_write()
625 if (sfp->next_cmd_len > 0) { in sg_write()
626 cmd_size = sfp->next_cmd_len; in sg_write()
627 sfp->next_cmd_len = 0; /* reset so only this write() effected */ in sg_write()
641 sg_remove_request(sfp, srp); in sg_write()
686 k = sg_common_write(sfp, srp, cmnd, sfp->timeout, blocking); in sg_write()
691 sg_new_write(Sg_fd *sfp, struct file *file, const char __user *buf, in sg_new_write() argument
707 sfp->cmd_q = 1; /* when sg_io_hdr seen, set command queuing on */ in sg_new_write()
708 if (!(srp = sg_add_request(sfp))) { in sg_new_write()
709 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp, in sg_new_write()
716 sg_remove_request(sfp, srp); in sg_new_write()
720 sg_remove_request(sfp, srp); in sg_new_write()
724 if (hp->dxfer_len > sfp->reserve.bufflen) { in sg_new_write()
725 sg_remove_request(sfp, srp); in sg_new_write()
729 sg_remove_request(sfp, srp); in sg_new_write()
732 if (sg_res_in_use(sfp)) { in sg_new_write()
733 sg_remove_request(sfp, srp); in sg_new_write()
740 sg_remove_request(sfp, srp); in sg_new_write()
744 sg_remove_request(sfp, srp); in sg_new_write()
748 sg_remove_request(sfp, srp); in sg_new_write()
752 sg_remove_request(sfp, srp); in sg_new_write()
755 k = sg_common_write(sfp, srp, cmnd, timeout, blocking); in sg_new_write()
764 sg_common_write(Sg_fd * sfp, Sg_request * srp, in sg_common_write() argument
768 Sg_device *sdp = sfp->parentdp; in sg_common_write()
779 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp, in sg_common_write()
785 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp, in sg_common_write()
811 kref_get(&sfp->f_ref); /* sg_rq_end_io() does kref_put(). */ in sg_common_write()
817 static int srp_done(Sg_fd *sfp, Sg_request *srp) in srp_done() argument
822 read_lock_irqsave(&sfp->rq_list_lock, flags); in srp_done()
824 read_unlock_irqrestore(&sfp->rq_list_lock, flags); in srp_done()
844 Sg_fd *sfp; in sg_ioctl() local
848 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_ioctl()
863 result = sg_new_write(sfp, filp, p, SZ_SG_IO_HDR, in sg_ioctl()
867 result = wait_event_interruptible(sfp->read_wait, in sg_ioctl()
868 (srp_done(sfp, srp) || atomic_read(&sdp->detaching))); in sg_ioctl()
871 write_lock_irq(&sfp->rq_list_lock); in sg_ioctl()
874 write_unlock_irq(&sfp->rq_list_lock); in sg_ioctl()
875 result = sg_new_read(sfp, p, SZ_SG_IO_HDR, srp); in sg_ioctl()
879 write_unlock_irq(&sfp->rq_list_lock); in sg_ioctl()
889 sfp->timeout_user = val; in sg_ioctl()
890 sfp->timeout = MULDIV (val, HZ, USER_HZ); in sg_ioctl()
895 return sfp->timeout_user; in sg_ioctl()
901 sfp->low_dma = 1; in sg_ioctl()
902 if ((0 == sfp->low_dma) && (0 == sg_res_in_use(sfp))) { in sg_ioctl()
903 val = (int) sfp->reserve.bufflen; in sg_ioctl()
904 sg_remove_scat(sfp, &sfp->reserve); in sg_ioctl()
905 sg_build_reserve(sfp, val); in sg_ioctl()
910 sfp->low_dma = sdp->device->host->unchecked_isa_dma; in sg_ioctl()
914 return put_user((int) sfp->low_dma, ip); in sg_ioctl()
942 sfp->force_packid = val ? 1 : 0; in sg_ioctl()
947 read_lock_irqsave(&sfp->rq_list_lock, iflags); in sg_ioctl()
948 for (srp = sfp->headrp; srp; srp = srp->nextrp) { in sg_ioctl()
950 read_unlock_irqrestore(&sfp->rq_list_lock, in sg_ioctl()
956 read_unlock_irqrestore(&sfp->rq_list_lock, iflags); in sg_ioctl()
960 read_lock_irqsave(&sfp->rq_list_lock, iflags); in sg_ioctl()
961 for (val = 0, srp = sfp->headrp; srp; srp = srp->nextrp) { in sg_ioctl()
965 read_unlock_irqrestore(&sfp->rq_list_lock, iflags); in sg_ioctl()
977 if (val != sfp->reserve.bufflen) { in sg_ioctl()
978 if (sg_res_in_use(sfp) || sfp->mmap_called) in sg_ioctl()
980 sg_remove_scat(sfp, &sfp->reserve); in sg_ioctl()
981 sg_build_reserve(sfp, val); in sg_ioctl()
985 val = min_t(int, sfp->reserve.bufflen, in sg_ioctl()
992 sfp->cmd_q = val ? 1 : 0; in sg_ioctl()
995 return put_user((int) sfp->cmd_q, ip); in sg_ioctl()
1000 sfp->keep_orphan = val; in sg_ioctl()
1003 return put_user((int) sfp->keep_orphan, ip); in sg_ioctl()
1008 sfp->next_cmd_len = (val > 0) ? val : 0; in sg_ioctl()
1027 read_lock_irqsave(&sfp->rq_list_lock, iflags); in sg_ioctl()
1028 for (srp = sfp->headrp, val = 0; val < SG_MAX_QUEUE; in sg_ioctl()
1055 read_unlock_irqrestore(&sfp->rq_list_lock, iflags); in sg_ioctl()
1125 Sg_fd *sfp; in sg_compat_ioctl() local
1128 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_compat_ioctl()
1149 Sg_fd *sfp; in sg_poll() local
1154 sfp = filp->private_data; in sg_poll()
1155 if (!sfp) in sg_poll()
1157 sdp = sfp->parentdp; in sg_poll()
1160 poll_wait(filp, &sfp->read_wait, wait); in sg_poll()
1161 read_lock_irqsave(&sfp->rq_list_lock, iflags); in sg_poll()
1162 for (srp = sfp->headrp; srp; srp = srp->nextrp) { in sg_poll()
1168 read_unlock_irqrestore(&sfp->rq_list_lock, iflags); in sg_poll()
1172 else if (!sfp->cmd_q) { in sg_poll()
1186 Sg_fd *sfp; in sg_fasync() local
1188 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_fasync()
1193 return fasync_helper(fd, filp, mode, &sfp->async_qp); in sg_fasync()
1199 Sg_fd *sfp; in sg_vma_fault() local
1204 if ((NULL == vma) || (!(sfp = (Sg_fd *) vma->vm_private_data))) in sg_vma_fault()
1206 rsv_schp = &sfp->reserve; in sg_vma_fault()
1210 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sfp->parentdp, in sg_vma_fault()
1239 Sg_fd *sfp; in sg_mmap() local
1244 if ((!filp) || (!vma) || (!(sfp = (Sg_fd *) filp->private_data))) in sg_mmap()
1247 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sfp->parentdp, in sg_mmap()
1252 rsv_schp = &sfp->reserve; in sg_mmap()
1264 sfp->mmap_called = 1; in sg_mmap()
1266 vma->vm_private_data = sfp; in sg_mmap()
1275 struct sg_fd *sfp = srp->parentfp; in sg_rq_end_io_usercontext() local
1278 kref_put(&sfp->f_ref, sg_remove_sfp); in sg_rq_end_io_usercontext()
1290 Sg_fd *sfp; in sg_rq_end_io() local
1299 sfp = srp->parentfp; in sg_rq_end_io()
1300 if (WARN_ON(sfp == NULL)) in sg_rq_end_io()
1303 sdp = sfp->parentdp; in sg_rq_end_io()
1356 write_lock_irqsave(&sfp->rq_list_lock, iflags); in sg_rq_end_io()
1358 if (sfp->keep_orphan) in sg_rq_end_io()
1364 write_unlock_irqrestore(&sfp->rq_list_lock, iflags); in sg_rq_end_io()
1370 wake_up_interruptible(&sfp->read_wait); in sg_rq_end_io()
1371 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN); in sg_rq_end_io()
1372 kref_put(&sfp->f_ref, sg_remove_sfp); in sg_rq_end_io()
1567 Sg_fd *sfp; in sg_remove_device() local
1581 list_for_each_entry(sfp, &sdp->sfds, sfd_siblings) { in sg_remove_device()
1582 wake_up_interruptible_all(&sfp->read_wait); in sg_remove_device()
1583 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_HUP); in sg_remove_device()
1668 Sg_fd *sfp = srp->parentfp; in sg_start_req() local
1674 Sg_scatter_hold *rsv_schp = &sfp->reserve; in sg_start_req()
1675 struct request_queue *q = sfp->parentdp->device->request_queue; in sg_start_req()
1680 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp, in sg_start_req()
1728 !sfp->parentdp->device->host->unchecked_isa_dma && in sg_start_req()
1735 if (!sg_res_in_use(sfp) && dxfer_len <= rsv_schp->bufflen) in sg_start_req()
1736 sg_link_reserve(sfp, srp, dxfer_len); in sg_start_req()
1738 res = sg_build_indirect(req_schp, sfp, dxfer_len); in sg_start_req()
1786 Sg_fd *sfp = srp->parentfp; in sg_finish_rem_req() local
1789 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp, in sg_finish_rem_req()
1802 sg_unlink_reserve(sfp, srp); in sg_finish_rem_req()
1804 sg_remove_scat(sfp, req_schp); in sg_finish_rem_req()
1806 sg_remove_request(sfp, srp); in sg_finish_rem_req()
1812 sg_build_sgat(Sg_scatter_hold * schp, const Sg_fd * sfp, int tablesize) in sg_build_sgat() argument
1825 sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size) in sg_build_indirect() argument
1828 int sg_tablesize = sfp->parentdp->sg_tablesize; in sg_build_indirect()
1838 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp, in sg_build_indirect()
1843 mx_sc_elems = sg_build_sgat(schp, sfp, sg_tablesize); in sg_build_indirect()
1856 if (sfp->low_dma) in sg_build_indirect()
1883 SCSI_LOG_TIMEOUT(5, sg_printk(KERN_INFO, sfp->parentdp, in sg_build_indirect()
1890 SCSI_LOG_TIMEOUT(5, sg_printk(KERN_INFO, sfp->parentdp, in sg_build_indirect()
1909 sg_remove_scat(Sg_fd * sfp, Sg_scatter_hold * schp) in sg_remove_scat() argument
1911 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp, in sg_remove_scat()
1919 sg_printk(KERN_INFO, sfp->parentdp, in sg_remove_scat()
1965 sg_build_reserve(Sg_fd * sfp, int req_size) in sg_build_reserve() argument
1967 Sg_scatter_hold *schp = &sfp->reserve; in sg_build_reserve()
1969 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp, in sg_build_reserve()
1974 if (0 == sg_build_indirect(schp, sfp, req_size)) in sg_build_reserve()
1977 sg_remove_scat(sfp, schp); in sg_build_reserve()
1983 sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size) in sg_link_reserve() argument
1986 Sg_scatter_hold *rsv_schp = &sfp->reserve; in sg_link_reserve()
1990 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp, in sg_link_reserve()
2009 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp, in sg_link_reserve()
2014 sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp) in sg_unlink_reserve() argument
2026 sfp->save_scat_len = 0; in sg_unlink_reserve()
2031 sg_get_rq_mark(Sg_fd * sfp, int pack_id) in sg_get_rq_mark() argument
2036 write_lock_irqsave(&sfp->rq_list_lock, iflags); in sg_get_rq_mark()
2037 for (resp = sfp->headrp; resp; resp = resp->nextrp) { in sg_get_rq_mark()
2045 write_unlock_irqrestore(&sfp->rq_list_lock, iflags); in sg_get_rq_mark()
2051 sg_add_request(Sg_fd * sfp) in sg_add_request() argument
2056 Sg_request *rp = sfp->req_arr; in sg_add_request()
2058 write_lock_irqsave(&sfp->rq_list_lock, iflags); in sg_add_request()
2059 resp = sfp->headrp; in sg_add_request()
2062 rp->parentfp = sfp; in sg_add_request()
2064 sfp->headrp = resp; in sg_add_request()
2066 if (0 == sfp->cmd_q) in sg_add_request()
2075 rp->parentfp = sfp; in sg_add_request()
2088 write_unlock_irqrestore(&sfp->rq_list_lock, iflags); in sg_add_request()
2094 sg_remove_request(Sg_fd * sfp, Sg_request * srp) in sg_remove_request() argument
2101 if ((!sfp) || (!srp) || (!sfp->headrp)) in sg_remove_request()
2103 write_lock_irqsave(&sfp->rq_list_lock, iflags); in sg_remove_request()
2104 prev_rp = sfp->headrp; in sg_remove_request()
2106 sfp->headrp = prev_rp->nextrp; in sg_remove_request()
2120 write_unlock_irqrestore(&sfp->rq_list_lock, iflags); in sg_remove_request()
2127 Sg_fd *sfp; in sg_add_sfp() local
2131 sfp = kzalloc(sizeof(*sfp), GFP_ATOMIC | __GFP_NOWARN); in sg_add_sfp()
2132 if (!sfp) in sg_add_sfp()
2135 init_waitqueue_head(&sfp->read_wait); in sg_add_sfp()
2136 rwlock_init(&sfp->rq_list_lock); in sg_add_sfp()
2138 kref_init(&sfp->f_ref); in sg_add_sfp()
2139 sfp->timeout = SG_DEFAULT_TIMEOUT; in sg_add_sfp()
2140 sfp->timeout_user = SG_DEFAULT_TIMEOUT_USER; in sg_add_sfp()
2141 sfp->force_packid = SG_DEF_FORCE_PACK_ID; in sg_add_sfp()
2142 sfp->low_dma = (SG_DEF_FORCE_LOW_DMA == 0) ? in sg_add_sfp()
2144 sfp->cmd_q = SG_DEF_COMMAND_Q; in sg_add_sfp()
2145 sfp->keep_orphan = SG_DEF_KEEP_ORPHAN; in sg_add_sfp()
2146 sfp->parentdp = sdp; in sg_add_sfp()
2152 list_add_tail(&sfp->sfd_siblings, &sdp->sfds); in sg_add_sfp()
2155 "sg_add_sfp: sfp=0x%p\n", sfp)); in sg_add_sfp()
2161 sg_build_reserve(sfp, bufflen); in sg_add_sfp()
2164 sfp->reserve.bufflen, in sg_add_sfp()
2165 sfp->reserve.k_use_sg)); in sg_add_sfp()
2169 return sfp; in sg_add_sfp()
2175 struct sg_fd *sfp = container_of(work, struct sg_fd, ew.work); in sg_remove_sfp_usercontext() local
2176 struct sg_device *sdp = sfp->parentdp; in sg_remove_sfp_usercontext()
2179 while (sfp->headrp) in sg_remove_sfp_usercontext()
2180 sg_finish_rem_req(sfp->headrp); in sg_remove_sfp_usercontext()
2182 if (sfp->reserve.bufflen > 0) { in sg_remove_sfp_usercontext()
2185 (int) sfp->reserve.bufflen, in sg_remove_sfp_usercontext()
2186 (int) sfp->reserve.k_use_sg)); in sg_remove_sfp_usercontext()
2187 sg_remove_scat(sfp, &sfp->reserve); in sg_remove_sfp_usercontext()
2191 "sg_remove_sfp: sfp=0x%p\n", sfp)); in sg_remove_sfp_usercontext()
2192 kfree(sfp); in sg_remove_sfp_usercontext()
2202 struct sg_fd *sfp = container_of(kref, struct sg_fd, f_ref); in sg_remove_sfp() local
2203 struct sg_device *sdp = sfp->parentdp; in sg_remove_sfp()
2207 list_del(&sfp->sfd_siblings); in sg_remove_sfp()
2210 INIT_WORK(&sfp->ew.work, sg_remove_sfp_usercontext); in sg_remove_sfp()
2211 schedule_work(&sfp->ew.work); in sg_remove_sfp()
2215 sg_res_in_use(Sg_fd * sfp) in sg_res_in_use() argument
2220 read_lock_irqsave(&sfp->rq_list_lock, iflags); in sg_res_in_use()
2221 for (srp = sfp->headrp; srp; srp = srp->nextrp) in sg_res_in_use()
2224 read_unlock_irqrestore(&sfp->rq_list_lock, iflags); in sg_res_in_use()