summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authormjacob <mjacob@NetBSD.org>1999-12-04 03:06:54 +0000
committermjacob <mjacob@NetBSD.org>1999-12-04 03:06:54 +0000
commit5854be051dbf6e6648c93e87dfe5aaba9f56d827 (patch)
tree8a52e8303d55a6d9d002873fa8212d6ba3743018 /sys/dev
parent0f0fbfa802155cc9848410ca9e404c7615491670 (diff)
Make sure we have a big enough buffer to sprintf into (noticed by
deraadt@openbsd.org).
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/isp_inline.h126
1 files changed, 91 insertions, 35 deletions
diff --git a/sys/dev/ic/isp_inline.h b/sys/dev/ic/isp_inline.h
index 983ddf64bac..749f24ec6db 100644
--- a/sys/dev/ic/isp_inline.h
+++ b/sys/dev/ic/isp_inline.h
@@ -1,4 +1,4 @@
-/* $NetBSD: isp_inline.h,v 1.1 1999/10/14 02:16:55 mjacob Exp $ */
+/* $NetBSD: isp_inline.h,v 1.2 1999/12/04 03:06:54 mjacob Exp $ */
/*
* Copyright (C) 1999 National Aeronautics & Space Administration
* All rights reserved.
@@ -41,40 +41,72 @@ static INLINE void
isp_prtstst(sp)
ispstatusreq_t *sp;
{
- char buf[128];
- sprintf(buf, "states->");
- if (sp->req_state_flags & RQSF_GOT_BUS)
- sprintf(buf, "%s%s", buf, "GOT_BUS ");
- if (sp->req_state_flags & RQSF_GOT_TARGET)
- sprintf(buf, "%s%s", buf, "GOT_TGT ");
- if (sp->req_state_flags & RQSF_SENT_CDB)
- sprintf(buf, "%s%s", buf, "SENT_CDB ");
- if (sp->req_state_flags & RQSF_XFRD_DATA)
- sprintf(buf, "%s%s", buf, "XFRD_DATA ");
- if (sp->req_state_flags & RQSF_GOT_STATUS)
- sprintf(buf, "%s%s", buf, "GOT_STS ");
- if (sp->req_state_flags & RQSF_GOT_SENSE)
- sprintf(buf, "%s%s", buf, "GOT_SNS ");
- if (sp->req_state_flags & RQSF_XFER_COMPLETE)
- sprintf(buf, "%s%s", buf, "XFR_CMPLT ");
- sprintf(buf, "%s%s", buf, "\n");
- sprintf(buf, "%s%s", buf, "status->");
- if (sp->req_status_flags & RQSTF_DISCONNECT)
- sprintf(buf, "%s%s", buf, "Disconnect ");
- if (sp->req_status_flags & RQSTF_SYNCHRONOUS)
- sprintf(buf, "%s%s", buf, "Sync_xfr ");
- if (sp->req_status_flags & RQSTF_PARITY_ERROR)
- sprintf(buf, "%s%s", buf, "Parity ");
- if (sp->req_status_flags & RQSTF_BUS_RESET)
- sprintf(buf, "%s%s", buf, "Bus_Reset ");
- if (sp->req_status_flags & RQSTF_DEVICE_RESET)
- sprintf(buf, "%s%s", buf, "Device_Reset ");
- if (sp->req_status_flags & RQSTF_ABORTED)
- sprintf(buf, "%s%s", buf, "Aborted ");
- if (sp->req_status_flags & RQSTF_TIMEOUT)
- sprintf(buf, "%s%s", buf, "Timeout ");
- if (sp->req_status_flags & RQSTF_NEGOTIATION)
- sprintf(buf, "%s%s", buf, "Negotiation ");
+ char buf[172], *p = buf;
+ sprintf(p, "states->");
+ if (sp->req_state_flags & RQSF_GOT_BUS) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "GOT_BUS ");
+ }
+ if (sp->req_state_flags & RQSF_GOT_TARGET) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "GOT_TGT ");
+ }
+ if (sp->req_state_flags & RQSF_SENT_CDB) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "SENT_CDB ");
+ }
+ if (sp->req_state_flags & RQSF_XFRD_DATA) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "XFRD_DATA ");
+ }
+ if (sp->req_state_flags & RQSF_GOT_STATUS) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "GOT_STS ");
+ }
+ if (sp->req_state_flags & RQSF_GOT_SENSE) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "GOT_SNS ");
+ }
+ if (sp->req_state_flags & RQSF_XFER_COMPLETE) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "XFR_CMPLT ");
+ }
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "\n");
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "status->");
+ if (sp->req_status_flags & RQSTF_DISCONNECT) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "Disconnect ");
+ }
+ if (sp->req_status_flags & RQSTF_SYNCHRONOUS) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "Sync_xfr ");
+ }
+ if (sp->req_status_flags & RQSTF_PARITY_ERROR) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "Parity ");
+ }
+ if (sp->req_status_flags & RQSTF_BUS_RESET) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "Bus_Reset ");
+ }
+ if (sp->req_status_flags & RQSTF_DEVICE_RESET) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "Device_Reset ");
+ }
+ if (sp->req_status_flags & RQSTF_ABORTED) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "Aborted ");
+ }
+ if (sp->req_status_flags & RQSTF_TIMEOUT) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "Timeout ");
+ }
+ if (sp->req_status_flags & RQSTF_NEGOTIATION) {
+ p += strlen(p);
+ sprintf(p, "%s%s", buf, "Negotiation ");
+ }
PRINTF(buf, "%s\n", buf);
}
@@ -214,4 +246,28 @@ isp_remove_handle(isp, xs)
{
isp_destroy_handle(isp, isp_find_handle(isp, xs));
}
+
+static INLINE int
+isp_getrqentry __P((struct ispsoftc *, u_int16_t *, u_int16_t *, void **));
+
+static INLINE int
+isp_getrqentry(isp, iptrp, optrp, resultp)
+ struct ispsoftc *isp;
+ u_int16_t *iptrp;
+ u_int16_t *optrp;
+ void **resultp;
+{
+ volatile u_int16_t iptr, optr;
+
+ optr = isp->isp_reqodx = ISP_READ(isp, OUTMAILBOX4);
+ iptr = isp->isp_reqidx;
+ *resultp = ISP_QUEUE_ENTRY(isp->isp_rquest, iptr);
+ iptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN);
+ if (iptr == optr) {
+ return (1);
+ }
+ *optrp = optr;
+ *iptrp = iptr;
+ return (0);
+}
#endif /* _ISP_INLINE_H */