Lines Matching refs:sfp

178 static int sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size);
179 static ssize_t sg_new_read(Sg_fd * sfp, char __user *buf, size_t count,
181 static ssize_t sg_new_write(Sg_fd *sfp, struct file *file,
184 static int sg_common_write(Sg_fd * sfp, Sg_request * srp,
187 static void sg_remove_scat(Sg_fd * sfp, Sg_scatter_hold * schp);
188 static void sg_build_reserve(Sg_fd * sfp, int req_size);
189 static void sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size);
190 static void sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp);
193 static Sg_request *sg_get_rq_mark(Sg_fd * sfp, int pack_id, bool *busy);
194 static Sg_request *sg_add_request(Sg_fd * sfp);
195 static int sg_remove_request(Sg_fd * sfp, Sg_request * srp);
237 struct sg_fd *sfp = filp->private_data;
239 if (sfp->parentdp->device->type == TYPE_SCANNER)
289 Sg_fd *sfp;
350 sfp = sg_add_sfp(sdp);
351 if (IS_ERR(sfp)) {
352 retval = PTR_ERR(sfp);
356 filp->private_data = sfp;
385 Sg_fd *sfp;
387 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
393 kref_put(&sfp->f_ref, sg_remove_sfp);
444 Sg_fd *sfp;
460 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
465 if (sfp->force_packid)
470 srp = sg_get_rq_mark(sfp, req_pack_id, &busy);
474 retval = wait_event_interruptible(sfp->read_wait,
475 ((srp = sg_get_rq_mark(sfp, req_pack_id, &busy)) ||
482 return sg_new_read(sfp, buf, count, srp);
548 sg_remove_request(sfp, srp);
556 sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
591 sg_remove_request(sfp, srp);
602 Sg_fd *sfp;
613 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
629 return sg_new_write(sfp, filp, buf, count,
638 if (!(srp = sg_add_request(sfp))) {
643 mutex_lock(&sfp->f_mutex);
644 if (sfp->next_cmd_len > 0) {
645 cmd_size = sfp->next_cmd_len;
646 sfp->next_cmd_len = 0; /* reset so only this write() effected */
652 mutex_unlock(&sfp->f_mutex);
661 sg_remove_request(sfp, srp);
686 sg_remove_request(sfp, srp);
704 k = sg_common_write(sfp, srp, cmnd, sfp->timeout, blocking);
709 sg_new_write(Sg_fd *sfp, struct file *file, const char __user *buf,
723 sfp->cmd_q = 1; /* when sg_io_hdr seen, set command queuing on */
724 if (!(srp = sg_add_request(sfp))) {
725 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
732 sg_remove_request(sfp, srp);
736 sg_remove_request(sfp, srp);
740 if (hp->dxfer_len > sfp->reserve.bufflen) {
741 sg_remove_request(sfp, srp);
745 sg_remove_request(sfp, srp);
748 if (sfp->res_in_use) {
749 sg_remove_request(sfp, srp);
756 sg_remove_request(sfp, srp);
760 sg_remove_request(sfp, srp);
764 sg_remove_request(sfp, srp);
767 k = sg_common_write(sfp, srp, cmnd, timeout, blocking);
776 sg_common_write(Sg_fd * sfp, Sg_request * srp,
780 Sg_device *sdp = sfp->parentdp;
791 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
796 sg_remove_request(sfp, srp);
802 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
805 sg_remove_request(sfp, srp);
816 sg_remove_request(sfp, srp);
828 kref_get(&sfp->f_ref); /* sg_rq_end_io() does kref_put(). */
834 static int srp_done(Sg_fd *sfp, Sg_request *srp)
839 read_lock_irqsave(&sfp->rq_list_lock, flags);
841 read_unlock_irqrestore(&sfp->rq_list_lock, flags);
855 sg_fill_request_table(Sg_fd *sfp, sg_req_info_t *rinfo)
862 list_for_each_entry(srp, &sfp->rq_list, entry) {
915 sg_ioctl_common(struct file *filp, Sg_device *sdp, Sg_fd *sfp,
933 result = sg_new_write(sfp, filp, p, SZ_SG_IO_HDR,
937 result = wait_event_interruptible(sfp->read_wait,
938 srp_done(sfp, srp));
939 write_lock_irq(&sfp->rq_list_lock);
942 write_unlock_irq(&sfp->rq_list_lock);
943 result = sg_new_read(sfp, p, SZ_SG_IO_HDR, srp);
947 write_unlock_irq(&sfp->rq_list_lock);
958 sfp->timeout_user = val;
959 sfp->timeout = mult_frac(val, HZ, USER_HZ);
964 return sfp->timeout_user;
996 sfp->force_packid = val ? 1 : 0;
999 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1000 list_for_each_entry(srp, &sfp->rq_list, entry) {
1002 read_unlock_irqrestore(&sfp->rq_list_lock,
1007 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1010 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1012 list_for_each_entry(srp, &sfp->rq_list, entry) {
1016 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1028 mutex_lock(&sfp->f_mutex);
1029 if (val != sfp->reserve.bufflen) {
1030 if (sfp->mmap_called ||
1031 sfp->res_in_use) {
1032 mutex_unlock(&sfp->f_mutex);
1036 sg_remove_scat(sfp, &sfp->reserve);
1037 sg_build_reserve(sfp, val);
1039 mutex_unlock(&sfp->f_mutex);
1042 val = min_t(int, sfp->reserve.bufflen,
1049 sfp->cmd_q = val ? 1 : 0;
1052 return put_user((int) sfp->cmd_q, ip);
1057 sfp->keep_orphan = val;
1060 return put_user((int) sfp->keep_orphan, ip);
1067 sfp->next_cmd_len = (val > 0) ? val : 0;
1083 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1084 sg_fill_request_table(sfp, rinfo);
1085 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1152 Sg_fd *sfp;
1155 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
1158 ret = sg_ioctl_common(filp, sdp, sfp, cmd_in, p);
1170 Sg_fd *sfp;
1173 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
1176 ret = sg_ioctl_common(filp, sdp, sfp, cmd_in, p);
1189 Sg_fd *sfp;
1194 sfp = filp->private_data;
1195 if (!sfp)
1197 sdp = sfp->parentdp;
1200 poll_wait(filp, &sfp->read_wait, wait);
1201 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1202 list_for_each_entry(srp, &sfp->rq_list, entry) {
1208 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1212 else if (!sfp->cmd_q) {
1226 Sg_fd *sfp;
1228 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
1233 return fasync_helper(fd, filp, mode, &sfp->async_qp);
1240 Sg_fd *sfp;
1245 if ((NULL == vma) || (!(sfp = (Sg_fd *) vma->vm_private_data)))
1247 rsv_schp = &sfp->reserve;
1251 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sfp->parentdp,
1280 Sg_fd *sfp;
1286 if ((!filp) || (!vma) || (!(sfp = (Sg_fd *) filp->private_data)))
1289 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sfp->parentdp,
1294 rsv_schp = &sfp->reserve;
1295 mutex_lock(&sfp->f_mutex);
1309 sfp->mmap_called = 1;
1311 vma->vm_private_data = sfp;
1314 mutex_unlock(&sfp->f_mutex);
1322 struct sg_fd *sfp = srp->parentfp;
1325 sg_remove_request(sfp, srp);
1326 kref_put(&sfp->f_ref, sg_remove_sfp);
1339 Sg_fd *sfp;
1348 sfp = srp->parentfp;
1349 if (WARN_ON(sfp == NULL))
1352 sdp = sfp->parentdp;
1408 write_lock_irqsave(&sfp->rq_list_lock, iflags);
1410 if (sfp->keep_orphan)
1416 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1422 wake_up_interruptible(&sfp->read_wait);
1423 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN);
1424 kref_put(&sfp->f_ref, sg_remove_sfp);
1619 Sg_fd *sfp;
1633 list_for_each_entry(sfp, &sdp->sfds, sfd_siblings) {
1634 wake_up_interruptible_all(&sfp->read_wait);
1635 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_HUP);
1721 Sg_fd *sfp = srp->parentfp;
1727 Sg_scatter_hold *rsv_schp = &sfp->reserve;
1728 struct request_queue *q = sfp->parentdp->device->request_queue;
1733 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1776 !sfp->parentdp->device->host->unchecked_isa_dma &&
1783 mutex_lock(&sfp->f_mutex);
1785 !sfp->res_in_use) {
1786 sfp->res_in_use = 1;
1787 sg_link_reserve(sfp, srp, dxfer_len);
1789 res = -EBUSY; /* sfp->res_in_use == 1 */
1792 mutex_unlock(&sfp->f_mutex);
1795 res = sg_build_indirect(req_schp, sfp, dxfer_len);
1797 mutex_unlock(&sfp->f_mutex);
1801 mutex_unlock(&sfp->f_mutex);
1850 Sg_fd *sfp = srp->parentfp;
1853 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1865 sg_unlink_reserve(sfp, srp);
1867 sg_remove_scat(sfp, req_schp);
1873 sg_build_sgat(Sg_scatter_hold * schp, const Sg_fd * sfp, int tablesize)
1886 sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
1889 int sg_tablesize = sfp->parentdp->sg_tablesize;
1892 struct sg_device *sdp = sfp->parentdp;
1900 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1905 mx_sc_elems = sg_build_sgat(schp, sfp, sg_tablesize);
1942 SCSI_LOG_TIMEOUT(5, sg_printk(KERN_INFO, sfp->parentdp,
1949 SCSI_LOG_TIMEOUT(5, sg_printk(KERN_INFO, sfp->parentdp,
1968 sg_remove_scat(Sg_fd * sfp, Sg_scatter_hold * schp)
1970 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1978 sg_printk(KERN_INFO, sfp->parentdp,
2024 sg_build_reserve(Sg_fd * sfp, int req_size)
2026 Sg_scatter_hold *schp = &sfp->reserve;
2028 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
2033 if (0 == sg_build_indirect(schp, sfp, req_size))
2036 sg_remove_scat(sfp, schp);
2042 sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size)
2045 Sg_scatter_hold *rsv_schp = &sfp->reserve;
2049 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
2068 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
2073 sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp)
2087 sfp->res_in_use = 0;
2091 sg_get_rq_mark(Sg_fd * sfp, int pack_id, bool *busy)
2097 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2098 list_for_each_entry(resp, &sfp->rq_list, entry) {
2108 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2115 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2121 sg_add_request(Sg_fd * sfp)
2125 Sg_request *rp = sfp->req_arr;
2127 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2128 if (!list_empty(&sfp->rq_list)) {
2129 if (!sfp->cmd_q)
2140 rp->parentfp = sfp;
2142 list_add_tail(&rp->entry, &sfp->rq_list);
2143 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2146 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2152 sg_remove_request(Sg_fd * sfp, Sg_request * srp)
2157 if (!sfp || !srp || list_empty(&sfp->rq_list))
2159 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2165 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2172 if (unlikely(atomic_read(&sfp->parentdp->detaching)))
2173 wake_up_interruptible_all(&sfp->read_wait);
2181 Sg_fd *sfp;
2185 sfp = kzalloc(sizeof(*sfp), GFP_ATOMIC | __GFP_NOWARN);
2186 if (!sfp)
2189 init_waitqueue_head(&sfp->read_wait);
2190 rwlock_init(&sfp->rq_list_lock);
2191 INIT_LIST_HEAD(&sfp->rq_list);
2192 kref_init(&sfp->f_ref);
2193 mutex_init(&sfp->f_mutex);
2194 sfp->timeout = SG_DEFAULT_TIMEOUT;
2195 sfp->timeout_user = SG_DEFAULT_TIMEOUT_USER;
2196 sfp->force_packid = SG_DEF_FORCE_PACK_ID;
2197 sfp->cmd_q = SG_DEF_COMMAND_Q;
2198 sfp->keep_orphan = SG_DEF_KEEP_ORPHAN;
2199 sfp->parentdp = sdp;
2203 kfree(sfp);
2206 list_add_tail(&sfp->sfd_siblings, &sdp->sfds);
2209 "sg_add_sfp: sfp=0x%p\n", sfp));
2215 sg_build_reserve(sfp, bufflen);
2218 sfp->reserve.bufflen,
2219 sfp->reserve.k_use_sg));
2223 return sfp;
2229 struct sg_fd *sfp = container_of(work, struct sg_fd, ew.work);
2230 struct sg_device *sdp = sfp->parentdp;
2235 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2236 while (!list_empty(&sfp->rq_list)) {
2237 srp = list_first_entry(&sfp->rq_list, Sg_request, entry);
2242 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2244 if (sfp->reserve.bufflen > 0) {
2247 (int) sfp->reserve.bufflen,
2248 (int) sfp->reserve.k_use_sg));
2249 sg_remove_scat(sfp, &sfp->reserve);
2253 "sg_remove_sfp: sfp=0x%p\n", sfp));
2254 kfree(sfp);
2264 struct sg_fd *sfp = container_of(kref, struct sg_fd, f_ref);
2265 struct sg_device *sdp = sfp->parentdp;
2269 list_del(&sfp->sfd_siblings);
2272 INIT_WORK(&sfp->ew.work, sg_remove_sfp_usercontext);
2273 schedule_work(&sfp->ew.work);