Add aic_scb_timer_start() which will be used in the aic7xxx driver to
authorPeter Avalos <pavalos@dragonflybsd.org>
Fri, 6 Jul 2007 01:42:34 +0000 (01:42 +0000)
committerPeter Avalos <pavalos@dragonflybsd.org>
Fri, 6 Jul 2007 01:42:34 +0000 (01:42 +0000)
start the timer on SCBs queued in the untagged SCB queue.

The core treats timeouts in usecs to satisfy Linux requirements.  Multiply
accordingly.

Obtained-from: FreeBSD

sys/dev/disk/aic7xxx/aic_osm_lib.h

index f3ff210..f6cb476 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: //depot/aic7xxx/freebsd/dev/aic7xxx/aic_osm_lib.h#4 $
+ * $Id: //depot/aic7xxx/freebsd/dev/aic7xxx/aic_osm_lib.h#5 $
  *
- * $FreeBSD: src/sys/dev/aic7xxx/aic_osm_lib.h,v 1.1 2003/12/17 00:02:10 gibbs Exp $
- * $DragonFly: src/sys/dev/disk/aic7xxx/aic_osm_lib.h,v 1.1 2007/07/06 00:01:16 pavalos Exp $
+ * $FreeBSD: src/sys/dev/aic7xxx/aic_osm_lib.h,v 1.2 2004/05/11 20:33:42 gibbs Exp $
+ * $DragonFly: src/sys/dev/disk/aic7xxx/aic_osm_lib.h,v 1.2 2007/07/06 01:42:34 pavalos Exp $
  */
 
 /******************************** OS Includes *********************************/
@@ -207,7 +207,7 @@ aic_timer_reset(aic_timer_t *timer, u_int usec, aic_callback_t *func, void *arg)
 static __inline u_int
 aic_get_timeout(struct scb *scb)
 {
-       return (scb->io_ctx->ccb_h.timeout);
+       return (scb->io_ctx->ccb_h.timeout * 1000);
 }
 
 static __inline void
@@ -217,6 +217,21 @@ aic_scb_timer_reset(struct scb *scb, u_int usec)
                aic_platform_timeout, scb);
 }
 
+static __inline void
+aic_scb_timer_start(struct scb *scb)
+{
+       
+       if (scb->io_ctx->ccb_h.timeout != CAM_TIME_INFINITY) {
+               uint64_t time;
+
+               time = scb->io_ctx->ccb_h.timeout;
+               time *= hz;
+               time /= 1000;
+               callout_reset(&scb->io_ctx->ccb_h.timeout_ch, time,
+                   aic_platform_timeout, scb);
+       }
+}
+
 /************************** Transaction Operations ****************************/
 static __inline void aic_set_transaction_status(struct scb *, uint32_t);
 static __inline void aic_set_scsi_status(struct scb *, uint32_t);