PERFORCE change 120460 for review
Matt Jacob
mjacob at FreeBSD.org
Sun May 27 17:31:15 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=120460
Change 120460 by mjacob at mjexp on 2007/05/27 17:31:10
Add an ioctl entry point in prepartion for lsiutil support.
Affected files ...
.. //depot/projects/mjexp/sys/dev/mpt/mpt.c#9 edit
.. //depot/projects/mjexp/sys/dev/mpt/mpt_ioctl.h#1 add
Differences ...
==== //depot/projects/mjexp/sys/dev/mpt/mpt.c#9 (text+ko) ====
@@ -108,10 +108,41 @@
#include <dev/mpt/mpilib/mpi_targ.h>
#include <sys/sysctl.h>
+#include <sys/conf.h>
+#include <sys/ioccom.h>
#define MPT_MAX_TRYS 3
#define MPT_MAX_WAIT 300000
+static d_ioctl_t mptioctl;
+#if __FreeBSD_version < 500000
+#define MPT_CDEV_MAJOR 249
+static struct cdevsw mpt_cdevsw = {
+ /* open */ nullopen,
+ /* close */ nullclose,
+ /* read */ noread,
+ /* write */ nowrite,
+ /* ioctl */ mptioctl,
+ /* poll */ nopoll,
+ /* mmap */ nommap,
+ /* strategy */ nostrategy,
+ /* name */ "mpt",
+ /* maj */ MPT_CDEV_MAJOR,
+ /* dump */ nodump,
+ /* psize */ nopsize,
+ /* flags */ D_TAPE,
+};
+#else
+static struct cdevsw mpt_cdevsw = {
+ .d_version = D_VERSION,
+#if __FreeBSD_version < 700037
+ .d_flags = D_NEEDGIANT,
+#endif
+ .d_ioctl = mptioctl,
+ .d_name = "mpt",
+};
+#endif
+
static int maxwait_ack = 0;
static int maxwait_int = 0;
static int maxwait_state = 0;
@@ -2099,6 +2130,7 @@
mpt_config_reply_handler;
mpt_reply_handlers[MPT_CBI(MPT_REPLY_HANDLER_HANDSHAKE)] =
mpt_handshake_reply_handler;
+ (void) make_dev(&mpt_cdevsw, 0, UID_ROOT, GID_OPERATOR, 0600, "mptctl");
return (0);
}
@@ -2140,7 +2172,6 @@
MPT_LOCK(mpt);
error = mpt_configure_ioc(mpt, 0, 0);
MPT_UNLOCK(mpt);
-
return (error);
}
@@ -2624,6 +2655,40 @@
}
/*
+ * IOCTL support
+ */
+
+#if __FreeBSD_version < 500000
+#define _DEV dev_t
+#define _IOP struct proc
+#else
+#define _IOP struct thread
+#define _DEV struct cdev *
+#endif
+
+static int
+mptioctl(_DEV dev, u_long c, caddr_t addr, int flags, _IOP *td)
+{
+ struct mpt_softc *mpt;
+ int retval = ENOTTY;
+
+ TAILQ_FOREACH(mpt, &mpt_tailq, links) {
+ if (minor(dev) == device_get_unit(mpt->dev)) {
+ break;
+ }
+ }
+ if (mpt == NULL) {
+ return (ENXIO);
+ }
+
+ switch (c) {
+ default:
+ break;
+ }
+ return (retval);
+}
+
+/*
* Endian Conversion Functions- only used on Big Endian machines
*/
#if _BYTE_ORDER == _BIG_ENDIAN
More information about the p4-projects
mailing list