Lines Matching defs:req
368 typedef struct req
370 struct req *next;
407 req;
413 req *sane_qhead, *sane_qtail, *sane_free_list;
1568 req *req, *next_req;
1573 req = ((fdparms *) fd_info[fd].pdata)->sane_free_list;
1574 while (req)
1576 next_req = req->next;
1577 free (req);
1578 req = next_req;
1866 issue (struct req *req)
1870 struct req *rp;
1874 if (!req)
1877 fdp = (fdparms *) fd_info[req->fd].pdata;
1878 DBG (4, "sanei_scsi.issue: %p\n", (void *) req);
2004 req->status = SANE_STATUS_IO_ERROR;
2007 req->status = SANE_STATUS_GOOD;
2018 struct req *req, *next_req;
2022 for (req = fdp->sane_qhead; req; req = next_req)
2024 if (req->running && !req->done)
2034 read (fd, &req->sgdata.cdb,
2035 req->sgdata.cdb.hdr.reply_len);
2038 len = read (fd, &req->sgdata.sg3.hdr, sizeof (Sg_io_hdr));
2045 ((fdparms *) fd_info[req->fd].pdata)->sg_queue_used--;
2047 next_req = req->next;
2049 req->next = fdp->sane_free_list;
2050 fdp->sane_free_list = req;
2084 struct req *req;
2092 req = fdp->sane_free_list;
2093 fdp->sane_free_list = req->next;
2094 req->next = 0;
2101 size = (sizeof (*req) - sizeof (req->sgdata.cdb.data)
2105 size = sizeof (*req) + MAX_CDB + fdp->buffersize
2106 - sizeof (req->sgdata.sg3.data);
2108 req = malloc (size);
2109 if (!req)
2116 req->fd = fd;
2117 req->running = 0;
2118 req->done = 0;
2119 req->status = SANE_STATUS_GOOD;
2120 req->dst = dst;
2121 req->dst_len = dst_size;
2126 memset (&req->sgdata.cdb.hdr, 0, sizeof (req->sgdata.cdb.hdr));
2127 req->sgdata.cdb.hdr.pack_id = pack_id++;
2128 req->sgdata.cdb.hdr.pack_len = cmd_size + src_size
2129 + sizeof (req->sgdata.cdb.hdr);
2130 req->sgdata.cdb.hdr.reply_len = (dst_size ? *dst_size : 0)
2131 + sizeof (req->sgdata.cdb.hdr);
2132 memcpy (&req->sgdata.cdb.data, cmd, cmd_size);
2133 memcpy (&req->sgdata.cdb.data[cmd_size], src, src_size);
2146 memset (&req->sgdata.sg3.hdr, 0, sizeof (req->sgdata.sg3.hdr));
2147 req->sgdata.sg3.hdr.interface_id = 'S';
2148 req->sgdata.sg3.hdr.cmd_len = cmd_size;
2149 req->sgdata.sg3.hdr.iovec_count = 0;
2150 req->sgdata.sg3.hdr.mx_sb_len = SENSE_MAX;
2154 req->sgdata.sg3.hdr.dxfer_direction = SG_DXFER_FROM_DEV;
2155 req->sgdata.sg3.hdr.dxfer_len = *dst_size;
2156 req->sgdata.sg3.hdr.dxferp = dst;
2160 req->sgdata.sg3.hdr.dxfer_direction = SG_DXFER_TO_DEV;
2169 req->sgdata.sg3.hdr.dxfer_len = src_size;
2170 memcpy (&req->sgdata.sg3.data[MAX_CDB], src, src_size);
2171 req->sgdata.sg3.hdr.dxferp = &req->sgdata.sg3.data[MAX_CDB];
2175 req->sgdata.sg3.hdr.dxfer_direction = SG_DXFER_NONE;
2184 memcpy (req->sgdata.sg3.data, cmd, cmd_size);
2185 req->sgdata.sg3.hdr.cmdp = req->sgdata.sg3.data;
2186 req->sgdata.sg3.hdr.sbp = &(req->sgdata.sg3.sense_buffer[0]);
2187 req->sgdata.sg3.hdr.timeout = 1000 * sane_scsicmd_timeout;
2194 req->sgdata.sg3.hdr.flags = SG_FLAG_DIRECT_IO;
2196 req->sgdata.sg3.hdr.flags = 0;
2198 req->sgdata.sg3.hdr.pack_id = pack_id++;
2199 req->sgdata.sg3.hdr.usr_ptr = 0;
2203 req->next = 0;
2206 fdp->sane_qtail->next = req; fdp->sane_qtail = req;}
2208 fdp->sane_qhead = fdp->sane_qtail = req);
2210 DBG (4, "scsi_req_enter: entered %p\n", (void *) req);
2212 *idp = req;
2213 issue (req);
2225 struct req *req = id;
2229 assert (req == ((fdparms *) fd_info[req->fd].pdata)->sane_qhead);
2231 DBG (4, "sanei_scsi_req_wait: waiting for %p\n", (void *) req);
2233 issue (req); /* ensure the command is running */
2234 if (req->done)
2236 issue (req->next); /* issue next command, if any */
2237 status = req->status;
2249 FD_SET (req->fd, &readable);
2250 select (req->fd + 1, &readable, 0, 0, 0);
2253 ATOMIC (nread = read (req->fd, &req->sgdata.cdb,
2254 req->sgdata.cdb.hdr.reply_len);
2255 req->done = 1);
2265 req->done = 1;
2269 if (fd_info[req->fd].pdata)
2270 ((fdparms *) fd_info[req->fd].pdata)->sg_queue_used--;
2275 issue (req->next);
2291 nread -= sizeof (req->sgdata.cdb.hdr);
2294 if ((req->sgdata.cdb.hdr.result != 0) ||
2295 (((req->sgdata.cdb.hdr.sense_buffer[0] & 0x7f) != 0)
2302 && (req->sgdata.cdb.hdr.driver_status & DRIVER_SENSE)
2307 = fd_info[req->fd].sense_handler;
2308 void *arg = fd_info[req->fd].sense_handler_arg;
2312 strerror (req->sgdata.cdb.hdr.result));
2316 req->sgdata.cdb.hdr.sense_buffer[0],
2317 req->sgdata.cdb.hdr.sense_buffer[1],
2318 req->sgdata.cdb.hdr.sense_buffer[2],
2319 req->sgdata.cdb.hdr.sense_buffer[3],
2320 req->sgdata.cdb.hdr.sense_buffer[4],
2321 req->sgdata.cdb.hdr.sense_buffer[5],
2322 req->sgdata.cdb.hdr.sense_buffer[6],
2323 req->sgdata.cdb.hdr.sense_buffer[7],
2324 req->sgdata.cdb.hdr.sense_buffer[8],
2325 req->sgdata.cdb.hdr.sense_buffer[9],
2326 req->sgdata.cdb.hdr.sense_buffer[10],
2327 req->sgdata.cdb.hdr.sense_buffer[11],
2328 req->sgdata.cdb.hdr.sense_buffer[12],
2329 req->sgdata.cdb.hdr.sense_buffer[13],
2330 req->sgdata.cdb.hdr.sense_buffer[14],
2331 req->sgdata.cdb.hdr.sense_buffer[15]);
2338 req->sgdata.cdb.hdr.target_status,
2339 req->sgdata.cdb.hdr.host_status,
2340 req->sgdata.cdb.hdr.driver_status);
2342 if (req->sgdata.cdb.hdr.host_status == DID_NO_CONNECT || req->sgdata.cdb.hdr.host_status == DID_BUS_BUSY || req->sgdata.cdb.hdr.host_status == DID_TIME_OUT || req->sgdata.cdb.hdr.driver_status == DRIVER_BUSY || req->sgdata.cdb.hdr.target_status == 0x04) /* BUSY */
2344 if (req->sgdata.cdb.hdr.result == EBUSY)
2351 (*handler) (req->fd, req->sgdata.cdb.hdr.sense_buffer,
2360 if (req->dst)
2361 memcpy (req->dst, req->sgdata.cdb.data, nread);
2363 if (req->dst_len)
2364 *req->dst_len = nread;
2371 if (((req->sgdata.sg3.hdr.info & SG_INFO_CHECK) != 0)
2372 || ((req->sgdata.sg3.hdr.sb_len_wr > 0)
2373 && ((req->sgdata.sg3.sense_buffer[0] & 0x7f) != 0)
2374 && (req->sgdata.sg3.hdr.
2378 = fd_info[req->fd].sense_handler;
2379 void *arg = fd_info[req->fd].sense_handler_arg;
2387 req->sgdata.sg3.sense_buffer[0],
2388 req->sgdata.sg3.sense_buffer[1],
2389 req->sgdata.sg3.sense_buffer[2],
2390 req->sgdata.sg3.sense_buffer[3],
2391 req->sgdata.sg3.sense_buffer[4],
2392 req->sgdata.sg3.sense_buffer[5],
2393 req->sgdata.sg3.sense_buffer[6],
2394 req->sgdata.sg3.sense_buffer[7],
2395 req->sgdata.sg3.sense_buffer[8],
2396 req->sgdata.sg3.sense_buffer[9],
2397 req->sgdata.sg3.sense_buffer[10],
2398 req->sgdata.sg3.sense_buffer[11],
2399 req->sgdata.sg3.sense_buffer[12],
2400 req->sgdata.sg3.sense_buffer[13],
2401 req->sgdata.sg3.sense_buffer[14],
2402 req->sgdata.sg3.sense_buffer[15]);
2405 " driver status: %04x\n", req->sgdata.sg3.hdr.status,
2406 req->sgdata.sg3.hdr.host_status,
2407 req->sgdata.sg3.hdr.driver_status);
2413 if (req->sgdata.sg3.hdr.host_status == SG_ERR_DID_NO_CONNECT || req->sgdata.sg3.hdr.host_status == SG_ERR_DID_BUS_BUSY || req->sgdata.sg3.hdr.host_status == SG_ERR_DID_TIME_OUT || req->sgdata.sg3.hdr.driver_status == DRIVER_BUSY || req->sgdata.sg3.hdr.masked_status == 0x04) /* BUSY */
2415 else if (handler && req->sgdata.sg3.hdr.sb_len_wr)
2419 (*handler) (req->fd, req->sgdata.sg3.sense_buffer,
2425 else if (((req->sgdata.sg3.hdr.status & 0x2a) == 0)
2426 && (req->sgdata.sg3.hdr.host_status ==
2429 ((req->sgdata.sg3.hdr.
2444 if (req->dst_len)
2446 *req->dst_len -= req->sgdata.sg3.hdr.resid;
2450 if (req->sgdata.sg3.hdr.resid)
2454 req->sgdata.sg3.hdr.resid);
2464 ATOMIC (((fdparms *) fd_info[req->fd].pdata)->sane_qhead
2465 = ((fdparms *) fd_info[req->fd].pdata)->sane_qhead->next;
2466 if (!((fdparms *) fd_info[req->fd].pdata)->sane_qhead)
2467 ((fdparms *) fd_info[req->fd].pdata)->sane_qtail = 0;
2468 req->next = ((fdparms *) fd_info[req->fd].pdata)->sane_free_list;
2469 ((fdparms *) fd_info[req->fd].pdata)->sane_free_list = req);
3853 char sense[32]; /* for call of sens req */