From bilouro at FreeBSD.org Tue Jul 1 00:58:49 2008
From: bilouro at FreeBSD.org (Victor Hugo Bilouro)
Date: Tue Jul 1 00:58:51 2008
Subject: PERFORCE change 144402 for review
Message-ID: <200807010058.m610wmIe089210@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144402
Change 144402 by bilouro@bilouro_tcptest on 2008/07/01 00:58:40
tcptest module (tcptest.py)
test: send syn to a broadcast address (csynbroadcast.py)
Affected files ...
.. //depot/projects/soc2008/bilouro_tcptest/src/scripts/tests/csynbroadcast.py#1 add
.. //depot/projects/soc2008/bilouro_tcptest/src/scripts/tests/tcptest.py#1 add
Differences ...
From bilouro at FreeBSD.org Tue Jul 1 01:07:59 2008
From: bilouro at FreeBSD.org (Victor Hugo Bilouro)
Date: Tue Jul 1 01:08:04 2008
Subject: PERFORCE change 144403 for review
Message-ID: <200807010107.m6117wvk091074@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144403
Change 144403 by bilouro@bilouro_tcptest on 2008/07/01 01:07:02
Some small fixes
Affected files ...
.. //depot/projects/soc2008/bilouro_tcptest/src/scripts/tests/cthreewayhandshake_nooptions.py#4 edit
Differences ...
==== //depot/projects/soc2008/bilouro_tcptest/src/scripts/tests/cthreewayhandshake_nooptions.py#4 (text+ko) ====
@@ -126,7 +126,8 @@
self.tcb.tcpsequence[ self.tcb.thatside ] = tcpsynack.sequence
assertSequenceAcknowledgmentOK(self, self.tcb, tcpsynack, \
self.tcb.thisside, self.tcb.thatside)
-
+
+ assertSynPresent(self, tcpsynack)
#OK Its a SYN+ACK --> SYN consumes a sequence
self.tcb.tcpsequence[ self.tcb.thatside ] = tcpsynack.sequence + 1
@@ -271,7 +272,7 @@
def assertFin(self, tcp):
"""is fin flag on?
"""
- self.failIf(tcp.fin<0)
+ self.failIf(tcp.fin<1)
def createsyn(self, tcb, from_, to):
@@ -363,7 +364,7 @@
tcb.tcpport[ to ]==tcp.sport):
break
except:
- print "eeee"
+ print "packet ignored"
pass
return (ip, tcp)
From hselasky at FreeBSD.org Tue Jul 1 08:50:46 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 08:50:48 2008
Subject: PERFORCE change 144412 for review
Message-ID: <200807010850.m618ojt1059196@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144412
Change 144412 by hselasky@hselasky_laptop001 on 2008/07/01 08:50:14
Revert my changes. It appears that the "how" argument
is not always passed on from unlock to lock like
expected. The problem will be solved in another way.
Affected files ...
.. //depot/projects/usb/src/sys/kern/kern_mutex.c#10 integrate
Differences ...
==== //depot/projects/usb/src/sys/kern/kern_mutex.c#10 (text+ko) ====
@@ -133,8 +133,7 @@
void
lock_mtx(struct lock_object *lock, int how)
{
- if (how == 1)
- return;
+
mtx_lock((struct mtx *)lock);
}
@@ -151,18 +150,6 @@
struct mtx *m;
m = (struct mtx *)lock;
- if ((m == &Giant) && (!mtx_owned(m))) {
- /*
- * Sometimes DROP_GIANT() gets in our way when we use
- * the system condition variables passing the "Giant"
- * mutex. If Giant is not locked when we get into this
- * function then we can simply ignore those cases,
- * because the locking is then handled by the DROP_XXX
- * macros!
- */
- return (1);
- }
-
mtx_assert(m, MA_OWNED | MA_NOTRECURSED);
mtx_unlock(m);
return (0);
From hselasky at FreeBSD.org Tue Jul 1 11:04:00 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 11:04:02 2008
Subject: PERFORCE change 144415 for review
Message-ID: <200807011103.m61B3x2b079270@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144415
Change 144415 by hselasky@hselasky_laptop001 on 2008/07/01 11:03:31
To allow USB drivers using the Giant mutex, like ukbd
and the tty layer (ucom), condition variable functions
like mtx_sleep() and cv_wait() needs to support the Giant
mutex. Previously using the Giant mutex with these functions
resulted in a panic due to an unlock race between the
GIANT_DROP macro and the internal mutex unlock in the
condition variable function. This patch will try to
resolve that race.
Affected files ...
.. //depot/projects/usb/src/sys/kern/kern_condvar.c#7 edit
.. //depot/projects/usb/src/sys/kern/kern_synch.c#9 edit
.. //depot/projects/usb/src/sys/sys/mutex.h#8 edit
Differences ...
==== //depot/projects/usb/src/sys/kern/kern_condvar.c#7 (text+ko) ====
@@ -123,7 +123,7 @@
sleepq_lock(cvp);
cvp->cv_waiters++;
- DROP_GIANT();
+ DROP_GIANT(lock);
sleepq_add(cvp, lock, cvp->cv_description, SLEEPQ_CONDVAR, 0);
if (class->lc_flags & LC_SLEEPABLE)
@@ -176,7 +176,7 @@
sleepq_lock(cvp);
cvp->cv_waiters++;
- DROP_GIANT();
+ DROP_GIANT(lock);
sleepq_add(cvp, lock, cvp->cv_description, SLEEPQ_CONDVAR, 0);
if (class->lc_flags & LC_SLEEPABLE)
@@ -233,7 +233,7 @@
sleepq_lock(cvp);
cvp->cv_waiters++;
- DROP_GIANT();
+ DROP_GIANT(lock);
sleepq_add(cvp, lock, cvp->cv_description, SLEEPQ_CONDVAR |
SLEEPQ_INTERRUPTIBLE, 0);
@@ -293,7 +293,7 @@
sleepq_lock(cvp);
cvp->cv_waiters++;
- DROP_GIANT();
+ DROP_GIANT(lock);
sleepq_add(cvp, lock, cvp->cv_description, SLEEPQ_CONDVAR, 0);
sleepq_set_timeout(cvp, timo);
@@ -356,7 +356,7 @@
sleepq_lock(cvp);
cvp->cv_waiters++;
- DROP_GIANT();
+ DROP_GIANT(lock);
sleepq_add(cvp, lock, cvp->cv_description, SLEEPQ_CONDVAR |
SLEEPQ_INTERRUPTIBLE, 0);
==== //depot/projects/usb/src/sys/kern/kern_synch.c#9 (text+ko) ====
@@ -181,7 +181,7 @@
CTR5(KTR_PROC, "sleep: thread %ld (pid %ld, %s) on %s (%p)",
td->td_tid, p->p_pid, td->td_name, wmesg, ident);
- DROP_GIANT();
+ DROP_GIANT(lock);
if (lock != NULL && !(class->lc_flags & LC_SLEEPABLE)) {
WITNESS_SAVE(lock, lock_witness);
lock_state = class->lc_unlock(lock);
==== //depot/projects/usb/src/sys/sys/mutex.h#8 (text+ko) ====
@@ -366,17 +366,44 @@
*
* Note that DROP_GIANT*() needs to be paired with PICKUP_GIANT()
* The #ifndef is to allow lint-like tools to redefine DROP_GIANT.
+ *
+ * Note that by default DROP_GIANT takes no argument. Optionally you
+ * can specify an argument which explicitly has the name "lock" and
+ * type "struct lock_object *". If this "lock" pointer is equal to
+ * "&Giant", the DROP_GIANT macro will not do the final drop on the
+ * Giant mutex, but expects the calling code to do so. This feature is
+ * used by condition variables to allow sleeping on Giant. The
+ * condition variable code will then do the final drop!
*/
#ifndef DROP_GIANT
-#define DROP_GIANT() \
+#define DROP_GIANT(arg) DROP_GIANT_SUB_##arg(arg)
+#define DROP_GIANT_SUB_lock(arg) DROP_GIANT_SUB(arg) /* "lock" argument */
+#define DROP_GIANT_SUB_(arg) DROP_GIANT_SUB(NULL) /* no argument */
+#define DROP_GIANT_SUB(lock) \
do { \
- int _giantcnt = 0; \
+ unsigned int _giantcnt; \
WITNESS_SAVE_DECL(Giant); \
\
if (mtx_owned(&Giant)) { \
- WITNESS_SAVE(&Giant.lock_object, Giant); \
- for (_giantcnt = 0; mtx_owned(&Giant); _giantcnt++) \
- mtx_unlock(&Giant); \
+ unsigned int _giantn; \
+ if (((void *)(lock)) == ((void *)&Giant)) { \
+ /* special case */ \
+ _giantn = Giant.mtx_recurse; \
+ } else { \
+ /* default case */ \
+ _giantn = Giant.mtx_recurse + 1; \
+ } \
+ if (_giantn != 0) { \
+ WITNESS_SAVE(&Giant.lock_object, Giant); \
+ _giantcnt = _giantn; \
+ do { \
+ mtx_unlock(&Giant); \
+ } while (--_giantn); \
+ } else { \
+ _giantcnt = 0; \
+ } \
+ } else { \
+ _giantcnt = 0; \
}
#define PICKUP_GIANT() \
From hselasky at FreeBSD.org Tue Jul 1 12:35:33 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 12:35:35 2008
Subject: PERFORCE change 144418 for review
Message-ID: <200807011235.m61CZWXJ094735@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144418
Change 144418 by hselasky@hselasky_laptop001 on 2008/07/01 12:35:00
Add more debugging and fix various bugs.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/controller/at91dci_atmelarm.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ehci2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ehci2_pci.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_atmelarm.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_pci.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uhci2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uhci2_pci.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/usb2_controller.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uss820dci_pccard.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_config_td.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#6 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_debug.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_process.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_sw_transfer.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#6 edit
.. //depot/projects/usb/src/sys/dev/usb2/input/uhid2.c#3 edit
.. //depot/projects/usb/src/sys/modules/usb2/controller/Makefile#3 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/controller/at91dci_atmelarm.c#3 (text+ko) ====
@@ -205,7 +205,7 @@
if (!(sc->sc_vbus_irq_res)) {
goto error;
}
- sc->sc_dci.sc_bus.bdev = device_add_child(dev, "usb", -1);
+ sc->sc_dci.sc_bus.bdev = device_add_child(dev, "usbus", -1);
if (!(sc->sc_dci.sc_bus.bdev)) {
goto error;
}
==== //depot/projects/usb/src/sys/dev/usb2/controller/ehci2.c#3 (text+ko) ====
@@ -3043,6 +3043,8 @@
{
ehci_softc_t *sc = xfer->usb2_sc;
+ DPRINTF(0, "\n");
+
sc->sc_root_ctrl.xfer = xfer;
usb2_config_td_queue_command
==== //depot/projects/usb/src/sys/dev/usb2/controller/ehci2_pci.c#3 (text+ko) ====
@@ -281,7 +281,7 @@
device_printf(self, "Could not allocate irq\n");
goto error;
}
- sc->sc_bus.bdev = device_add_child(self, "usb", -1);
+ sc->sc_bus.bdev = device_add_child(self, "usbus", -1);
if (!sc->sc_bus.bdev) {
device_printf(self, "Could not add USB device\n");
goto error;
==== //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_atmelarm.c#3 (text) ====
@@ -103,7 +103,7 @@
if (!(sc->sc_ohci.sc_irq_res)) {
goto error;
}
- sc->sc_ohci.sc_bus.bdev = device_add_child(dev, "usb", -1);
+ sc->sc_ohci.sc_bus.bdev = device_add_child(dev, "usbus", -1);
if (!(sc->sc_ohci.sc_bus.bdev)) {
goto error;
}
==== //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_pci.c#3 (text+ko) ====
@@ -229,7 +229,7 @@
device_printf(self, "Could not allocate irq\n");
goto error;
}
- sc->sc_bus.bdev = device_add_child(self, "usb", -1);
+ sc->sc_bus.bdev = device_add_child(self, "usbus", -1);
if (!sc->sc_bus.bdev) {
device_printf(self, "Could not add USB device\n");
goto error;
==== //depot/projects/usb/src/sys/dev/usb2/controller/uhci2.c#3 (text+ko) ====
@@ -2532,6 +2532,8 @@
{
uhci_softc_t *sc = xfer->usb2_sc;
+ DPRINTF(0, "\n");
+
sc->sc_root_ctrl.xfer = xfer;
usb2_config_td_queue_command
==== //depot/projects/usb/src/sys/dev/usb2/controller/uhci2_pci.c#3 (text+ko) ====
@@ -282,7 +282,7 @@
device_printf(self, "Could not allocate irq\n");
goto error;
}
- sc->sc_bus.bdev = device_add_child(self, "usb", -1);
+ sc->sc_bus.bdev = device_add_child(self, "usbus", -1);
if (!sc->sc_bus.bdev) {
device_printf(self, "Could not add USB device\n");
goto error;
==== //depot/projects/usb/src/sys/dev/usb2/controller/usb2_controller.c#3 (text+ko) ====
@@ -58,9 +58,9 @@
/* static variables */
#ifdef USB_DEBUG
-static int usb2_ctrl_debug;
+static int usb2_ctrl_debug = 0;
-SYSCTL_NODE(_hw_usb2, OID_AUTO, ctrl, CTLFLAG_RW, 0, "USB ctrless");
+SYSCTL_NODE(_hw_usb2, OID_AUTO, ctrl, CTLFLAG_RW, 0, "USB controller");
SYSCTL_INT(_hw_usb2_ctrl, OID_AUTO, debug, CTLFLAG_RW, &usb2_ctrl_debug, 0,
"Debug level");
#endif
@@ -118,7 +118,9 @@
mtx_lock(&Giant);
if (usb2_post_init_called) {
+ mtx_lock(&Giant);
usb2_attach_sub(dev, bus);
+ mtx_unlock(&Giant);
usb2_needs_explore(bus, 1);
}
mtx_unlock(&Giant);
@@ -139,7 +141,6 @@
/* Let the USB explore process detach all devices. */
mtx_lock(&(bus->mtx));
-
if (usb2_proc_msignal(&(bus->explore_proc),
&(bus->detach_msg[0]), &(bus->detach_msg[1]))) {
/* ignore */
@@ -155,10 +156,12 @@
usb2_proc_unsetup(&(bus->explore_proc));
+ /* clear the softc */
+ device_set_softc(dev, NULL);
+
return (0);
}
-
/*------------------------------------------------------------------------*
* usb2_bus_explore
*
@@ -219,7 +222,6 @@
bus->ready = 0;
mtx_unlock(&(bus->mtx));
-
mtx_lock(&Giant);
/* detach children first */
@@ -233,9 +235,7 @@
usb2_free_device(udev);
mtx_unlock(&Giant);
-
mtx_lock(&(bus->mtx));
-
return;
}
@@ -347,9 +347,11 @@
max = devclass_get_maxunit(dc) + 1;
for (n = 0; n != max; n++) {
dev = devclass_get_device(dc, n);
- if (dev) {
+ if (dev && device_is_attached(dev)) {
bus = device_get_softc(dev);
+ mtx_lock(&Giant);
usb2_attach_sub(dev, bus);
+ mtx_unlock(&Giant);
}
}
} else {
==== //depot/projects/usb/src/sys/dev/usb2/controller/uss820dci_pccard.c#3 (text+ko) ====
@@ -184,7 +184,7 @@
if (sc->sc_irq_res == NULL) {
goto error;
}
- sc->sc_bus.bdev = device_add_child(dev, "usb", -1);
+ sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);
if (!(sc->sc_bus.bdev)) {
goto error;
}
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_config_td.c#2 (text+ko) ====
@@ -38,6 +38,8 @@
struct usb2_config_td_item *pi = (void *)pm;
struct usb2_config_td *ctd = pi->p_ctd;
+ DPRINTF(0, "\n");
+
(pi->command_func) (ctd->p_softc, (void *)(pi + 1), pi->command_ref);
if (TAILQ_NEXT(pm, pm_qentry) == NULL) {
@@ -68,6 +70,8 @@
struct usb2_config_td_item *pi;
uint16_t n;
+ DPRINTF(0, " size=%u, count=%u \n", item_size, item_count);
+
if (item_count >= 256) {
DPRINTF(-1, "too many items!\n");
return (1);
@@ -83,8 +87,8 @@
return (1);
}
if (usb2_proc_setup(&(ctd->usb2_proc), priv_mtx, USB_PRI_MED)) {
+ free(M_USBDEV, ctd->p_msgs);
ctd->p_msgs = NULL;
- free(M_USBDEV, ctd->p_msgs);
return (1);
}
/* initialise messages */
@@ -109,6 +113,7 @@
void
usb2_config_td_stop(struct usb2_config_td *ctd)
{
+ DPRINTF(0, "\n");
if (ctd->p_msgs) {
usb2_proc_drain(&(ctd->usb2_proc));
}
@@ -124,6 +129,8 @@
void
usb2_config_td_unsetup(struct usb2_config_td *ctd)
{
+ DPRINTF(0, "\n");
+
usb2_config_td_stop(ctd);
if (ctd->p_msgs) {
@@ -161,9 +168,12 @@
uint16_t n;
if (usb2_config_td_is_gone(ctd)) {
+ DPRINTF(0, "gone\n");
/* nothing more to do */
return;
}
+ DPRINTF(0, "\n");
+
pi = USB_ADD_BYTES(ctd->p_msgs, 0);
for (n = 0;; n += 2) {
if (n == ctd->msg_count) {
@@ -172,19 +182,28 @@
__FUNCTION__, __LINE__);
return;
}
- if ((pi->command_func == NULL) ||
- ((pi->command_func == command_post_func) &&
- (pi->command_ref == command_ref))) {
+ if (pi->command_func == NULL) {
+ /* reserve our entry */
+ pi->command_func = command_post_func;
+ pi->command_ref = command_ref;
+ pi_0 = pi;
+ pi = USB_ADD_BYTES(pi, ctd->msg_size);
+ pi->command_func = command_post_func;
+ pi->command_ref = command_ref;
+ pi_1 = pi;
+ break;
+ }
+ if ((pi->command_func == command_post_func) &&
+ (pi->command_ref == command_ref)) {
/* found an entry */
+ pi_0 = pi;
+ pi = USB_ADD_BYTES(pi, ctd->msg_size);
+ pi_1 = pi;
break;
}
pi = USB_ADD_BYTES(pi, (2 * ctd->msg_size));
}
- pi_0 = pi;
- pi = USB_ADD_BYTES(pi, ctd->msg_size);
- pi_1 = pi;
-
/*
* We have two message structures. One of them will get
* queued:
@@ -198,8 +217,6 @@
* That way commands queued by the pre command will be queued after
* the current command.
*/
- pi->command_func = command_post_func;
- pi->command_ref = command_ref;
/*
* The job of the pre-command function is to copy the needed
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#6 (text+ko) ====
@@ -349,6 +349,7 @@
struct usb2_interface *iface; /* current interface */
uint8_t usb2_mode; /* see USB_MODE_XXX */
uint8_t port;
+ uint8_t use_generic; /* hint for generic drivers */
};
/* Structure used when referring an USB device */
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_debug.h#2 (text+ko) ====
@@ -42,10 +42,10 @@
/* Check if USB debugging is enabled. */
#ifdef USB_DEBUG_VAR
#ifdef USB_DEBUG
-#define DPRINTF(n,fmt,...) do { \
+#define DPRINTF(n,fmt,...) do { \
if ((USB_DEBUG_VAR) > (n)) { \
- printf("%s:%u@%s: " fmt, __FILE__, __LINE__, \
- __FUNCTION__,## __VA_ARGS__); \
+ printf("%s:%u: " fmt, \
+ __FUNCTION__, __LINE__,## __VA_ARGS__); \
} \
} while (0)
#else
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#5 (text+ko) ====
@@ -776,15 +776,15 @@
if (fp == NULL) {
return (ENXIO);
}
- if (usb2_old_f_data != NULL) {
- if (usb2_old_f_data != fp->f_data) {
+ if (usb2_old_f_data != fp->f_data) {
+ if (usb2_old_f_data != NULL) {
DPRINTF(-1, "File data mismatch!\n");
return (ENXIO);
}
usb2_old_f_data = fp->f_data;
}
- if (usb2_old_f_ops != NULL) {
- if (usb2_old_f_ops != fp->f_ops) {
+ if (usb2_old_f_ops != fp->f_ops) {
+ if (usb2_old_f_ops != NULL) {
DPRINTF(-1, "File ops mismatch!\n");
return (ENXIO);
}
@@ -981,6 +981,8 @@
int fflags;
int err;
+ DPRINTF(1, "\n");
+
err = usb2_ref_device(fp, &loc, 0);;
/* restore some file variables */
@@ -1614,10 +1616,10 @@
if (kern_unlink(curthread, buf, UIO_SYSSPACE)) {
/* ignore */
}
- if (kern_symlink(curthread, buf, src, UIO_SYSSPACE)) {
+ if (kern_symlink(curthread, src, buf, UIO_SYSSPACE)) {
/* ignore */
}
- printf("Symlink: %s -> %s\n", src, buf);
+ printf("Symlink: %s -> %s\n", buf, src);
}
DPRINTF(1, "attached %p/%p\n", f_tx, f_rx);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#3 (text+ko) ====
@@ -582,6 +582,7 @@
} else
selfpowered = 1;
}
+
DPRINTF(0, "udev=%p cdesc=%p (addr %d) cno=%d attr=0x%02x, "
"selfpowered=%d, power=%d\n",
udev, cdp,
@@ -611,8 +612,8 @@
udev->curr_config_index = index;
/* Set the actual configuration value. */
- err = usb2_req_set_config(udev, &Giant,
- cdp->bConfigurationValue);
+ err = usb2_req_set_config(udev, &Giant,
+cdp->bConfigurationValue);
if (err) {
goto error;
}
@@ -989,7 +990,7 @@
usb2_init_attach_arg(struct usb2_device *udev,
struct usb2_attach_arg *uaa)
{
- bzero(&uaa, sizeof(uaa));
+ bzero(uaa, sizeof(*uaa));
uaa->device = udev;
uaa->usb2_mode = udev->flags.usb2_mode;
@@ -1076,10 +1077,28 @@
uaa.info.bIfaceIndex = i;
uaa.info.bIfaceNum =
iface->idesc->bInterfaceNumber;
+ uaa.use_generic = 0;
+ DPRINTF(1, "iclass=%u/%u/%u iindex=%u/%u\n",
+ uaa.info.bInterfaceClass,
+ uaa.info.bInterfaceSubClass,
+ uaa.info.bInterfaceProtocol,
+ uaa.info.bIfaceIndex,
+ uaa.info.bIfaceNum);
+
+ /* try specific interface drivers first */
+
if (usb2_probe_and_attach_sub(udev, &uaa)) {
/* ignore */
}
+
+ /* try generic interface drivers last */
+
+ uaa.use_generic = 1;
+
+ if (usb2_probe_and_attach_sub(udev, &uaa)) {
+ /* ignore */
+ }
}
if (uaa.temp_dev) {
@@ -1824,7 +1843,7 @@
uint8_t
usb2_test_quirk(const struct usb2_attach_arg *uaa, uint16_t quirk)
{
- uint8_t found = 0;
+ uint8_t found;
found = (usb2_test_quirk_p) (&(uaa->info), quirk);
return (found);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#5 (text+ko) ====
@@ -126,7 +126,7 @@
static driver_t uhub_driver =
{
- .name = "uhub",
+ .name = "ushub",
.methods = (device_method_t[]){
DEVMETHOD(device_probe, uhub_probe),
DEVMETHOD(device_attach, uhub_attach),
@@ -644,14 +644,14 @@
req.bRequest = UR_GET_DESCRIPTOR;
USETW2(req.wValue, UDESC_HUB, 0);
USETW(req.wIndex, 0);
- USETW(req.wLength, sizeof(hubdesc));
+ USETW(req.wLength, 9); /* assuming that there is one port */
err = usb2_do_request(udev, &Giant, &req, &hubdesc);
nports = hubdesc.bNbrPorts;
if (!err && (nports >= 8)) {
- uint16_t len = (sizeof(hubdesc) - 1) + ((nports + 7) / 8);
+ uint16_t len = 8 + ((nports + 7) / 8);
USETW(req.wLength, len);
err = usb2_do_request(udev, &Giant, &req, &hubdesc);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_process.c#2 (text+ko) ====
@@ -131,7 +131,7 @@
pm = TAILQ_FIRST(&(up->up_qhead));
if (pm) {
- DPRINTF(0, "Message %p,%p (enter)\n",
+ DPRINTF(0, "Message pm=%p, cb=%p (enter)\n",
pm, pm->pm_callback);
(pm->pm_callback) (pm);
@@ -141,7 +141,7 @@
TAILQ_REMOVE(&(up->up_qhead), pm, pm_qentry);
pm->pm_qentry.tqe_prev = NULL;
}
- DPRINTF(0, "Message %p (leave)\n", pm);
+ DPRINTF(0, "Message pm=%p (leave)\n", pm);
continue;
}
@@ -150,18 +150,14 @@
cv_broadcast(&(up->up_drain));
}
up->up_msleep = 1;
-
cv_wait(&(up->up_cv), up->up_mtx);
-
- up->up_msleep = 0;
}
up->up_ptr = NULL;
-
cv_signal(&(up->up_cv));
-
mtx_unlock(up->up_mtx);
+ USB_THREAD_EXIT(0);
return;
}
@@ -295,6 +291,8 @@
pm2 = NULL; /* panic - should not happen */
}
+ DPRINTF(0, " t=%u, num=%u\n", t, up->up_msg_num);
+
/* Put message last on queue */
pm2->pm_num = up->up_msg_num;
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.c#3 (text+ko) ====
@@ -70,6 +70,8 @@
{
; /* workaround for a bug in "indent" */
+ DPRINTF(0, "st=%u\n", USB_GET_STATE(xfer));
+
switch (USB_GET_STATE(xfer)) {
case USB_ST_SETUP:
usb2_start_hardware(xfer);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_sw_transfer.c#2 (text+ko) ====
@@ -27,11 +27,14 @@
#include
#include
+#define USB_DEBUG_VAR usb2_debug
+
#include
#include
#include
#include
#include
+#include
/*------------------------------------------------------------------------*
* usb2_sw_transfer - factored out code
@@ -60,6 +63,7 @@
xfer = std->xfer;
if (xfer == NULL) {
/* the transfer is gone */
+ DPRINTF(0, "xfer gone\n");
return;
}
mtx_assert(xfer->usb2_mtx, MA_OWNED);
@@ -154,10 +158,8 @@
}
}
done:
+ DPRINTF(0, "done err=%s\n", usb2_errstr(std->err));
std->state = USB_SW_TR_PRE_CALLBACK;
(func) (xfer, std);
-
- /* call the USB transfer callback */
- usb2_command_wrapper(&(xfer->usb2_root->done_q), xfer);
return;
}
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#6 (text+ko) ====
@@ -1280,6 +1280,8 @@
if (!xfer->flags_int.open) {
xfer->flags_int.open = 1;
+ DPRINTF(0, "open\n");
+
mtx_lock(xfer->usb2_mtx);
(xfer->pipe->methods->open) (xfer);
mtx_unlock(xfer->usb2_mtx);
@@ -1415,6 +1417,8 @@
pipe = xfer->pipe;
+ DPRINTF(0, "enter\n");
+
/* enter the transfer */
(pipe->methods->enter) (xfer);
@@ -1511,11 +1515,19 @@
*/
if (xfer->flags_int.transferring) {
if (xfer->flags_int.can_cancel_immed) {
- usb2_transfer_done(xfer, 0);
+ /*
+ * The close method will be called by the
+ * "usb2_callback_wrapper()" when it detects
+ * that we are closed. This way we resolve
+ * some races.
+ */
+ usb2_transfer_done(xfer, USB_ERR_CANCELLED);
} else {
/* need to wait for the next done callback */
}
} else {
+ DPRINTF(0, "close\n");
+
/* close here and now */
(xfer->pipe->methods->close) (xfer);
}
@@ -1676,6 +1688,8 @@
* 4) We are doing an ordinary callback
*/
DPRINTF(2, "case 1-4\n");
+ /* get next USB transfer in the queue */
+ info->done_q.curr = NULL;
mtx_unlock(xfer->usb2_mtx);
mtx_assert(xfer->usb2_mtx, MA_NOTOWNED);
@@ -1688,8 +1702,6 @@
if (usb2_callback_wrapper_sub(xfer)) {
/* the callback has been deferred */
mtx_lock(xfer->usb2_mtx);
- /* get next USB transfer in the queue */
- info->done_q.curr = NULL;
goto done;
}
xfer->flags_int.transferring = 0;
@@ -1723,18 +1735,14 @@
(xfer->flags_int.started) &&
(xfer->usb2_state == USB_ST_ERROR)) {
/* do nothing - just loop */
+ usb2_command_wrapper(&(info->done_q), xfer);
+ return;
} else if (xfer->flags_int.draining &&
(!xfer->flags_int.transferring)) {
- /* get next USB transfer in the queue */
- info->done_q.curr = NULL;
/* "usb2_transfer_drain()" is waiting for end of transfer */
xfer->flags_int.draining = 0;
wakeup(&(xfer->flags_int));
- } else {
- /* get next USB transfer in the queue */
- info->done_q.curr = NULL;
}
-
done:
/* do the next callback, if any */
usb2_command_wrapper(&(info->done_q),
@@ -1828,6 +1836,16 @@
mtx_assert(xfer->usb2_mtx, MA_OWNED);
+ DPRINTF(0, "err=%s\n", usb2_errstr(error));
+
+ /*
+ * If we are not transferring then just return.
+ * This can happen during transfer cancel.
+ */
+ if (!xfer->flags_int.transferring) {
+ DPRINTF(0, "not transferring\n");
+ return;
+ }
/* only set transfer error if not already set */
if (!xfer->error) {
xfer->error = error;
@@ -1902,6 +1920,8 @@
mtx_assert(xfer->usb2_mtx, MA_OWNED);
+ DPRINTF(0, "start\n");
+
/* start the transfer */
(pipe->methods->start) (xfer);
@@ -2045,6 +2065,8 @@
return;
}
}
+ DPRINTF(0, "start\n");
+
/* start USB transfer */
(pipe->methods->start) (xfer);
@@ -2105,6 +2127,7 @@
if (!xfer->flags_int.open &&
!xfer->flags_int.did_close) {
+ DPRINTF(0, "close\n");
mtx_lock(xfer->usb2_mtx);
(xfer->pipe->methods->close) (xfer);
mtx_unlock(xfer->usb2_mtx);
@@ -2245,6 +2268,7 @@
usb2_transfer_enqueue(pq, xfer);
if (pq->curr != NULL) {
/* something is already processing */
+ DPRINTF(5, "busy %p\n", pq->curr);
return;
}
}
@@ -2272,7 +2296,9 @@
break;
}
}
+ DPRINTF(5, "cb %p (enter)\n", pq->curr);
(pq->command) (pq);
+ DPRINTF(5, "cb %p (leave)\n", pq->curr);
} while (!pq->recurse_2);
==== //depot/projects/usb/src/sys/dev/usb2/input/uhid2.c#3 (text+ko) ====
@@ -630,6 +630,10 @@
if (uaa->usb2_mode != USB_MODE_HOST) {
return (ENXIO);
}
+ if (uaa->use_generic == 0) {
+ /* give Mouse and Keyboard drivers a try first */
+ return (ENXIO);
+ }
if (uaa->info.bInterfaceClass != UICLASS_HID) {
/* the Xbox 360 gamepad doesn't use the HID class */
==== //depot/projects/usb/src/sys/modules/usb2/controller/Makefile#3 (text+ko) ====
@@ -7,16 +7,25 @@
SRCS+= bus_if.h usb2_if.h device_if.h vnode_if.h
SRCS+= opt_usb.h pci_if.h opt_bus.h card_if.h
+#
+# The "usb2_controller.c" file must be first to
+# resolve a "MODULE_DRIVER()" race.
+#
+
+SRCS+= usb2_controller.c
+
+.if defined(HAS_ATMELARM)
+SRCS+= at91dci_atmelarm.c
+SRCS+= ohci2_atmelarm.c
+.endif
+
SRCS+= at91dci.c
-SRCS+= at91dci_atmelarm.c
SRCS+= ehci2.c
SRCS+= ehci2_pci.c
SRCS+= ohci2.c
-SRCS+= ohci2_atmelarm.c
SRCS+= ohci2_pci.c
SRCS+= uhci2.c
SRCS+= uhci2_pci.c
-SRCS+= usb2_controller.c
SRCS+= uss820dci.c
SRCS+= uss820dci_pccard.c
From vi0 at FreeBSD.org Tue Jul 1 14:24:24 2008
From: vi0 at FreeBSD.org (Przemek Witaszczyk)
Date: Tue Jul 1 14:24:29 2008
Subject: PERFORCE change 144423 for review
Message-ID: <200807011424.m61EONvs016491@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144423
Change 144423 by vi0@vi0_gilgamesh.semihalf.com on 2008/07/01 14:24:12
New config
Affected files ...
.. //depot/projects/soc2008/vi0/efika/sys/powerpc/conf/EFIKA#1 add
Differences ...
From sson at FreeBSD.org Tue Jul 1 15:26:26 2008
From: sson at FreeBSD.org (Stacey Son)
Date: Tue Jul 1 15:26:28 2008
Subject: PERFORCE change 144425 for review
Message-ID: <200807011526.m61FQPQL026558@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144425
Change 144425 by sson@sson_amd64 on 2008/07/01 15:25:44
Fixed problem when building outside the source directories.
Affected files ...
.. //depot/projects/trustedbsd/openbsm/bin/audit/Makefile.am#3 edit
.. //depot/projects/trustedbsd/openbsm/bin/audit/Makefile.in#6 edit
.. //depot/projects/trustedbsd/openbsm/bin/audit/auditd_control.defs#2 delete
.. //depot/projects/trustedbsd/openbsm/bin/auditd/Makefile.am#3 edit
.. //depot/projects/trustedbsd/openbsm/bin/auditd/Makefile.in#6 edit
.. //depot/projects/trustedbsd/openbsm/bin/auditfilterd/Makefile.am#2 edit
.. //depot/projects/trustedbsd/openbsm/bin/auditfilterd/Makefile.in#3 edit
.. //depot/projects/trustedbsd/openbsm/bin/auditreduce/Makefile.am#2 edit
.. //depot/projects/trustedbsd/openbsm/bin/auditreduce/Makefile.in#5 edit
.. //depot/projects/trustedbsd/openbsm/bin/praudit/Makefile.am#2 edit
.. //depot/projects/trustedbsd/openbsm/bin/praudit/Makefile.in#5 edit
.. //depot/projects/trustedbsd/openbsm/libbsm/Makefile.am#4 edit
.. //depot/projects/trustedbsd/openbsm/libbsm/Makefile.in#6 edit
.. //depot/projects/trustedbsd/openbsm/modules/auditfilter_noop/Makefile.am#2 edit
.. //depot/projects/trustedbsd/openbsm/modules/auditfilter_noop/Makefile.in#3 edit
.. //depot/projects/trustedbsd/openbsm/test/bsm/Makefile.am#2 edit
.. //depot/projects/trustedbsd/openbsm/test/bsm/Makefile.in#3 edit
.. //depot/projects/trustedbsd/openbsm/tools/Makefile.am#3 edit
.. //depot/projects/trustedbsd/openbsm/tools/Makefile.in#6 edit
Differences ...
==== //depot/projects/trustedbsd/openbsm/bin/audit/Makefile.am#3 (text+ko) ====
@@ -1,8 +1,8 @@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/audit/Makefile.am#2 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/audit/Makefile.am#3 $
#
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
sbin_PROGRAMS = audit
audit_LDADD = $(top_builddir)/libbsm/libbsm.la
@@ -12,8 +12,8 @@
audit_SOURCES = auditd_control_user.c audit.c
CLEANFILES = auditd_control_user.c auditd_control_user.h
-auditd_control_user.c: auditd_control.defs
- $(MIG) -user auditd_control_user.c -header auditd_control_user.h -server /dev/null -sheader /dev/null auditd_control.defs
+auditd_control_user.c: $(top_srcdir)/bin/auditd/auditd_control.defs
+ $(MIG) -user auditd_control_user.c -header auditd_control_user.h -server /dev/null -sheader /dev/null $(top_srcdir)/bin/auditd/auditd_control.defs
else
audit_SOURCES = audit.c
endif
==== //depot/projects/trustedbsd/openbsm/bin/audit/Makefile.in#6 (text+ko) ====
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/audit/Makefile.in#5 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/audit/Makefile.in#6 $
#
VPATH = @srcdir@
@@ -127,6 +127,7 @@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -182,7 +183,7 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
audit_LDADD = $(top_builddir)/libbsm/libbsm.la
man8_MANS = audit.8
@USE_MACH_IPC_FALSE@audit_SOURCES = audit.c
@@ -519,8 +520,8 @@
uninstall-sbinPROGRAMS
-@USE_MACH_IPC_TRUE@auditd_control_user.c: auditd_control.defs
-@USE_MACH_IPC_TRUE@ $(MIG) -user auditd_control_user.c -header auditd_control_user.h -server /dev/null -sheader /dev/null auditd_control.defs
+@USE_MACH_IPC_TRUE@auditd_control_user.c: $(top_srcdir)/bin/auditd/auditd_control.defs
+@USE_MACH_IPC_TRUE@ $(MIG) -user auditd_control_user.c -header auditd_control_user.h -server /dev/null -sheader /dev/null $(top_srcdir)/bin/auditd/auditd_control.defs
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
==== //depot/projects/trustedbsd/openbsm/bin/auditd/Makefile.am#3 (text+ko) ====
@@ -1,8 +1,8 @@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/auditd/Makefile.am#2 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/auditd/Makefile.am#3 $
#
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
sbin_PROGRAMS = auditd
auditd_LDADD = $(top_builddir)/libbsm/libbsm.la
@@ -13,10 +13,10 @@
CLEANFILES = auditd_control_server.c auditd_control_server.h audit_triggers_server.c audit_triggers_server.h
auditd_control_server.c: auditd_control.defs
- $(MIG) -user /dev/null -header /dev/null -server auditd_control_server.c -sheader auditd_control_server.h auditd_control.defs
+ $(MIG) -user /dev/null -header /dev/null -server auditd_control_server.c -sheader auditd_control_server.h $(top_srcdir)/bin/auditd/auditd_control.defs
audit_triggers_server.c: audit_triggers.defs
- $(MIG) -user /dev/null -header /dev/null -server audit_triggers_server.c -sheader audit_triggers_server.h audit_triggers.defs
+ $(MIG) -user /dev/null -header /dev/null -server audit_triggers_server.c -sheader audit_triggers_server.h $(top_srcdir)/bin/auditd/audit_triggers.defs
else
auditd_SOURCES = audit_warn.c auditd.c
endif
==== //depot/projects/trustedbsd/openbsm/bin/auditd/Makefile.in#6 (text+ko) ====
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/auditd/Makefile.in#5 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/auditd/Makefile.in#6 $
#
VPATH = @srcdir@
@@ -186,7 +186,7 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
auditd_LDADD = $(top_builddir)/libbsm/libbsm.la
man8_MANS = auditd.8
@USE_MACH_IPC_FALSE@auditd_SOURCES = audit_warn.c auditd.c
@@ -526,10 +526,10 @@
@USE_MACH_IPC_TRUE@auditd_control_server.c: auditd_control.defs
-@USE_MACH_IPC_TRUE@ $(MIG) -user /dev/null -header /dev/null -server auditd_control_server.c -sheader auditd_control_server.h auditd_control.defs
+@USE_MACH_IPC_TRUE@ $(MIG) -user /dev/null -header /dev/null -server auditd_control_server.c -sheader auditd_control_server.h $(top_srcdir)/bin/auditd/auditd_control.defs
@USE_MACH_IPC_TRUE@audit_triggers_server.c: audit_triggers.defs
-@USE_MACH_IPC_TRUE@ $(MIG) -user /dev/null -header /dev/null -server audit_triggers_server.c -sheader audit_triggers_server.h audit_triggers.defs
+@USE_MACH_IPC_TRUE@ $(MIG) -user /dev/null -header /dev/null -server audit_triggers_server.c -sheader audit_triggers_server.h $(top_srcdir)/bin/auditd/audit_triggers.defs
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
==== //depot/projects/trustedbsd/openbsm/bin/auditfilterd/Makefile.am#2 (text+ko) ====
@@ -1,8 +1,8 @@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/auditfilterd/Makefile.am#1 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/auditfilterd/Makefile.am#2 $
#
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
sbin_PROGRAMS = auditfilterd
auditfilterd_SOURCES = auditfilterd_conf.c auditfilterd.c
==== //depot/projects/trustedbsd/openbsm/bin/auditfilterd/Makefile.in#3 (text+ko) ====
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/auditfilterd/Makefile.in#2 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/auditfilterd/Makefile.in#3 $
#
VPATH = @srcdir@
@@ -114,6 +114,7 @@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MIG = @MIG@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -124,7 +125,6 @@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
-SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -180,7 +180,7 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
auditfilterd_SOURCES = auditfilterd_conf.c auditfilterd.c
auditfilterd_LDADD = $(top_builddir)/libbsm/libbsm.la
man8_MANS = auditfilterd.8
@@ -197,9 +197,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bin/auditfilterd/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/auditfilterd/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign bin/auditfilterd/Makefile
+ $(AUTOMAKE) --gnu bin/auditfilterd/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
==== //depot/projects/trustedbsd/openbsm/bin/auditreduce/Makefile.am#2 (text+ko) ====
@@ -1,8 +1,8 @@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/auditreduce/Makefile.am#1 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/auditreduce/Makefile.am#2 $
#
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
sbin_PROGRAMS = auditreduce
auditreduce_SOURCES = auditreduce.c
==== //depot/projects/trustedbsd/openbsm/bin/auditreduce/Makefile.in#5 (text+ko) ====
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/auditreduce/Makefile.in#4 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/auditreduce/Makefile.in#5 $
#
VPATH = @srcdir@
@@ -113,6 +113,7 @@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MIG = @MIG@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -123,7 +124,6 @@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
-SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -179,7 +179,7 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
auditreduce_SOURCES = auditreduce.c
auditreduce_LDADD = $(top_builddir)/libbsm/libbsm.la
man1_MANS = auditreduce.1
@@ -196,9 +196,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bin/auditreduce/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/auditreduce/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign bin/auditreduce/Makefile
+ $(AUTOMAKE) --gnu bin/auditreduce/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
==== //depot/projects/trustedbsd/openbsm/bin/praudit/Makefile.am#2 (text+ko) ====
@@ -1,8 +1,8 @@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/praudit/Makefile.am#1 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/praudit/Makefile.am#2 $
#
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
sbin_PROGRAMS = praudit
praudit_SOURCES = praudit.c
==== //depot/projects/trustedbsd/openbsm/bin/praudit/Makefile.in#5 (text+ko) ====
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $P4: //depot/projects/trustedbsd/openbsm/bin/praudit/Makefile.in#4 $
+# $P4: //depot/projects/trustedbsd/openbsm/bin/praudit/Makefile.in#5 $
#
VPATH = @srcdir@
@@ -113,6 +113,7 @@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MIG = @MIG@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -123,7 +124,6 @@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
-SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -179,7 +179,7 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
praudit_SOURCES = praudit.c
praudit_LDADD = $(top_builddir)/libbsm/libbsm.la
man1_MANS = praudit.1
@@ -196,9 +196,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bin/praudit/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/praudit/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign bin/praudit/Makefile
+ $(AUTOMAKE) --gnu bin/praudit/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
==== //depot/projects/trustedbsd/openbsm/libbsm/Makefile.am#4 (text+ko) ====
@@ -1,8 +1,8 @@
#
-# $P4: //depot/projects/trustedbsd/openbsm/libbsm/Makefile.am#3 $
+# $P4: //depot/projects/trustedbsd/openbsm/libbsm/Makefile.am#4 $
#
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
lib_LTLIBRARIES = libbsm.la
==== //depot/projects/trustedbsd/openbsm/libbsm/Makefile.in#6 (text+ko) ====
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $P4: //depot/projects/trustedbsd/openbsm/libbsm/Makefile.in#5 $
+# $P4: //depot/projects/trustedbsd/openbsm/libbsm/Makefile.in#6 $
#
VPATH = @srcdir@
@@ -129,6 +129,7 @@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MIG = @MIG@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -139,7 +140,6 @@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
-SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -195,7 +195,7 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
lib_LTLIBRARIES = libbsm.la
libbsm_la_SOURCES = bsm_audit.c bsm_class.c bsm_control.c bsm_event.c \
bsm_flags.c bsm_io.c bsm_mask.c bsm_token.c bsm_user.c \
@@ -225,9 +225,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libbsm/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libbsm/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign libbsm/Makefile
+ $(AUTOMAKE) --gnu libbsm/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
==== //depot/projects/trustedbsd/openbsm/modules/auditfilter_noop/Makefile.am#2 (text+ko) ====
@@ -1,8 +1,8 @@
#
-# $P4: //depot/projects/trustedbsd/openbsm/modules/auditfilter_noop/Makefile.am#1 $
+# $P4: //depot/projects/trustedbsd/openbsm/modules/auditfilter_noop/Makefile.am#2 $
#
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
lib_LTLIBRARIES = auditfilter_noop.la
==== //depot/projects/trustedbsd/openbsm/modules/auditfilter_noop/Makefile.in#3 (text+ko) ====
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $P4: //depot/projects/trustedbsd/openbsm/modules/auditfilter_noop/Makefile.in#2 $
+# $P4: //depot/projects/trustedbsd/openbsm/modules/auditfilter_noop/Makefile.in#3 $
#
VPATH = @srcdir@
@@ -118,6 +118,7 @@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MIG = @MIG@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -128,7 +129,6 @@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
-SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -184,7 +184,7 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
lib_LTLIBRARIES = auditfilter_noop.la
auditfilter_noop_la_SOURCE = auditfilter_noop.c
auditfilter_noop_la_LDFLAGS = -module
@@ -201,9 +201,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/auditfilter_noop/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/auditfilter_noop/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign modules/auditfilter_noop/Makefile
+ $(AUTOMAKE) --gnu modules/auditfilter_noop/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
==== //depot/projects/trustedbsd/openbsm/test/bsm/Makefile.am#2 (text+ko) ====
@@ -1,8 +1,8 @@
#
-# $P4: //depot/projects/trustedbsd/openbsm/test/bsm/Makefile.am#1 $
+# $P4: //depot/projects/trustedbsd/openbsm/test/bsm/Makefile.am#2 $
#
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
bin_PROGRAMS = generate
generate_SOURCES = generate.c
==== //depot/projects/trustedbsd/openbsm/test/bsm/Makefile.in#3 (text+ko) ====
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $P4: //depot/projects/trustedbsd/openbsm/test/bsm/Makefile.in#2 $
+# $P4: //depot/projects/trustedbsd/openbsm/test/bsm/Makefile.in#3 $
#
VPATH = @srcdir@
@@ -110,6 +110,7 @@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MIG = @MIG@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -120,7 +121,6 @@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
-SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -176,7 +176,7 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
generate_SOURCES = generate.c
generate_LDADD = $(top_builddir)/libbsm/libbsm.la
all: all-am
@@ -192,9 +192,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/bsm/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/bsm/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign test/bsm/Makefile
+ $(AUTOMAKE) --gnu test/bsm/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
==== //depot/projects/trustedbsd/openbsm/tools/Makefile.am#3 (text+ko) ====
@@ -1,8 +1,8 @@
#
-# $P4: //depot/projects/trustedbsd/openbsm/tools/Makefile.am#2 $
+# $P4: //depot/projects/trustedbsd/openbsm/tools/Makefile.am#3 $
#
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
bin_PROGRAMS = audump
audump_SOURCES = audump.c
==== //depot/projects/trustedbsd/openbsm/tools/Makefile.in#6 (text+ko) ====
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $P4: //depot/projects/trustedbsd/openbsm/tools/Makefile.in#5 $
+# $P4: //depot/projects/trustedbsd/openbsm/tools/Makefile.in#6 $
#
VPATH = @srcdir@
@@ -110,6 +110,7 @@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MIG = @MIG@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -120,7 +121,6 @@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
-SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -176,7 +176,7 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir)
+INCLUDES = -I$(top_builddir) -I$(top_srcdir)
audump_SOURCES = audump.c
audump_LDADD = $(top_builddir)/libbsm/libbsm.la
all: all-am
@@ -192,9 +192,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tools/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/Makefile
+ $(AUTOMAKE) --gnu tools/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
From hselasky at FreeBSD.org Tue Jul 1 16:49:50 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 16:49:53 2008
Subject: PERFORCE change 144427 for review
Message-ID: <200807011649.m61GnnWM045493@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144427
Change 144427 by hselasky@hselasky_laptop001 on 2008/07/01 16:48:54
Mostly USB HUB descriptor cleanup. The substitution I made
for the HUB descriptor size was incorrect. Cleanup this and
some other USB descriptor related stuff.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/controller/at91dci.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ehci2.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ehci2.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uhci2.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uhci2.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uss820dci.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#6 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_standard.h#4 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/controller/at91dci.c#3 (text+ko) ====
@@ -1830,8 +1830,8 @@
},
};
-static const struct usb2_hub_descriptor at91dci_hubd = {
- .bDescLength = sizeof(struct usb2_hub_descriptor),
+static const struct usb2_hub_descriptor_min at91dci_hubd = {
+ .bDescLength = sizeof(at91dci_hubd),
.bDescriptorType = UDESC_HUB,
.bNbrPorts = 1,
.wHubCharacteristics[0] =
==== //depot/projects/usb/src/sys/dev/usb2/controller/ehci2.c#4 (text+ko) ====
@@ -2975,35 +2975,33 @@
static const struct ehci_config_desc ehci_confd = {
.confd = {
- sizeof(struct usb2_config_descriptor),
- UDESC_CONFIG,
- {sizeof(ehci_confd), 0},
- 1,
- 1,
- 0,
- UC_SELF_POWERED,
- 0 /* max power */
+ .bLength = sizeof(struct usb2_config_descriptor),
+ .bDescriptorType = UDESC_CONFIG,
+ .wTotalLength[0] = sizeof(ehci_confd),
+ .bNumInterface = 1,
+ .bConfigurationValue = 1,
+ .iConfiguration = 0,
+ .bmAttributes = UC_SELF_POWERED,
+ .bMaxPower = 0 /* max power */
},
.ifcd = {
- sizeof(struct usb2_interface_descriptor),
- UDESC_INTERFACE,
- 0,
- 0,
- 1,
- UICLASS_HUB,
- UISUBCLASS_HUB,
- UIPROTO_HSHUBSTT,
+ .bLength = sizeof(struct usb2_interface_descriptor),
+ .bDescriptorType = UDESC_INTERFACE,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = UICLASS_HUB,
+ .bInterfaceSubClass = UISUBCLASS_HUB,
+ .bInterfaceProtocol = UIPROTO_HSHUBSTT,
0
},
.endpd = {
- sizeof(struct usb2_endpoint_descriptor),
- UDESC_ENDPOINT,
- UE_DIR_IN | EHCI_INTR_ENDPT,
- UE_INTERRUPT,
- {8, 0}, /* max packet (63 ports) */
- 255
+ .bLength = sizeof(struct usb2_endpoint_descriptor),
+ .bDescriptorType = UDESC_ENDPOINT,
+ .bEndpointAddress = UE_DIR_IN | EHCI_INTR_ENDPT,
+ .bmAttributes = UE_INTERRUPT,
+ .wMaxPacketSize[0] = 8, /* max packet (63 ports) */
+ .bInterval = 255,
},
};
@@ -3142,7 +3140,7 @@
goto done;
}
std->len = sizeof(ehci_confd);
- sc->sc_hub_desc.confd = ehci_confd;
+ std->ptr = USB_ADD_BYTES(&ehci_confd, 0);
break;
case UDESC_STRING:
==== //depot/projects/usb/src/sys/dev/usb2/controller/ehci2.h#3 (text+ko) ====
@@ -438,7 +438,6 @@
struct usb2_device_descriptor devd;
struct usb2_device_qualifier odevd;
struct usb2_hub_descriptor hubd;
- struct ehci_config_desc confd;
uint8_t temp[128];
};
==== //depot/projects/usb/src/sys/dev/usb2/controller/ohci2.c#3 (text+ko) ====
@@ -2121,35 +2121,32 @@
struct ohci_config_desc ohci_confd =
{
.confd = {
- sizeof(struct usb2_config_descriptor),
- UDESC_CONFIG,
- {sizeof(ohci_confd), 0},
- 1,
- 1,
- 0,
- UC_SELF_POWERED,
- 0 /* max power */
+ .bLength = sizeof(struct usb2_config_descriptor),
+ .bDescriptorType = UDESC_CONFIG,
+ .wTotalLength[0] = sizeof(ohci_confd),
+ .bNumInterface = 1,
+ .bConfigurationValue = 1,
+ .iConfiguration = 0,
+ .bmAttributes = UC_SELF_POWERED,
+ .bMaxPower = 0, /* max power */
},
.ifcd = {
- sizeof(struct usb2_interface_descriptor),
- UDESC_INTERFACE,
- 0,
- 0,
- 1,
- UICLASS_HUB,
- UISUBCLASS_HUB,
- UIPROTO_FSHUB,
- 0
+ .bLength = sizeof(struct usb2_interface_descriptor),
+ .bDescriptorType = UDESC_INTERFACE,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = UICLASS_HUB,
+ .bInterfaceSubClass = UISUBCLASS_HUB,
+ .bInterfaceProtocol = UIPROTO_FSHUB,
},
.endpd = {
- sizeof(struct usb2_endpoint_descriptor),
- UDESC_ENDPOINT,
- UE_DIR_IN | OHCI_INTR_ENDPT,
- UE_INTERRUPT,
- {32, 0}, /* max packet (255 ports) */
- 255
+ .bLength = sizeof(struct usb2_endpoint_descriptor),
+ .bDescriptorType = UDESC_ENDPOINT,
+ .bEndpointAddress = UE_DIR_IN | OHCI_INTR_ENDPT,
+ .bmAttributes = UE_INTERRUPT,
+ .wMaxPacketSize[0] = 32,/* max packet (255 ports) */
+ .bInterval = 255,
},
};
@@ -2259,7 +2256,7 @@
goto done;
}
std->len = sizeof(ohci_confd);
- sc->sc_hub_desc.confd = ohci_confd;
+ std->ptr = USB_ADD_BYTES(&ohci_confd, 0);
break;
case UDESC_STRING:
==== //depot/projects/usb/src/sys/dev/usb2/controller/ohci2.h#3 (text+ko) ====
@@ -311,7 +311,6 @@
struct usb2_port_status ps;
struct usb2_device_descriptor devd;
struct usb2_hub_descriptor hubd;
- struct ohci_config_desc confd;
uint8_t temp[128];
};
==== //depot/projects/usb/src/sys/dev/usb2/controller/uhci2.c#4 (text+ko) ====
@@ -2363,42 +2363,39 @@
static const struct uhci_config_desc uhci_confd = {
.confd = {
- sizeof(struct usb2_config_descriptor),
- UDESC_CONFIG,
- {sizeof(uhci_confd), 0},
- 1,
- 1,
- 0,
- UC_SELF_POWERED,
- 0 /* max power */
+ .bLength = sizeof(struct usb2_config_descriptor),
+ .bDescriptorType = UDESC_CONFIG,
+ .wTotalLength[0] = sizeof(uhci_confd),
+ .bNumInterface = 1,
+ .bConfigurationValue = 1,
+ .iConfiguration = 0,
+ .bmAttributes = UC_SELF_POWERED,
+ .bMaxPower = 0 /* max power */
},
.ifcd = {
- sizeof(struct usb2_interface_descriptor),
- UDESC_INTERFACE,
- 0,
- 0,
- 1,
- UICLASS_HUB,
- UISUBCLASS_HUB,
- UIPROTO_FSHUB,
- 0
+ .bLength = sizeof(struct usb2_interface_descriptor),
+ .bDescriptorType = UDESC_INTERFACE,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = UICLASS_HUB,
+ .bInterfaceSubClass = UISUBCLASS_HUB,
+ .bInterfaceProtocol = UIPROTO_FSHUB,
},
.endpd = {
- sizeof(struct usb2_endpoint_descriptor),
- UDESC_ENDPOINT,
- UE_DIR_IN | UHCI_INTR_ENDPT,
- UE_INTERRUPT,
- {8, 0}, /* max packet (63 ports) */
- 255
+ .bLength = sizeof(struct usb2_endpoint_descriptor),
+ .bDescriptorType = UDESC_ENDPOINT,
+ .bEndpointAddress = UE_DIR_IN | UHCI_INTR_ENDPT,
+ .bmAttributes = UE_INTERRUPT,
+ .wMaxPacketSize[0] = 8, /* max packet (63 ports) */
+ .bInterval = 255,
},
};
static const
-struct usb2_hub_descriptor uhci_hubd_piix =
+struct usb2_hub_descriptor_min uhci_hubd_piix =
{
- sizeof(struct usb2_hub_descriptor),
+ sizeof(uhci_hubd_piix),
UDESC_HUB,
2,
{UHD_PWR_NO_SWITCH | UHD_OC_INDIVIDUAL, 0},
@@ -2618,7 +2615,7 @@
goto done;
}
std->len = sizeof(uhci_confd);
- sc->sc_hub_desc.confd = uhci_confd;
+ std->ptr = USB_ADD_BYTES(&uhci_confd, 0);
break;
case UDESC_STRING:
@@ -2763,7 +2760,7 @@
goto done;
}
std->len = sizeof(uhci_hubd_piix);
- sc->sc_hub_desc.hubd = uhci_hubd_piix;
+ std->ptr = USB_ADD_BYTES(&uhci_hubd_piix, 0);
break;
case C(UR_GET_STATUS, UT_READ_CLASS_DEVICE):
std->len = 16;
==== //depot/projects/usb/src/sys/dev/usb2/controller/uhci2.h#3 (text+ko) ====
@@ -241,8 +241,6 @@
struct usb2_status stat;
struct usb2_port_status ps;
struct usb2_device_descriptor devd;
- struct usb2_hub_descriptor hubd;
- struct uhci_config_desc confd;
uint8_t temp[128];
};
==== //depot/projects/usb/src/sys/dev/usb2/controller/uss820dci.c#3 (text+ko) ====
@@ -1861,8 +1861,8 @@
},
};
-static const struct usb2_hub_descriptor uss820dci_hubd = {
- .bDescLength = sizeof(struct usb2_hub_descriptor),
+static const struct usb2_hub_descriptor_min uss820dci_hubd = {
+ .bDescLength = sizeof(uss820dci_hubd),
.bDescriptorType = UDESC_HUB,
.bNbrPorts = 1,
.wHubCharacteristics[0] =
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#6 (text+ko) ====
@@ -596,7 +596,6 @@
struct usb2_device *udev = uaa->device;
struct usb2_device *parent_hub = udev->parent_hub;
struct usb2_hub *hub;
- struct usb2_device_request req;
struct usb2_hub_descriptor hubdesc;
uint16_t pwrdly;
uint8_t x;
@@ -632,29 +631,22 @@
}
if (!udev->flags.self_powered && parent_hub &&
(!parent_hub->flags.self_powered)) {
- DPRINTF(-1, "bus powered hub connected to "
- "bus powered hub. HUB ignored!\n");
+ DPRINTF(-1, "bus powered HUB connected to "
+ "bus powered HUB. HUB ignored!\n");
goto error;
}
- /* get hub descriptor */
+ /* get HUB descriptor */
- DPRINTF(1, "getting hub descriptor\n");
+ DPRINTF(1, "getting HUB descriptor\n");
- req.bmRequestType = UT_READ_CLASS_DEVICE;
- req.bRequest = UR_GET_DESCRIPTOR;
- USETW2(req.wValue, UDESC_HUB, 0);
- USETW(req.wIndex, 0);
- USETW(req.wLength, 9); /* assuming that there is one port */
-
- err = usb2_do_request(udev, &Giant, &req, &hubdesc);
+ /* assuming that there is one port */
+ err = usb2_req_get_hub_descriptor(udev, &Giant, &hubdesc, 1);
nports = hubdesc.bNbrPorts;
if (!err && (nports >= 8)) {
- uint16_t len = 8 + ((nports + 7) / 8);
-
- USETW(req.wLength, len);
- err = usb2_do_request(udev, &Giant, &req, &hubdesc);
+ /* get complete HUB descriptor */
+ err = usb2_req_get_hub_descriptor(udev, &Giant, &hubdesc, nports);
}
if (err) {
DPRINTF(-1, "getting hub descriptor failed,"
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.c#4 (text+ko) ====
@@ -892,7 +892,7 @@
req.bRequest = UR_GET_STATUS;
USETW(req.wValue, 0);
USETW(req.wIndex, 0);
- USETW(req.wLength, sizeof(usb2_error_t));
+ USETW(req.wLength, sizeof(*st));
return (usb2_do_request(udev, mtx, &req, st));
}
@@ -905,15 +905,16 @@
*------------------------------------------------------------------------*/
usb2_error_t
usb2_req_get_hub_descriptor(struct usb2_device *udev, struct mtx *mtx,
- struct usb2_hub_descriptor *hd)
+ struct usb2_hub_descriptor *hd, uint8_t nports)
{
struct usb2_device_request req;
+ uint16_t len = (nports + 7 + (8 * 8)) / 8;
req.bmRequestType = UT_READ_CLASS_DEVICE;
req.bRequest = UR_GET_DESCRIPTOR;
- USETW(req.wValue, 0);
+ USETW2(req.wValue, UDESC_HUB, 0);
USETW(req.wIndex, 0);
- USETW(req.wLength, sizeof(*hd));
+ USETW(req.wLength, len);
return (usb2_do_request(udev, mtx, &req, hd));
}
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.h#3 (text+ko) ====
@@ -36,7 +36,7 @@
usb2_error_t usb2_req_get_desc(struct usb2_device *udev, struct mtx *mtx, void *desc, uint16_t min_len, uint16_t max_len, uint16_t id, uint8_t type, uint8_t index, uint8_t retries);
usb2_error_t usb2_req_get_device_desc(struct usb2_device *udev, struct mtx *mtx, struct usb2_device_descriptor *d);
usb2_error_t usb2_req_get_device_status(struct usb2_device *udev, struct mtx *mtx, struct usb2_status *st);
-usb2_error_t usb2_req_get_hub_descriptor(struct usb2_device *udev, struct mtx *mtx, struct usb2_hub_descriptor *hd);
+usb2_error_t usb2_req_get_hub_descriptor(struct usb2_device *udev, struct mtx *mtx, struct usb2_hub_descriptor *hd, uint8_t nports);
usb2_error_t usb2_req_get_hub_status(struct usb2_device *udev, struct mtx *mtx, struct usb2_hub_status *st);
usb2_error_t usb2_req_get_port_status(struct usb2_device *udev, struct mtx *mtx, struct usb2_port_status *ps, uint8_t port);
usb2_error_t usb2_req_get_report(struct usb2_device *udev, struct mtx *mtx, void *data, uint16_t len, uint8_t iface_index, uint8_t type, uint8_t id);
==== //depot/projects/usb/src/sys/dev/usb2/include/usb2_standard.h#4 (text+ko) ====
@@ -412,6 +412,18 @@
/* deprecated */ uByte PortPowerCtrlMask[1];
} __packed;
+/* minimum HUB descriptor (8-ports maximum) */
+struct usb2_hub_descriptor_min {
+ uByte bDescLength;
+ uByte bDescriptorType;
+ uByte bNbrPorts;
+ uWord wHubCharacteristics;
+ uByte bPwrOn2PwrGood;
+ uByte bHubContrCurrent;
+ uByte DeviceRemovable[1];
+ uByte PortPowerCtrlMask[1];
+} __packed;
+
struct usb2_device_qualifier {
uByte bLength;
uByte bDescriptorType;
From hselasky at FreeBSD.org Tue Jul 1 16:51:52 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 16:51:55 2008
Subject: PERFORCE change 144428 for review
Message-ID: <200807011651.m61GppqV045688@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144428
Change 144428 by hselasky@hselasky_laptop001 on 2008/07/01 16:51:13
Fix stopping of USB transfers. Some state stuff was
a little bit broken.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#7 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#4 (text+ko) ====
@@ -511,6 +511,7 @@
if (!sx_xlocked(udev->default_sx + 1)) {
/* the caller is not properly locked */
+ DPRINTF(-1, "not locked\n");
return (USB_ERR_NOT_LOCKED);
}
/* detach all interface drivers */
@@ -529,7 +530,6 @@
return (err);
}
/* get the full config descriptor */
-
err = usb2_req_get_config_desc_full(udev,
&Giant, &cdp, M_USB, index);
if (err) {
@@ -553,36 +553,42 @@
/* Must ask device. */
if (udev->flags.uq_power_claim) {
/*
- * Hub claims to be self powered, but isn't.
+ * HUB claims to be self powered, but isn't.
* It seems that the power status can be
- * determined by the hub characteristics.
+ * determined by the HUB characteristics.
*/
err = usb2_req_get_hub_descriptor
- (udev, &Giant, &hd);
+ (udev, &Giant, &hd, 1);
+ if (err) {
+ DPRINTF(-1, "could not read "
+ "HUB descriptor: %s\n",
+ usb2_errstr(err));
- if (!err &&
- (UGETW(hd.wHubCharacteristics) &
- UHD_PWR_INDIVIDUAL)) {
+ } else if (UGETW(hd.wHubCharacteristics) &
+ UHD_PWR_INDIVIDUAL) {
selfpowered = 1;
}
- DPRINTF(0, "characteristics=0x%04x, error=%s\n",
- UGETW(hd.wHubCharacteristics),
- usb2_errstr(err));
+ DPRINTF(0, "characteristics=0x%04x\n",
+ UGETW(hd.wHubCharacteristics));
} else {
+
+ usb2_pause_mtx(&Giant, 100);
+
err = usb2_req_get_device_status
(udev, &Giant, &ds);
-
- if (!err &&
- (UGETW(ds.wStatus) & UDS_SELF_POWERED)) {
+ if (err) {
+ DPRINTF(-1, "could not read "
+ "device status: %s\n",
+ usb2_errstr(err));
+ } else if (UGETW(ds.wStatus) & UDS_SELF_POWERED) {
selfpowered = 1;
}
- DPRINTF(0, "status=0x%04x, error=%s\n",
- UGETW(ds.wStatus), usb2_errstr(err));
+ DPRINTF(0, "status=0x%04x \n",
+ UGETW(ds.wStatus));
}
} else
selfpowered = 1;
}
-
DPRINTF(0, "udev=%p cdesc=%p (addr %d) cno=%d attr=0x%02x, "
"selfpowered=%d, power=%d\n",
udev, cdp,
@@ -612,8 +618,7 @@
udev->curr_config_index = index;
/* Set the actual configuration value. */
- err = usb2_req_set_config(udev, &Giant,
-cdp->bConfigurationValue);
+ err = usb2_req_set_config(udev, &Giant, cdp->bConfigurationValue);
if (err) {
goto error;
}
@@ -654,6 +659,7 @@
if (!sx_xlocked(udev->default_sx + 1)) {
/* the caller is not properly locked */
+ DPRINTF(-1, "not locked\n");
err = USB_ERR_NOT_LOCKED;
goto done;
}
@@ -1091,7 +1097,6 @@
if (usb2_probe_and_attach_sub(udev, &uaa)) {
/* ignore */
}
-
/* try generic interface drivers last */
uaa.use_generic = 1;
@@ -1452,7 +1457,7 @@
udev->ddesc.iSerialNumber) {
/* read out the language ID string */
err = usb2_req_get_string_desc(udev, &Giant,
- scratch_ptr, 4, sizeof(udev->bus->scratch),
+ scratch_ptr, 4, scratch_size,
USB_LANGUAGE_TABLE);
} else {
err = USB_ERR_INVAL;
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#7 (text+ko) ====
@@ -1514,14 +1514,12 @@
* Check if we can cancel the USB transfer immediately.
*/
if (xfer->flags_int.transferring) {
- if (xfer->flags_int.can_cancel_immed) {
- /*
- * The close method will be called by the
- * "usb2_callback_wrapper()" when it detects
- * that we are closed. This way we resolve
- * some races.
- */
- usb2_transfer_done(xfer, USB_ERR_CANCELLED);
+ if (xfer->flags_int.can_cancel_immed &&
+ (!xfer->flags_int.did_close)) {
+ DPRINTF(0, "close\n");
+ (xfer->pipe->methods->close) (xfer);
+ /* only close once */
+ xfer->flags_int.did_close = 1;
} else {
/* need to wait for the next done callback */
}
@@ -1530,6 +1528,11 @@
/* close here and now */
(xfer->pipe->methods->close) (xfer);
+
+ /*
+ * Any additional DMA delay is done by
+ * "usb2_transfer_unsetup()".
+ */
}
mtx_unlock(xfer->usb2_mtx);
@@ -1734,7 +1737,7 @@
if ((!xfer->flags_int.open) &&
(xfer->flags_int.started) &&
(xfer->usb2_state == USB_ST_ERROR)) {
- /* do nothing - just loop */
+ /* try to loop, but not recursivly */
usb2_command_wrapper(&(info->done_q), xfer);
return;
} else if (xfer->flags_int.draining &&
@@ -2125,14 +2128,15 @@
struct usb2_pipe *pipe;
uint32_t x;
- if (!xfer->flags_int.open &&
- !xfer->flags_int.did_close) {
+ if ((!xfer->flags_int.open) &&
+ (!xfer->flags_int.did_close)) {
DPRINTF(0, "close\n");
mtx_lock(xfer->usb2_mtx);
(xfer->pipe->methods->close) (xfer);
mtx_unlock(xfer->usb2_mtx);
/* only close once */
xfer->flags_int.did_close = 1;
+ return (1); /* wait for new callback */
}
/*
* If we have a non-hardware induced error we
@@ -2140,7 +2144,7 @@
*/
if (((xfer->error == USB_ERR_CANCELLED) ||
(xfer->error == USB_ERR_TIMEOUT)) &&
- !xfer->flags_int.did_dma_delay) {
+ (!xfer->flags_int.did_dma_delay)) {
uint32_t temp;
From hselasky at FreeBSD.org Tue Jul 1 16:51:53 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 16:51:55 2008
Subject: PERFORCE change 144429 for review
Message-ID: <200807011651.m61GppKG045693@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144429
Change 144429 by hselasky@hselasky_laptop001 on 2008/07/01 16:51:43
Result from running "usb_style.sh" ...
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#7 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#7 (text+ko) ====
@@ -349,7 +349,7 @@
struct usb2_interface *iface; /* current interface */
uint8_t usb2_mode; /* see USB_MODE_XXX */
uint8_t port;
- uint8_t use_generic; /* hint for generic drivers */
+ uint8_t use_generic; /* hint for generic drivers */
};
/* Structure used when referring an USB device */
From hselasky at FreeBSD.org Tue Jul 1 17:02:02 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 17:02:05 2008
Subject: PERFORCE change 144430 for review
Message-ID: <200807011702.m61H22mb046535@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144430
Change 144430 by hselasky@hselasky_laptop001 on 2008/07/01 17:01:14
Finished new USB quirk module. USB quirks are now in a
separate module and are loaded when needed. The quirks
can also be updated without having to restart the whole
USB stack.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/quirk/usb2_quirk.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/quirk/usb2_quirk.h#2 edit
.. //depot/projects/usb/src/sys/modules/usb2/quirk/Makefile#2 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/quirk/usb2_quirk.c#2 (text+ko) ====
@@ -1,13 +1,8 @@
-/* $NetBSD: usb_quirks.c,v 1.50 2004/06/23 02:30:52 mycroft Exp $ */
-
/*-
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
- * All rights reserved.
+ * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved.
+ * Copyright (c) 1998 Lennart Augustsson. All rights reserved.
+ * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
*
- * This code is derived from software contributed to The NetBSD Foundation
- * by Lennart Augustsson (lennart@augustsson.net) at
- * Carlstedt Research & Technology.
- *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -16,133 +11,151 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
*/
-#include
-__FBSDID("$FreeBSD: src/sys/dev/usb/usb_quirks.c,v 1.65 2008/03/14 15:59:30 jkim Exp $");
+#include
+#include
+
+#define USB_DEBUG_VAR usb2_debug
+
+#include
+#include
+#include
+#include
-#include
-#include
+#include
-#include
-#include
-#include
+MODULE_DEPEND(usb2_quirk, usb2_core, 1, 1, 1);
+MODULE_VERSION(usb2_quirk, 1);
-#include "usbdevs.h"
+/*
+ * The following macro adds a quirk for any revision of a device:
+ */
+#define USB_VPA(v,p,r,...) \
+ USB_VPI(v,p,((const uint16_t []){__VA_ARGS__}))
-#define ANY 0xffff
+/*
+ * The following macro adds a quirk for a specific revision of a
+ * device:
+ */
+#define USB_VPR(v,p,r,...) \
+ USB_VPI(v,p, ((const uint16_t []){__VA_ARGS__})), \
+ USB_DEV_BCD_LTEQ(r), \
+ USB_DEV_BCD_GTEQ(r)
-struct usbd_quirk_entry {
- uint16_t idVendor;
- uint16_t idProduct;
- uint16_t bcdDevice;
- struct usbd_quirks quirks;
-};
+/* try to keep the quirks on one line, hence grepping becomes easier */
-static const struct usbd_quirk_entry usb_quirks[] = {
- {USB_VENDOR_ASUS, USB_PRODUCT_ASUS_LCM, ANY, {UQ_HID_IGNORE}},
- {USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4,
- 0x094, {UQ_SWAP_UNICODE}},
- {USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502, 0x0a2, {UQ_BAD_ADC}},
- {USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502, 0x0a2, {UQ_AU_NO_XU}},
- {USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ADA70, 0x103, {UQ_BAD_ADC}},
- {USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ASC495, 0x000, {UQ_BAD_AUDIO}},
- {USB_VENDOR_QTRONIX, USB_PRODUCT_QTRONIX_980N, 0x110, {UQ_SPUR_BUT_UP}},
- {USB_VENDOR_ALCOR2, USB_PRODUCT_ALCOR2_KBD_HUB, 0x001, {UQ_SPUR_BUT_UP}},
- {USB_VENDOR_MCT, USB_PRODUCT_MCT_HUB0100, 0x102, {UQ_BUS_POWERED}},
- {USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232, 0x102, {UQ_BUS_POWERED}},
- {USB_VENDOR_TI, USB_PRODUCT_TI_UTUSB41, 0x110, {UQ_POWER_CLAIM}},
- {USB_VENDOR_TELEX, USB_PRODUCT_TELEX_MIC1, 0x009, {UQ_AU_NO_FRAC}},
- {USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPHONE,
- 0x100, {UQ_AU_INP_ASYNC}},
- {USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_UN53B, ANY, {UQ_NO_STRINGS}},
+static const struct usb2_device_id usb2_quirks[] = {
+ {USB_VPA(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_LCM, 0x000, UQ_HID_IGNORE, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4, 0x094, UQ_SWAP_UNICODE, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502, 0x0a2, UQ_BAD_ADC, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502, 0x0a2, UQ_AU_NO_XU, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ADA70, 0x103, UQ_BAD_ADC, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ASC495, 0x000, UQ_BAD_AUDIO, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_QTRONIX, USB_PRODUCT_QTRONIX_980N, 0x110, UQ_SPUR_BUT_UP, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_ALCOR2, USB_PRODUCT_ALCOR2_KBD_HUB, 0x001, UQ_SPUR_BUT_UP, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_MCT, USB_PRODUCT_MCT_HUB0100, 0x102, UQ_BUS_POWERED, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232, 0x102, UQ_BUS_POWERED, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_TI, USB_PRODUCT_TI_UTUSB41, 0x110, UQ_POWER_CLAIM, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_TELEX, USB_PRODUCT_TELEX_MIC1, 0x009, UQ_AU_NO_FRAC, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPHONE, 0x100, UQ_AU_INP_ASYNC, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_UN53B, 0x000, UQ_NO_STRINGS, UQ_NONE)},
/*
* XXX These should have a revision number, but I don't know what
* they are.
*/
- {USB_VENDOR_HP, USB_PRODUCT_HP_895C, ANY, {UQ_BROKEN_BIDIR}},
- {USB_VENDOR_HP, USB_PRODUCT_HP_880C, ANY, {UQ_BROKEN_BIDIR}},
- {USB_VENDOR_HP, USB_PRODUCT_HP_815C, ANY, {UQ_BROKEN_BIDIR}},
- {USB_VENDOR_HP, USB_PRODUCT_HP_810C, ANY, {UQ_BROKEN_BIDIR}},
- {USB_VENDOR_HP, USB_PRODUCT_HP_830C, ANY, {UQ_BROKEN_BIDIR}},
- {USB_VENDOR_HP, USB_PRODUCT_HP_1220C, ANY, {UQ_BROKEN_BIDIR}},
- {USB_VENDOR_XEROX, USB_PRODUCT_XEROX_WCM15, ANY, {UQ_BROKEN_BIDIR}},
+ {USB_VPA(USB_VENDOR_HP, USB_PRODUCT_HP_895C, 0x000, UQ_BROKEN_BIDIR, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_HP, USB_PRODUCT_HP_880C, 0x000, UQ_BROKEN_BIDIR, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_HP, USB_PRODUCT_HP_815C, 0x000, UQ_BROKEN_BIDIR, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_HP, USB_PRODUCT_HP_810C, 0x000, UQ_BROKEN_BIDIR, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_HP, USB_PRODUCT_HP_830C, 0x000, UQ_BROKEN_BIDIR, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_HP, USB_PRODUCT_HP_1220C, 0x000, UQ_BROKEN_BIDIR, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_XEROX, USB_PRODUCT_XEROX_WCM15, 0x000, UQ_BROKEN_BIDIR, UQ_NONE)},
/* Devices which should be ignored by uhid */
- {USB_VENDOR_APC, USB_PRODUCT_APC_UPS,
- ANY, {UQ_HID_IGNORE}},
- {USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C550AVR,
- ANY, {UQ_HID_IGNORE}},
- {USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EARTHMATE,
- ANY, {UQ_HID_IGNORE}},
- {USB_VENDOR_ITUNERNET, USB_PRODUCT_ITUNERNET_USBLCD2X20,
- ANY, {UQ_HID_IGNORE}},
- {USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS1,
- ANY, {UQ_HID_IGNORE}},
- {USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS2,
- ANY, {UQ_HID_IGNORE}},
+ {USB_VPA(USB_VENDOR_APC, USB_PRODUCT_APC_UPS, 0x000, UQ_HID_IGNORE, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C550AVR, 0x000, UQ_HID_IGNORE, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EARTHMATE, 0x000, UQ_HID_IGNORE, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_ITUNERNET, USB_PRODUCT_ITUNERNET_USBLCD2X20, 0x000, UQ_HID_IGNORE, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS1, 0x000, UQ_HID_IGNORE, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS2, 0x000, UQ_HID_IGNORE, UQ_NONE)},
/* Devices which should be ignored by both ukbd and uhid */
- {USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_WISPY1A,
- ANY, {UQ_KBD_IGNORE}},
- {USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY1B,
- ANY, {UQ_KBD_IGNORE}},
- {USB_VENDOR_TENX, USB_PRODUCT_TENX_UAUDIO0,
- 0x0101, {UQ_AUDIO_SWAP_LR}},
+ {USB_VPA(USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_WISPY1A, 0x000, UQ_KBD_IGNORE, UQ_HID_IGNORE, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY1B, 0x000, UQ_KBD_IGNORE, UQ_HID_IGNORE, UQ_NONE)},
+ {USB_VPR(USB_VENDOR_TENX, USB_PRODUCT_TENX_UAUDIO0, 0x0101, UQ_AUDIO_SWAP_LR, UQ_NONE)},
/* MS keyboards do weird things */
- {USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK,
- ANY, {UQ_MS_BAD_CLASS | UQ_MS_LEADING_BYTE}},
- {USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK2,
- ANY, {UQ_MS_BAD_CLASS | UQ_MS_LEADING_BYTE}},
- {USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLINTELLIMOUSE,
- ANY, {UQ_MS_LEADING_BYTE}},
+ {USB_VPA(USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK, 0x000, UQ_MS_BAD_CLASS, UQ_MS_LEADING_BYTE, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK2, 0x000, UQ_MS_BAD_CLASS, UQ_MS_LEADING_BYTE, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLINTELLIMOUSE, 0x000, UQ_MS_LEADING_BYTE, UQ_NONE)},
+ {USB_VPA(USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY24X, 0x000, UQ_KBD_IGNORE, UQ_HID_IGNORE, UQ_NONE)},
+};
- {USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY24X,
- ANY, {UQ_KBD_IGNORE}},
+USB_MAKE_DEBUG_TABLE(USB_QUIRK);
- {0, 0, 0, {0}}
-};
+/*------------------------------------------------------------------------*
+ * usb2_quirkstr
+ *
+ * This function converts an USB quirk code into a string.
+ *------------------------------------------------------------------------*/
+static const char *
+usb2_quirkstr(uint16_t quirk)
+{
+ return ((quirk < USB_QUIRK_MAX) ?
+ USB_QUIRK[quirk] : "USB_QUIRK_UNKNOWN");
+}
-const struct usbd_quirks usbd_no_quirk = {0};
-
-const struct usbd_quirks *
-usbd_find_quirk(usb_device_descriptor_t *d)
+/*------------------------------------------------------------------------*
+ * usb2_test_quirk_by_info
+ *
+ * Returns:
+ * 0: Quirk not found
+ * Else: Quirk found
+ *------------------------------------------------------------------------*/
+static uint8_t
+usb2_test_quirk_by_info(const struct usb2_lookup_info *info, uint16_t quirk)
{
- const struct usbd_quirk_entry *t;
- uint16_t vendor = UGETW(d->idVendor);
- uint16_t product = UGETW(d->idProduct);
- uint16_t revision = UGETW(d->bcdDevice);
+ const struct usb2_device_id *pe;
+ const uint16_t *px;
- for (t = usb_quirks; t->idVendor != 0; t++) {
- if (t->idVendor == vendor &&
- t->idProduct == product &&
- (t->bcdDevice == ANY || t->bcdDevice == revision))
- break;
+ if (quirk == UQ_NONE) {
+ return (0);
}
-#ifdef USB_DEBUG
- if (usbdebug && t->quirks.uq_flags) {
- printf("usbd_find_quirk 0x%04x/0x%04x/%x: %d\n",
- UGETW(d->idVendor), UGETW(d->idProduct),
- UGETW(d->bcdDevice), t->quirks.uq_flags);
+ pe = usb2_lookup_id_by_info(usb2_quirks, sizeof(usb2_quirks), info);
+ if (pe && pe->driver_info) {
+ px = pe->driver_info;
+ while (1) {
+ if (*px == quirk) {
+ DPRINTF(0, "Found quirk '%s'.\n", usb2_quirkstr(quirk));
+ return (1);
+ }
+ if (*px == UQ_NONE) {
+ return (0);
+ }
+ px++;
+ }
}
-#endif
- return (&t->quirks);
+ return (0);
+}
+
+static void
+usb2_quirk_init(void *arg)
+{
+ /* register our function */
+ usb2_test_quirk_p = &usb2_test_quirk_by_info;
+ return;
}
+
+SYSINIT(usb2_quirk_init, SI_SUB_LOCK, SI_ORDER_FIRST, usb2_quirk_init, NULL);
+SYSUNINIT(usb2_quirk_unload, SI_SUB_LOCK, SI_ORDER_ANY, usb2_quirk_unload, NULL);
==== //depot/projects/usb/src/sys/dev/usb2/quirk/usb2_quirk.h#2 (text+ko) ====
@@ -1,13 +1,5 @@
-/* $NetBSD: usb_quirks.h,v 1.20 2001/04/15 09:38:01 augustss Exp $ */
-/* $FreeBSD: src/sys/dev/usb/usb_quirks.h,v 1.25 2007/06/29 21:07:41 imp Exp $ */
-
/*-
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Lennart Augustsson (lennart@augustsson.net) at
- * Carlstedt Research & Technology.
+ * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -17,57 +9,72 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
*/
-struct usbd_quirks {
- uint32_t uq_flags; /* Device problems: */
-#define UQ_AUDIO_SWAP_LR (1 << 0) /* left and right sound channels are
- * swapped */
-#define UQ_AU_INP_ASYNC (1 << 1) /* input is async despite claim of
- * adaptive */
-#define UQ_AU_NO_FRAC (1 << 2) /* don't adjust for fractional samples */
-#define UQ_AU_NO_XU (1 << 3) /* audio device has broken extension
- * unit */
-#define UQ_BAD_ADC (1 << 4) /* bad audio spec version number */
-#define UQ_BAD_AUDIO (1 << 5) /* device claims audio class, but
- * isn't */
-#define UQ_BROKEN_BIDIR (1 << 6) /* printer has broken bidir mode */
-#define UQ_BUS_POWERED (1 << 7) /* device is bus powered, despite
- * claim */
-#define UQ_HID_IGNORE (1 << 8) /* device should be ignored by hid
- * class */
-#define UQ_KBD_IGNORE ((1 << 9)|UQ_HID_IGNORE) /* device should be
- * ignored by both kbd
- * and hid class */
-#define UQ_MS_BAD_CLASS (1 << 10) /* doesn't identify properly */
-#define UQ_MS_LEADING_BYTE (1 << 11) /* mouse sends an unknown leading byte */
-#define UQ_MS_REVZ (1 << 12) /* mouse has Z-axis reversed */
-#define UQ_NO_STRINGS (1 << 13) /* string descriptors are broken */
-#define UQ_OPEN_CLEARSTALL (1 << 14) /* device needs clear endpoint stall */
-#define UQ_POWER_CLAIM (1 << 15) /* hub lies about power status */
-#define UQ_SPUR_BUT_UP (1 << 16) /* spurious mouse button up events */
-#define UQ_SWAP_UNICODE (1 << 17) /* has some Unicode strings swapped */
-};
+#ifndef _USB2_QUIRK_H_
+#define _USB2_QUIRK_H_
+
+/* NOTE: UQ_NONE is not a valid quirk */
+
+#define USB_QUIRK(m,n) \
+ m(n, UQ_NONE) \
+ /* left and right sound channels are swapped */ \
+ m(n, UQ_AUDIO_SWAP_LR) \
+ /* input is async despite claim of adaptive */ \
+ m(n, UQ_AU_INP_ASYNC) \
+ /* don't adjust for fractional samples */ \
+ m(n, UQ_AU_NO_FRAC) \
+ /* audio device has broken extension unit */ \
+ m(n, UQ_AU_NO_XU) \
+ /* bad audio spec version number */ \
+ m(n, UQ_BAD_ADC) \
+ /* device claims audio class, but isn't */ \
+ m(n, UQ_BAD_AUDIO) \
+ /* printer has broken bidir mode */ \
+ m(n, UQ_BROKEN_BIDIR) \
+ /* device is bus powered, despite claim */ \
+ m(n, UQ_BUS_POWERED) \
+ /* device should be ignored by hid class */ \
+ m(n, UQ_HID_IGNORE) \
+ /* device should be ignored by kbd class */ \
+ m(n, UQ_KBD_IGNORE) \
+ /* doesn't identify properly */ \
+ m(n, UQ_MS_BAD_CLASS) \
+ /* mouse sends an unknown leading byte */ \
+ m(n, UQ_MS_LEADING_BYTE) \
+ /* mouse has Z-axis reversed */ \
+ m(n, UQ_MS_REVZ) \
+ /* string descriptors are broken */ \
+ m(n, UQ_NO_STRINGS) \
+ /* device needs clear endpoint stall */ \
+ m(n, UQ_OPEN_CLEARSTALL) \
+ /* hub lies about power status */ \
+ m(n, UQ_POWER_CLAIM) \
+ /* spurious mouse button up events */ \
+ m(n, UQ_SPUR_BUT_UP) \
+ /* has some Unicode strings swapped */ \
+ m(n, UQ_SWAP_UNICODE) \
+ /* select configuration index 1 by default */ \
+ m(n, UQ_CFG_INDEX_1) \
+ /* select configuration index 2 by default */ \
+ m(n, UQ_CFG_INDEX_2) \
+ /* select configuration index 3 by default */ \
+ m(n, UQ_CFG_INDEX_3) \
+ /* select configuration index 4 by default */ \
+ m(n, UQ_CFG_INDEX_4)
-extern const struct usbd_quirks usbd_no_quirk;
+USB_MAKE_ENUM(USB_QUIRK);
-const struct usbd_quirks *usbd_find_quirk(usb_device_descriptor_t *);
+#endif /* _USB2_QUIRK_H_ */
==== //depot/projects/usb/src/sys/modules/usb2/quirk/Makefile#2 (text+ko) ====
@@ -1,0 +1,10 @@
+S= ${.CURDIR}/../../..
+
+.PATH: $S/dev/usb2/quirk
+
+KMOD= usb2_quirk
+SRCS=
+SRCS+= bus_if.h usb2_if.h device_if.h vnode_if.h opt_usb.h opt_bus.h
+SRCS+= usb2_quirk.c
+
+.include
From rwatson at FreeBSD.org Tue Jul 1 17:31:39 2008
From: rwatson at FreeBSD.org (Robert Watson)
Date: Tue Jul 1 17:31:41 2008
Subject: PERFORCE change 144434 for review
Message-ID: <200807011731.m61HVciq050276@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144434
Change 144434 by rwatson@rwatson_fledge on 2008/07/01 17:30:44
Update Apple copyrights for recent Mac OS X changes.
Affected files ...
.. //depot/projects/trustedbsd/openbsm/bin/audit/audit.c#10 edit
.. //depot/projects/trustedbsd/openbsm/bin/auditd/auditd.c#31 edit
Differences ...
==== //depot/projects/trustedbsd/openbsm/bin/audit/audit.c#10 (text+ko) ====
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005 Apple Computer, Inc.
+ * Copyright (c) 2005-2008 Apple Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -11,7 +11,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $P4: //depot/projects/trustedbsd/openbsm/bin/audit/audit.c#9 $
+ * $P4: //depot/projects/trustedbsd/openbsm/bin/audit/audit.c#10 $
*/
/*
* Program to trigger the audit daemon with a message that is either:
==== //depot/projects/trustedbsd/openbsm/bin/auditd/auditd.c#31 (text+ko) ====
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004 Apple Computer, Inc.
+ * Copyright (c) 2004-2008 Apple Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -11,7 +11,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $P4: //depot/projects/trustedbsd/openbsm/bin/auditd/auditd.c#30 $
+ * $P4: //depot/projects/trustedbsd/openbsm/bin/auditd/auditd.c#31 $
*/
#include
From hselasky at FreeBSD.org Tue Jul 1 17:38:47 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 17:38:53 2008
Subject: PERFORCE change 144435 for review
Message-ID: <200807011738.m61HckWA051141@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144435
Change 144435 by hselasky@hselasky_laptop001 on 2008/07/01 17:38:36
New USB template modules is finished.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/template/usb2_template.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/template/usb2_template.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/template/usb2_template_cdce.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/template/usb2_template_msc.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/template/usb2_template_mtp.c#2 edit
.. //depot/projects/usb/src/sys/modules/usb2/template/Makefile#2 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/template/usb2_template.c#2 (text+ko) ====
@@ -1,9 +1,5 @@
-#include
-__FBSDID("$FreeBSD: src/sys/dev/usb/usb_template.c $");
-
/*-
- * Copyright (c) 2007 Hans Petter Selasky
- * All rights reserved.
+ * Copyright (c) 2007 Hans Petter Selasky. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -32,28 +28,62 @@
* USB templates.
*/
-#include
-#include
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define USB_DEBUG_VAR usb2_debug
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+
+MODULE_DEPEND(usb2_template, usb2_core, 1, 1, 1);
+MODULE_VERSION(usb2_template, 1);
+
+/* function prototypes */
-#include
-#include
-#include
-#include
-#include
+static void usb2_make_raw_desc(struct usb2_temp_setup *temp, const uint8_t *raw);
+static void usb2_make_endpoint_desc(struct usb2_temp_setup *temp, const struct usb2_temp_endpoint_desc *ted);
+static void usb2_make_interface_desc(struct usb2_temp_setup *temp, const struct usb2_temp_interface_desc *tid);
+static void usb2_make_config_desc(struct usb2_temp_setup *temp, const struct usb2_temp_config_desc *tcd);
+static void usb2_make_device_desc(struct usb2_temp_setup *temp, const struct usb2_temp_device_desc *tdd);
+static uint8_t usb2_hw_ep_match(const struct usb2_hw_ep_profile *pf, uint8_t ep_type, uint8_t ep_dir_in);
+static uint8_t usb2_hw_ep_find_match(struct usb2_hw_ep_scratch *ues, struct usb2_hw_ep_scratch_sub *ep, uint8_t is_simplex);
+static uint8_t usb2_hw_ep_get_needs(struct usb2_hw_ep_scratch *ues, uint8_t ep_type, uint8_t is_complete);
+static usb2_error_t usb2_hw_ep_resolve(struct usb2_device *udev, struct usb2_descriptor *desc);
+static const struct usb2_temp_device_desc *usb2_temp_get_tdd(struct usb2_device *udev);
+static void *usb2_temp_get_device_desc(struct usb2_device *udev);
+static void *usb2_temp_get_qualifier_desc(struct usb2_device *udev);
+static void *usb2_temp_get_config_desc(struct usb2_device *udev, uint16_t *pLength, uint8_t index);
+static const void *usb2_temp_get_string_desc(struct usb2_device *udev, uint16_t lang_id, uint8_t string_index);
+static const void *usb2_temp_get_hub_desc(struct usb2_device *udev);
+static void usb2_temp_get_desc(struct usb2_device *udev, struct usb2_device_request *req, const void **pPtr, uint16_t *pLength);
+static usb2_error_t usb2_temp_setup(struct usb2_device *udev, const struct usb2_temp_device_desc *tdd);
+static void usb2_temp_unsetup(struct usb2_device *udev);
+static usb2_error_t usb2_temp_setup_by_index(struct usb2_device *udev, uint16_t index);
+static void usb2_temp_init(void *arg);
/*------------------------------------------------------------------------*
- * usbd_make_raw_desc
+ * usb2_make_raw_desc
*
* This function will insert a raw USB descriptor into the generated
* USB configuration.
*------------------------------------------------------------------------*/
static void
-usbd_make_raw_desc(struct usbd_temp_setup *temp,
+usb2_make_raw_desc(struct usb2_temp_setup *temp,
const uint8_t *raw)
{
void *dst;
@@ -65,15 +95,15 @@
if (raw) {
len = raw[0];
if (temp->buf) {
- dst = USBD_ADD_BYTES(temp->buf, temp->size);
+ dst = USB_ADD_BYTES(temp->buf, temp->size);
bcopy(raw, dst, len);
/* check if we have got a CDC union descriptor */
- if ((raw[0] >= sizeof(usb_cdc_union_descriptor_t)) &&
+ if ((raw[0] >= sizeof(struct usb2_cdc_union_descriptor)) &&
(raw[1] == UDESC_CS_INTERFACE) &&
(raw[2] == UDESCSUB_CDC_UNION)) {
- usb_cdc_union_descriptor_t *ud = (void *)dst;
+ struct usb2_cdc_union_descriptor *ud = (void *)dst;
/* update the interface numbers */
@@ -89,17 +119,17 @@
}
/*------------------------------------------------------------------------*
- * usbd_make_endpoint_desc
+ * usb2_make_endpoint_desc
*
* This function will generate an USB endpoint descriptor from the
* given USB template endpoint descriptor, which will be inserted into
* the USB configuration.
*------------------------------------------------------------------------*/
static void
-usbd_make_endpoint_desc(struct usbd_temp_setup *temp,
- const struct usb_temp_endpoint_desc *ted)
+usb2_make_endpoint_desc(struct usb2_temp_setup *temp,
+ const struct usb2_temp_endpoint_desc *ted)
{
- usb_endpoint_descriptor_t *ed;
+ struct usb2_endpoint_descriptor *ed;
const void **rd;
uint16_t old_size;
uint16_t mps;
@@ -115,19 +145,19 @@
rd = ted->ppRawDesc;
if (rd) {
while (*rd) {
- usbd_make_raw_desc(temp, *rd);
+ usb2_make_raw_desc(temp, *rd);
rd++;
}
}
if (ted->pPacketSize == NULL) {
/* not initialized */
- temp->err = USBD_ERR_INVAL;
+ temp->err = USB_ERR_INVAL;
return;
}
- mps = ted->pPacketSize->mps[temp->usb_speed];
+ mps = ted->pPacketSize->mps[temp->usb2_speed];
if (mps == 0) {
/* not initialized */
- temp->err = USBD_ERR_INVAL;
+ temp->err = USB_ERR_INVAL;
return;
} else if (mps == UE_ZERO_MPS) {
/* escape for Zero Max Packet Size */
@@ -141,7 +171,7 @@
* in case there is a buffer present:
*/
if (temp->buf) {
- ed = USBD_ADD_BYTES(temp->buf, old_size);
+ ed = USB_ADD_BYTES(temp->buf, old_size);
ed->bLength = sizeof(*ed);
ed->bDescriptorType = UDESC_ENDPOINT;
ed->bEndpointAddress = ea;
@@ -151,9 +181,9 @@
/* setup bInterval parameter */
if (ted->pIntervals &&
- ted->pIntervals->bInterval[temp->usb_speed]) {
+ ted->pIntervals->bInterval[temp->usb2_speed]) {
ed->bInterval =
- ted->pIntervals->bInterval[temp->usb_speed];
+ ted->pIntervals->bInterval[temp->usb2_speed];
} else {
switch (et) {
case UE_BULK:
@@ -161,7 +191,7 @@
ed->bInterval = 0; /* not used */
break;
case UE_INTERRUPT:
- switch (temp->usb_speed) {
+ switch (temp->usb2_speed) {
case USB_SPEED_LOW:
case USB_SPEED_FULL:
ed->bInterval = 1; /* 1 ms */
@@ -172,7 +202,7 @@
}
break;
default: /* UE_ISOCHRONOUS */
- switch (temp->usb_speed) {
+ switch (temp->usb2_speed) {
case USB_SPEED_LOW:
case USB_SPEED_FULL:
ed->bInterval = 1; /* 1 ms */
@@ -190,18 +220,18 @@
}
/*------------------------------------------------------------------------*
- * usbd_make_interface_desc
+ * usb2_make_interface_desc
*
* This function will generate an USB interface descriptor from the
* given USB template interface descriptor, which will be inserted
* into the USB configuration.
*------------------------------------------------------------------------*/
static void
-usbd_make_interface_desc(struct usbd_temp_setup *temp,
- const struct usb_temp_interface_desc *tid)
+usb2_make_interface_desc(struct usb2_temp_setup *temp,
+ const struct usb2_temp_interface_desc *tid)
{
- usb_interface_descriptor_t *id;
- const struct usb_temp_endpoint_desc **ted;
+ struct usb2_interface_descriptor *id;
+ const struct usb2_temp_endpoint_desc **ted;
const void **rd;
uint16_t old_size;
@@ -225,7 +255,7 @@
if (rd) {
while (*rd) {
- usbd_make_raw_desc(temp, *rd);
+ usb2_make_raw_desc(temp, *rd);
rd++;
}
}
@@ -238,7 +268,7 @@
ted = tid->ppEndpoints;
if (ted) {
while (*ted) {
- usbd_make_endpoint_desc(temp, *ted);
+ usb2_make_endpoint_desc(temp, *ted);
ted++;
}
}
@@ -247,7 +277,7 @@
* in case there is a buffer present:
*/
if (temp->buf) {
- id = USBD_ADD_BYTES(temp->buf, old_size);
+ id = USB_ADD_BYTES(temp->buf, old_size);
id->bLength = sizeof(*id);
id->bDescriptorType = UDESC_INTERFACE;
id->bInterfaceNumber = temp->bInterfaceNumber;
@@ -262,18 +292,18 @@
}
/*------------------------------------------------------------------------*
- * usbd_make_config_desc
+ * usb2_make_config_desc
*
* This function will generate an USB config descriptor from the given
* USB template config descriptor, which will be inserted into the USB
* configuration.
*------------------------------------------------------------------------*/
static void
-usbd_make_config_desc(struct usbd_temp_setup *temp,
- const struct usb_temp_config_desc *tcd)
+usb2_make_config_desc(struct usb2_temp_setup *temp,
+ const struct usb2_temp_config_desc *tcd)
{
- usb_config_descriptor_t *cd;
- const struct usb_temp_interface_desc **tid;
+ struct usb2_config_descriptor *cd;
+ const struct usb2_temp_interface_desc **tid;
uint16_t old_size;
/* Reserve memory */
@@ -291,7 +321,7 @@
tid = tcd->ppIfaceDesc;
if (tid) {
while (*tid) {
- usbd_make_interface_desc(temp, *tid);
+ usb2_make_interface_desc(temp, *tid);
tid++;
}
}
@@ -300,7 +330,7 @@
* in case there is a buffer present:
*/
if (temp->buf) {
- cd = USBD_ADD_BYTES(temp->buf, old_size);
+ cd = USB_ADD_BYTES(temp->buf, old_size);
/* compute total size */
old_size = temp->size - old_size;
@@ -325,17 +355,17 @@
}
/*------------------------------------------------------------------------*
- * usbd_make_device_desc
+ * usb2_make_device_desc
*
* This function will generate an USB device descriptor from the
* given USB template device descriptor.
*------------------------------------------------------------------------*/
static void
-usbd_make_device_desc(struct usbd_temp_setup *temp,
- const struct usb_temp_device_desc *tdd)
+usb2_make_device_desc(struct usb2_temp_setup *temp,
+ const struct usb2_temp_device_desc *tdd)
{
- struct usb_temp_data *utd;
- const struct usb_temp_config_desc **tcd;
+ struct usb2_temp_data *utd;
+ const struct usb2_temp_config_desc **tcd;
uint16_t old_size;
/* Reserve memory */
@@ -349,7 +379,7 @@
tcd = tdd->ppConfigDesc;
if (tcd) {
while (*tcd) {
- usbd_make_config_desc(temp, *tcd);
+ usb2_make_config_desc(temp, *tcd);
temp->bConfigurationValue++;
tcd++;
}
@@ -360,7 +390,7 @@
*/
if (temp->buf) {
- utd = USBD_ADD_BYTES(temp->buf, old_size);
+ utd = USB_ADD_BYTES(temp->buf, old_size);
/* Store a pointer to our template device descriptor */
utd->tdd = tdd;
@@ -395,7 +425,7 @@
USETW(utd->udq.bcdUSB, 0x0200);
utd->udq.bMaxPacketSize0 = 0;
- switch (temp->usb_speed) {
+ switch (temp->usb2_speed) {
case USB_SPEED_LOW:
USETW(utd->udd.bcdUSB, 0x0110);
utd->udd.bMaxPacketSize = 8;
@@ -413,7 +443,7 @@
utd->udd.bMaxPacketSize = 255; /* 512 bytes */
break;
default:
- temp->err = USBD_ERR_INVAL;
+ temp->err = USB_ERR_INVAL;
break;
}
}
@@ -421,14 +451,14 @@
}
/*------------------------------------------------------------------------*
- * usbd_hw_ep_match
+ * usb2_hw_ep_match
*
* Return values:
* 0: The endpoint profile does not match the criterias
* Else: The endpoint profile matches the criterias
*------------------------------------------------------------------------*/
static uint8_t
-usbd_hw_ep_match(const struct usbd_hw_ep_profile *pf,
+usb2_hw_ep_match(const struct usb2_hw_ep_profile *pf,
uint8_t ep_type, uint8_t ep_dir_in)
{
if (ep_type == UE_CONTROL) {
@@ -447,7 +477,7 @@
}
/*------------------------------------------------------------------------*
- * usbd_hw_ep_find_match
+ * usb2_hw_ep_find_match
*
* This function is used to find the best matching endpoint profile
* for and endpoint belonging to an USB descriptor.
@@ -457,10 +487,10 @@
* Else: Failure. No match.
*------------------------------------------------------------------------*/
static uint8_t
-usbd_hw_ep_find_match(struct usbd_hw_ep_scratch *ues,
- struct usbd_sw_ep_scratch *ep, uint8_t is_simplex)
+usb2_hw_ep_find_match(struct usb2_hw_ep_scratch *ues,
+ struct usb2_hw_ep_scratch_sub *ep, uint8_t is_simplex)
{
- const struct usbd_hw_ep_profile *pf;
+ const struct usb2_hw_ep_profile *pf;
uint16_t distance;
uint16_t temp;
uint8_t n;
@@ -486,7 +516,7 @@
}
}
- for (n = 1; n != (USB_MAX_ENDPOINTS / 2); n++) {
+ for (n = 1; n != (USB_EP_MAX / 2); n++) {
/* check if IN-endpoint is reserved */
if (dir_in) {
@@ -514,7 +544,7 @@
continue;
}
/* check if HW endpoint matches */
- if (!usbd_hw_ep_match(pf, ep->needs_ep_type, dir_in)) {
+ if (!usb2_hw_ep_match(pf, ep->needs_ep_type, dir_in)) {
/* mismatch */
continue;
}
@@ -568,7 +598,7 @@
}
/*------------------------------------------------------------------------*
- * usbd_hw_ep_get_needs
+ * usb2_hw_ep_get_needs
*
* This function will figure out the type and number of endpoints
* which are needed for an USB configuration.
@@ -578,16 +608,16 @@
* Else: Failure.
*------------------------------------------------------------------------*/
static uint8_t
-usbd_hw_ep_get_needs(struct usbd_hw_ep_scratch *ues,
+usb2_hw_ep_get_needs(struct usb2_hw_ep_scratch *ues,
uint8_t ep_type, uint8_t is_complete)
{
- struct usbd_sw_ep_scratch *ep_iface;
- struct usbd_sw_ep_scratch *ep_curr;
- struct usbd_sw_ep_scratch *ep_max;
- struct usbd_sw_ep_scratch *ep_end;
- usb_descriptor_t *desc;
- usb_interface_descriptor_t *id;
- usb_endpoint_descriptor_t *ed;
+ struct usb2_hw_ep_scratch_sub *ep_iface;
+ struct usb2_hw_ep_scratch_sub *ep_curr;
+ struct usb2_hw_ep_scratch_sub *ep_max;
+ struct usb2_hw_ep_scratch_sub *ep_end;
+ struct usb2_descriptor *desc;
+ struct usb2_interface_descriptor *id;
+ struct usb2_endpoint_descriptor *ed;
uint16_t wMaxPacketSize;
uint16_t temp;
uint8_t allow_override;
@@ -595,14 +625,14 @@
ep_iface = ues->ep_max;
ep_curr = ues->ep_max;
- ep_end = ues->ep + USB_MAX_ENDPOINTS;
+ ep_end = ues->ep + USB_EP_MAX;
ep_max = ues->ep_max;
desc = NULL;
- speed = ues->udev->speed;
+ speed = usb2_get_speed(ues->udev);
repeat:
- while ((desc = usbd_desc_foreach(ues->cd, desc))) {
+ while ((desc = usb2_desc_foreach(ues->cd, desc))) {
if ((desc->bDescriptorType == UDESC_INTERFACE) &&
(desc->bLength >= sizeof(*id))) {
@@ -726,7 +756,7 @@
}
/*------------------------------------------------------------------------*
- * usbd_hw_ep_resolve
+ * usb2_hw_ep_resolve
*
* This function will try to resolve endpoint requirements by the
* given endpoint profiles that the USB hardware reports.
@@ -735,42 +765,42 @@
* 0: Success
* Else: Failure
*------------------------------------------------------------------------*/
-static usbd_status_t
-usbd_hw_ep_resolve(struct usbd_device *udev,
- usb_descriptor_t *desc)
+static usb2_error_t
+usb2_hw_ep_resolve(struct usb2_device *udev,
+ struct usb2_descriptor *desc)
{
- struct usbd_hw_ep_scratch *ues;
- struct usbd_sw_ep_scratch *ep;
- const struct usbd_hw_ep_profile *pf;
- struct usbd_bus_methods *methods;
- usb_device_descriptor_t *dd;
+ struct usb2_hw_ep_scratch *ues;
+ struct usb2_hw_ep_scratch_sub *ep;
+ const struct usb2_hw_ep_profile *pf;
+ struct usb2_bus_methods *methods;
+ struct usb2_device_descriptor *dd;
uint16_t mps;
if (desc == NULL) {
- return (USBD_ERR_INVAL);
+ return (USB_ERR_INVAL);
}
/* get bus methods */
methods = udev->bus->methods;
if (methods->get_hw_ep_profile == NULL) {
- return (USBD_ERR_INVAL);
+ return (USB_ERR_INVAL);
}
if (desc->bDescriptorType == UDESC_DEVICE) {
if (desc->bLength < sizeof(*dd)) {
- return (USBD_ERR_INVAL);
+ return (USB_ERR_INVAL);
}
dd = (void *)desc;
/* get HW control endpoint 0 profile */
(methods->get_hw_ep_profile) (udev, &pf, 0);
if (pf == NULL) {
- return (USBD_ERR_INVAL);
+ return (USB_ERR_INVAL);
}
- if (!usbd_hw_ep_match(pf, UE_CONTROL, 0)) {
- PRINTFN(-1, ("Endpoint 0 does not "
- "support control\n"));
- return (USBD_ERR_INVAL);
+ if (!usb2_hw_ep_match(pf, UE_CONTROL, 0)) {
+ DPRINTF(-1, "Endpoint 0 does not "
+ "support control\n");
+ return (USB_ERR_INVAL);
}
mps = dd->bMaxPacketSize;
@@ -788,7 +818,7 @@
/* check if "mps" is too small */
if (mps < 8) {
- return (USBD_ERR_INVAL);
+ return (USB_ERR_INVAL);
}
}
@@ -801,18 +831,18 @@
}
/* Check if we support the specified wMaxPacketSize */
if (pf->max_frame_size < mps) {
- return (USBD_ERR_INVAL);
+ return (USB_ERR_INVAL);
}
}
return (0); /* success */
}
if (desc->bDescriptorType != UDESC_CONFIG) {
- return (USBD_ERR_INVAL);
+ return (USB_ERR_INVAL);
}
if (desc->bLength < sizeof(*(ues->cd))) {
- return (USBD_ERR_INVAL);
+ return (USB_ERR_INVAL);
}
- ues = udev->scratch[0].hw_ep_scratch;
+ ues = udev->bus->scratch[0].hw_ep_scratch;
bzero(ues, sizeof(*ues));
@@ -823,12 +853,12 @@
/* Get all the endpoints we need */
- if (usbd_hw_ep_get_needs(ues, UE_ISOCHRONOUS, 0) ||
- usbd_hw_ep_get_needs(ues, UE_INTERRUPT, 0) ||
- usbd_hw_ep_get_needs(ues, UE_CONTROL, 0) ||
- usbd_hw_ep_get_needs(ues, UE_BULK, 0)) {
- PRINTFN(-1, ("Could not get needs\n"));
- return (USBD_ERR_INVAL);
+ if (usb2_hw_ep_get_needs(ues, UE_ISOCHRONOUS, 0) ||
+ usb2_hw_ep_get_needs(ues, UE_INTERRUPT, 0) ||
+ usb2_hw_ep_get_needs(ues, UE_CONTROL, 0) ||
+ usb2_hw_ep_get_needs(ues, UE_BULK, 0)) {
+ DPRINTF(-1, "Could not get needs\n");
+ return (USB_ERR_INVAL);
}
for (ep = ues->ep; ep != ues->ep_max; ep++) {
@@ -838,10 +868,10 @@
* First try to use a simplex endpoint.
* Then try to use a duplex endpoint.
*/
- if (usbd_hw_ep_find_match(ues, ep, 1) &&
- usbd_hw_ep_find_match(ues, ep, 0)) {
- PRINTFN(-1, ("Could not find match\n"));
- return (USBD_ERR_INVAL);
+ if (usb2_hw_ep_find_match(ues, ep, 1) &&
+ usb2_hw_ep_find_match(ues, ep, 0)) {
+ DPRINTF(-1, "Could not find match\n");
+ return (USB_ERR_INVAL);
}
}
}
@@ -850,48 +880,48 @@
/* Update all endpoint addresses */
- if (usbd_hw_ep_get_needs(ues, UE_ISOCHRONOUS, 1) ||
- usbd_hw_ep_get_needs(ues, UE_INTERRUPT, 1) ||
- usbd_hw_ep_get_needs(ues, UE_CONTROL, 1) ||
- usbd_hw_ep_get_needs(ues, UE_BULK, 1)) {
- PRINTFN(-1, ("Could not update endpoint address\n"));
- return (USBD_ERR_INVAL);
+ if (usb2_hw_ep_get_needs(ues, UE_ISOCHRONOUS, 1) ||
+ usb2_hw_ep_get_needs(ues, UE_INTERRUPT, 1) ||
+ usb2_hw_ep_get_needs(ues, UE_CONTROL, 1) ||
+ usb2_hw_ep_get_needs(ues, UE_BULK, 1)) {
+ DPRINTF(-1, "Could not update endpoint address\n");
+ return (USB_ERR_INVAL);
}
return (0); /* success */
}
/*------------------------------------------------------------------------*
- * usbd_temp_get_tdd
+ * usb2_temp_get_tdd
*
* Returns:
* NULL: No USB template device descriptor found.
* Else: Pointer to the USB template device descriptor.
*------------------------------------------------------------------------*/
-static const struct usb_temp_device_desc *
-usbd_temp_get_tdd(struct usbd_device *udev)
+static const struct usb2_temp_device_desc *
+usb2_temp_get_tdd(struct usb2_device *udev)
{
- if (udev->usb_template_ptr == NULL) {
+ if (udev->usb2_template_ptr == NULL) {
return (NULL);
}
- return (udev->usb_template_ptr->tdd);
+ return (udev->usb2_template_ptr->tdd);
}
/*------------------------------------------------------------------------*
- * usbd_temp_get_device_desc
+ * usb2_temp_get_device_desc
*
* Returns:
* NULL: No USB device descriptor found.
* Else: Pointer to USB device descriptor.
*------------------------------------------------------------------------*/
static void *
-usbd_temp_get_device_desc(struct usbd_device *udev)
+usb2_temp_get_device_desc(struct usb2_device *udev)
{
- usb_device_descriptor_t *dd;
+ struct usb2_device_descriptor *dd;
- if (udev->usb_template_ptr == NULL) {
+ if (udev->usb2_template_ptr == NULL) {
return (NULL);
}
- dd = &(udev->usb_template_ptr->udd);
+ dd = &(udev->usb2_template_ptr->udd);
if (dd->bDescriptorType != UDESC_DEVICE) {
/* sanity check failed */
return (NULL);
@@ -900,21 +930,21 @@
}
/*------------------------------------------------------------------------*
- * usbd_temp_get_qualifier_desc
+ * usb2_temp_get_qualifier_desc
*
* Returns:
* NULL: No USB device_qualifier descriptor found.
* Else: Pointer to USB device_qualifier descriptor.
*------------------------------------------------------------------------*/
static void *
-usbd_temp_get_qualifier_desc(struct usbd_device *udev)
+usb2_temp_get_qualifier_desc(struct usb2_device *udev)
{
- usb_device_qualifier_t *dq;
+ struct usb2_device_qualifier *dq;
- if (udev->usb_template_ptr == NULL) {
+ if (udev->usb2_template_ptr == NULL) {
return (NULL);
}
- dq = &(udev->usb_template_ptr->udq);
+ dq = &(udev->usb2_template_ptr->udq);
if (dq->bDescriptorType != UDESC_DEVICE_QUALIFIER) {
/* sanity check failed */
return (NULL);
@@ -923,25 +953,25 @@
}
/*------------------------------------------------------------------------*
- * usbd_temp_get_config_desc
+ * usb2_temp_get_config_desc
*
* Returns:
* NULL: No USB config descriptor found.
* Else: Pointer to USB config descriptor having index "index".
*------------------------------------------------------------------------*/
static void *
-usbd_temp_get_config_desc(struct usbd_device *udev,
+usb2_temp_get_config_desc(struct usb2_device *udev,
uint16_t *pLength, uint8_t index)
{
- usb_device_descriptor_t *dd;
- usb_config_descriptor_t *cd;
+ struct usb2_device_descriptor *dd;
+ struct usb2_config_descriptor *cd;
uint16_t temp;
- if (udev->usb_template_ptr == NULL) {
+ if (udev->usb2_template_ptr == NULL) {
return (NULL);
}
- dd = &(udev->usb_template_ptr->udd);
- cd = (void *)(udev->usb_template_ptr + 1);
+ dd = &(udev->usb2_template_ptr->udd);
+ cd = (void *)(udev->usb2_template_ptr + 1);
if (index >= dd->bNumConfigurations) {
/* out of range */
@@ -953,7 +983,7 @@
return (NULL);
}
temp = UGETW(cd->wTotalLength);
- cd = USBD_ADD_BYTES(cd, temp);
+ cd = USB_ADD_BYTES(cd, temp);
}
if (pLength) {
@@ -963,19 +993,19 @@
}
/*------------------------------------------------------------------------*
- * usbd_temp_get_string_desc
+ * usb2_temp_get_string_desc
*
* Returns:
* NULL: No string descriptor found.
* Else: Pointer to a string descriptor.
*------------------------------------------------------------------------*/
static const void *
-usbd_temp_get_string_desc(struct usbd_device *udev,
+usb2_temp_get_string_desc(struct usb2_device *udev,
uint16_t lang_id, uint8_t string_index)
{
- const struct usb_temp_device_desc *tdd;
+ const struct usb2_temp_device_desc *tdd;
- tdd = usbd_temp_get_tdd(udev);
+ tdd = usb2_temp_get_tdd(udev);
if (tdd == NULL) {
return (NULL);
}
@@ -986,26 +1016,26 @@
}
/*------------------------------------------------------------------------*
- * usbd_temp_get_hub_desc
+ * usb2_temp_get_hub_desc
*
* Returns:
* NULL: No USB HUB descriptor found.
* Else: Pointer to a USB HUB descriptor.
*------------------------------------------------------------------------*/
static const void *
-usbd_temp_get_hub_desc(struct usbd_device *udev)
+usb2_temp_get_hub_desc(struct usb2_device *udev)
{
return (NULL); /* needs to be implemented */
}
/*------------------------------------------------------------------------*
- * usbd_temp_get_desc
+ * usb2_temp_get_desc
*
* This function is a demultiplexer for local USB device side control
* endpoint requests.
*------------------------------------------------------------------------*/
-void
-usbd_temp_get_desc(struct usbd_device *udev, usb_device_request_t *req,
+static void
+usb2_temp_get_desc(struct usb2_device *udev, struct usb2_device_request *req,
const void **pPtr, uint16_t *pLength)
{
const uint8_t *buf;
@@ -1041,7 +1071,7 @@
if (req->wValue[0]) {
goto tr_stalled;
}
- buf = usbd_temp_get_device_desc(udev);
+ buf = usb2_temp_get_device_desc(udev);
goto tr_valid;
case UDESC_DEVICE_QUALIFIER:
if (udev->speed != USB_SPEED_HIGH) {
@@ -1050,18 +1080,18 @@
if (req->wValue[0]) {
goto tr_stalled;
}
- buf = usbd_temp_get_qualifier_desc(udev);
+ buf = usb2_temp_get_qualifier_desc(udev);
goto tr_valid;
case UDESC_OTHER_SPEED_CONFIGURATION:
if (udev->speed != USB_SPEED_HIGH) {
goto tr_stalled;
}
case UDESC_CONFIG:
- buf = usbd_temp_get_config_desc(udev,
+ buf = usb2_temp_get_config_desc(udev,
&len, req->wValue[0]);
goto tr_valid;
case UDESC_STRING:
- buf = usbd_temp_get_string_desc(udev,
+ buf = usb2_temp_get_string_desc(udev,
UGETW(req->wIndex), req->wValue[0]);
goto tr_valid;
default:
@@ -1073,7 +1103,7 @@
if (req->wValue[0]) {
goto tr_stalled;
}
- buf = usbd_temp_get_hub_desc(udev);
+ buf = usb2_temp_get_hub_desc(udev);
goto tr_valid;
tr_valid:
@@ -1094,7 +1124,7 @@
}
/*------------------------------------------------------------------------*
- * usbd_temp_setup
+ * usb2_temp_setup
*
* This function generates USB descriptors according to the given USB
* template device descriptor. It will also try to figure out the best
@@ -1104,11 +1134,11 @@
* 0: Success
* Else: Failure
*------------------------------------------------------------------------*/
-usbd_status_t
-usbd_temp_setup(struct usbd_device *udev,
- const struct usb_temp_device_desc *tdd)
+static usb2_error_t
+usb2_temp_setup(struct usb2_device *udev,
+ const struct usb2_temp_device_desc *tdd)
{
- struct usbd_temp_setup *uts;
+ struct usb2_temp_setup *uts;
void *buf;
uint8_t n;
@@ -1116,16 +1146,16 @@
/* be NULL safe */
return (0);
}
- uts = udev->scratch[0].temp_setup;
+ uts = udev->bus->scratch[0].temp_setup;
bzero(uts, sizeof(*uts));
- uts->usb_speed = udev->speed;
+ uts->usb2_speed = udev->speed;
uts->self_powered = udev->flags.self_powered;
/* first pass */
- usbd_make_device_desc(uts, tdd);
+ usb2_make_device_desc(uts, tdd);
if (uts->err) {
/* some error happened */
@@ -1133,24 +1163,24 @@
}
/* sanity check */
if (uts->size == 0) {
- return (USBD_ERR_INVAL);
+ return (USB_ERR_INVAL);
}
/* allocate zeroed memory */
uts->buf = malloc(uts->size, M_USB, M_WAITOK | M_ZERO);
if (uts->buf == NULL) {
/* could not allocate memory */
- return (USBD_ERR_NOMEM);
+ return (USB_ERR_NOMEM);
}
/* second pass */
uts->size = 0;
- usbd_make_device_desc(uts, tdd);
+ usb2_make_device_desc(uts, tdd);
/*
* Store a pointer to our descriptors:
*/
- udev->usb_template_ptr = uts->buf;
+ udev->usb2_template_ptr = uts->buf;
if (uts->err) {
/* some error happened during second pass */
@@ -1159,49 +1189,84 @@
/*
* Resolve all endpoint addresses !
*/
- buf = usbd_temp_get_device_desc(udev);
- uts->err = usbd_hw_ep_resolve(udev, buf);
+ buf = usb2_temp_get_device_desc(udev);
+ uts->err = usb2_hw_ep_resolve(udev, buf);
if (uts->err) {
- PRINTFN(-1, ("Could not resolve endpoints for "
+ DPRINTF(-1, "Could not resolve endpoints for "
"Device Descriptor, error = %s\n",
- usbd_errstr(uts->err)));
+ usb2_errstr(uts->err));
goto error;
}
for (n = 0;; n++) {
- buf = usbd_temp_get_config_desc(udev, NULL, n);
+ buf = usb2_temp_get_config_desc(udev, NULL, n);
if (buf == NULL) {
break;
}
- uts->err = usbd_hw_ep_resolve(udev, buf);
+ uts->err = usb2_hw_ep_resolve(udev, buf);
if (uts->err) {
- PRINTFN(-1, ("Could not resolve endpoints for "
+ DPRINTF(-1, "Could not resolve endpoints for "
"Config Descriptor %u, error = %s\n", n,
- usbd_errstr(uts->err)));
+ usb2_errstr(uts->err));
goto error;
}
}
return (uts->err);
error:
- usbd_temp_unsetup(udev);
+ usb2_temp_unsetup(udev);
return (uts->err);
}
/*------------------------------------------------------------------------*
- * usbd_temp_unsetup
+ * usb2_temp_unsetup
*
* This function frees any memory associated with the currently
* setup template, if any.
*------------------------------------------------------------------------*/
-void
-usbd_temp_unsetup(struct usbd_device *udev)
+static void
+usb2_temp_unsetup(struct usb2_device *udev)
{
- if (udev->usb_template_ptr) {
+ if (udev->usb2_template_ptr) {
+
+ free(udev->usb2_template_ptr, M_USB);
+
+ udev->usb2_template_ptr = NULL;
+ }
+ return;
+}
- free(udev->usb_template_ptr, M_USB);
+static usb2_error_t
+usb2_temp_setup_by_index(struct usb2_device *udev, uint16_t index)
+{
+ usb2_error_t err;
- udev->usb_template_ptr = NULL;
+ switch (index) {
+ case 0:
+ err = usb2_temp_setup(udev, &usb2_template_msc);
+ break;
+ case 1:
+ err = usb2_temp_setup(udev, &usb2_template_cdce);
+ break;
+ case 2:
+ err = usb2_temp_setup(udev, &usb2_template_mtp);
+ break;
+ default:
+ return (USB_ERR_INVAL);
}
+
+ return (err);
+}
+
+static void
+usb2_temp_init(void *arg)
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From julian at FreeBSD.org Tue Jul 1 21:29:39 2008
From: julian at FreeBSD.org (Julian Elischer)
Date: Tue Jul 1 21:29:41 2008
Subject: PERFORCE change 144441 for review
Message-ID: <200807012129.m61LTcDK089975@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144441
Change 144441 by julian@julian_trafmon1 on 2008/07/01 21:29:03
Need the include files in kernmel modules too
Affected files ...
.. //depot/projects/vimage-commit3/src/sys/contrib/ipfilter/netinet/fil.c#2 edit
Differences ...
==== //depot/projects/vimage-commit3/src/sys/contrib/ipfilter/netinet/fil.c#2 (text+ko) ====
@@ -28,14 +28,16 @@
(__FreeBSD_version >= 220000)
# if (__FreeBSD_version >= 400000)
# if !defined(IPFILTER_LKM)
-# include "opt_vimage.h"
# include "opt_inet6.h"
-# include
# endif
# if (__FreeBSD_version == 400019)
# define CSUM_DELAY_DATA
# endif
# endif
+# if (__FreeBSD_version >= 800000)
+# include "opt_vimage.h"
+# include
+# endif
# include
#else
# include
From hselasky at FreeBSD.org Tue Jul 1 21:41:52 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 21:41:54 2008
Subject: PERFORCE change 144443 for review
Message-ID: <200807012141.m61Lfpr6091042@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144443
Change 144443 by hselasky@hselasky_laptop001 on 2008/07/01 21:41:25
Several fixes and improvements to the USB device layer /dev/usbXXX .
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#6 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#6 (text+ko) ====
@@ -75,6 +75,7 @@
static int usb2_fifo_open(struct usb2_fifo *f, struct file *fp, struct thread *td, int fflags);
static void usb2_fifo_close(struct usb2_fifo *f, struct thread *td, int fflags);
static void usb2_dev_init(void *arg);
+static void usb2_dev_init_post(void *arg);
static void usb2_dev_uninit(void *arg);
static int usb2_fifo_uiomove(struct usb2_fifo *f, void *cp, int n, struct uio *uio);
static void usb2_fifo_wakeup(struct usb2_fifo *f);
@@ -310,28 +311,35 @@
mtx_lock(&usb2_ref_lock);
ploc->bus = devclass_get_softc(usb2_devclass_ptr, ploc->bus_index);
if (ploc->bus == NULL) {
+ DPRINTF(1, "no bus\n");
goto error;
}
if (ploc->bus->ready == 0) {
+ DPRINTF(1, "not ready\n");
goto error;
}
if (ploc->dev_index >= ploc->bus->devices_max) {
+ DPRINTF(1, "invalid dev index\n");
goto error;
}
ploc->udev = ploc->bus->devices[ploc->dev_index];
if (ploc->udev == NULL) {
+ DPRINTF(1, "no device\n");
goto error;
}
if (ploc->udev->refcount == USB_DEV_REF_MAX) {
+ DPRINTF(1, "no dev ref\n");
goto error;
}
ploc->iface = usb2_get_iface(ploc->udev, ploc->iface_index);
if (ploc->ep_index != 0) {
/* non control endpoint - we need an interface */
if (ploc->iface == NULL) {
+ DPRINTF(1, "no iface\n");
goto error;
}
if (ploc->iface->idesc == NULL) {
+ DPRINTF(1, "no idesc\n");
goto error;
}
}
@@ -368,12 +376,15 @@
/* when everything is OK we increment the refcounts */
if (ploc->is_uref) {
+ DPRINTF(1, "ref udev\n");
ploc->udev->refcount++;
}
if (ploc->is_write) {
+ DPRINTF(1, "ref write\n");
ploc->txfifo->refcount++;
}
if (ploc->is_read) {
+ DPRINTF(1, "ref read\n");
ploc->rxfifo->refcount++;
}
mtx_unlock(&usb2_ref_lock);
@@ -390,6 +401,7 @@
error:
mtx_unlock(&usb2_ref_lock);
+ DPRINTF(1, "fail\n");
return (USB_ERR_INVAL);
}
@@ -513,10 +525,12 @@
if (f) {
/* nothing do to - we already have a FIFO */
+ DPRINTF(1, "has FIFO\n");
return;
}
if (ep_index >= 16) {
/* nothing to do - these are virtual endpoints */
+ DPRINTF(1, "VEP\n");
return;
}
/* automatically create a generic endpoint */
@@ -601,6 +615,7 @@
if (f == NULL) {
/* no FIFO there */
+ DPRINTF(1, "no FIFO\n");
return (ENXIO);
}
/* remove FWRITE and FREAD flags */
@@ -743,7 +758,7 @@
/* check if we are sleeping */
if (f->flag_sleeping) {
- DPRINTF(-1, "Sleeping at close!\n");
+ DPRINTF(1, "Sleeping at close!\n");
}
mtx_unlock(f->priv_mtx);
@@ -774,6 +789,7 @@
usb2_last_devloc = (0 - 1); /* reset "usb2_devloc" */
if (fp == NULL) {
+ DPRINTF(1, "fp == NULL\n");
return (ENXIO);
}
if (usb2_old_f_data != fp->f_data) {
@@ -799,10 +815,12 @@
}
if (devloc == (uint32_t)(0 - 1)) {
/* tried to open /dev/usb */
+ DPRINTF(1, "no devloc\n");
return (ENXIO);
}
err = usb2_ref_device(NULL, &loc, devloc);
if (err) {
+ DPRINTF(1, "cannot ref device\n");
return (ENXIO);
}
/* create a permissions mask */
@@ -854,7 +872,6 @@
}
usb2_fifo_check(&loc, fflags & FREAD);
usb2_fifo_check(&loc, fflags & FWRITE);
-
usb2_unref_device(&loc);
/* try to refer the device and associated FIFOs again */
@@ -866,6 +883,7 @@
err = usb2_fifo_open(loc.rxfifo, fp, td,
fflags);
if (err) {
+ DPRINTF(1, "read open failed\n");
usb2_unref_device(&loc);
return (err);
}
@@ -874,6 +892,7 @@
err = usb2_fifo_open(loc.txfifo, fp, td,
fflags);
if (err) {
+ DPRINTF(1, "write open failed\n");
if (fflags & FREAD) {
usb2_fifo_close(loc.rxfifo, td,
fflags);
@@ -923,7 +942,6 @@
}
if (usb2_last_devloc != (uint32_t)(0 - 1)) {
DPRINTF(-1, "Clone race!\n");
- return;
}
usb2_last_devloc = usb2_path_convert(name +
sizeof(USB_DEVICE_NAME) - 1);
@@ -941,7 +959,14 @@
usb2_dev_init(void *arg)
{
mtx_init(&usb2_ref_lock, "USB ref mutex", NULL, MTX_DEF);
+ return;
+}
+SYSINIT(usb2_dev_init, SI_SUB_KLD, SI_ORDER_FIRST, usb2_dev_init, NULL);
+
+static void
+usb2_dev_init_post(void *arg)
+{
/* create a dummy device so that we are visible */
usb2_dev = make_dev(&usb2_devsw, 0, UID_ROOT, GID_OPERATOR,
0000, USB_DEVICE_NAME " ");
@@ -955,7 +980,7 @@
return;
}
-SYSINIT(usb2_dev_init, SI_SUB_KLD, SI_ORDER_FIRST, usb2_dev_init, NULL);
+SYSINIT(usb2_dev_init_post, SI_SUB_KICK_SCHEDULER, SI_ORDER_FIRST, usb2_dev_init_post, NULL);
static void
usb2_dev_uninit(void *arg)
@@ -981,7 +1006,9 @@
int fflags;
int err;
- DPRINTF(1, "\n");
+ fflags = fp->f_flag;
+
+ DPRINTF(1, "fflags=%u\n", fflags);
err = usb2_ref_device(fp, &loc, 0);;
@@ -991,6 +1018,7 @@
/* check for error */
if (err) {
+ DPRINTF(1, "could not ref\n");
goto done;
}
if (fflags & FREAD) {
@@ -1062,6 +1090,9 @@
return (ENXIO);
}
fflags = fp->f_flag;
+
+ DPRINTF(1, "fflags=%u, cmd=0x%lx\n", fflags, cmd);
+
if ((fflags & FREAD) && (err == 0)) {
err = usb2_ioctl_f_sub(loc.rxfifo, cmd, addr, td);
if (err) {
@@ -1297,6 +1328,7 @@
f = loc.txfifo;
if (f == NULL) {
/* should not happen */
+ usb2_unref_device(&loc);
return (EPERM);
}
resid = uio->uio_resid;
@@ -1358,6 +1390,8 @@
done:
mtx_unlock(f->priv_mtx);
+ usb2_unref_device(&loc);
+
if ((flags & FOF_OFFSET) == 0)
fp->f_offset = uio->uio_offset;
fp->f_nextoff = uio->uio_offset;
@@ -1387,6 +1421,8 @@
int
usb2_fifo_wait(struct usb2_fifo *f)
{
+ int err;
+
mtx_assert(f->priv_mtx, MA_OWNED);
if (f->flag_iserror) {
@@ -1394,13 +1430,14 @@
return (EIO);
}
f->flag_sleeping = 1;
- cv_wait(&(f->cv_io), f->priv_mtx);
+
+ err = cv_wait_sig(&(f->cv_io), f->priv_mtx);
if (f->flag_iserror) {
/* we are gone */
- return (EIO);
+ err = EIO;
}
- return (0);
+ return (err);
}
void
From hselasky at FreeBSD.org Tue Jul 1 21:44:55 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 21:44:58 2008
Subject: PERFORCE change 144445 for review
Message-ID: <200807012144.m61LisVj091287@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144445
Change 144445 by hselasky@hselasky_laptop001 on 2008/07/01 21:44:42
New USB sound module is finished and tested.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#8 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_defs.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/sound/uaudio2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/sound/uaudio2_reg.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/sound/usb2_sound.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/sound/usb2_sound.h#1 add
.. //depot/projects/usb/src/sys/modules/usb2/sound/Makefile#2 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#8 (text+ko) ====
@@ -391,7 +391,7 @@
struct usb2_interface_descriptor *usb2_get_interface_descriptor(struct usb2_interface *iface);
uint8_t usb2_clear_stall_callback(struct usb2_xfer *xfer1, struct usb2_xfer *xfer2);
uint8_t usb2_get_interface_altindex(struct usb2_interface *iface);
-uint8_t usb2_get_quirk(struct usb2_attach_arg *uaa, uint16_t quirk);
+usb2_error_t usb2_set_alt_interface_index(struct usb2_device *udev, uint8_t iface_index, uint8_t alt_index);
uint8_t usb2_get_speed(struct usb2_device *udev);
usb2_error_t usb2_transfer_setup(struct usb2_device *udev, const uint8_t *ifaces, struct usb2_xfer **pxfer, const struct usb2_config *setup_start, uint16_t n_setup, void *priv_sc, struct mtx *priv_mtx);
void usb2_set_frame_data(struct usb2_xfer *xfer, void *ptr, uint32_t frindex);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.h#3 (text+ko) ====
@@ -147,7 +147,6 @@
usb2_error_t usb2_interface_count(struct usb2_device *udev, uint8_t *count);
usb2_error_t usb2_probe_and_attach(struct usb2_device *udev, uint8_t iface_index);
usb2_error_t usb2_reset_iface_endpoints(struct usb2_device *udev, uint8_t iface_index);
-usb2_error_t usb2_set_alt_interface_index(struct usb2_device *udev, uint8_t iface_index, uint8_t alt_index);
usb2_error_t usb2_set_config_index(struct usb2_device *udev, uint8_t index);
usb2_error_t usb2_set_endpoint_stall(struct usb2_device *udev, struct usb2_pipe *pipe, uint8_t do_stall);
usb2_error_t usb2_suspend_resume(struct usb2_device *udev, uint8_t do_suspend);
==== //depot/projects/usb/src/sys/dev/usb2/include/usb2_defs.h#3 (text+ko) ====
@@ -32,7 +32,7 @@
#define USB_DEV_MAX 128 /* units */
#define USB_IFACE_MAX 32 /* units */
#define USB_EP_MAX (2*16) /* hardcoded */
-#define USB_FIFO_MAX (2 * USB_EP_MAX)
+#define USB_FIFO_MAX (4 * USB_EP_MAX)
#define USB_MAX_DEVICES USB_DEV_MAX /* including virtual root HUB and
* address zero */
==== //depot/projects/usb/src/sys/dev/usb2/sound/uaudio2.c#2 (text+ko) ====
@@ -52,18 +52,30 @@
* $NetBSD: uaudio.c,v 1.97 2005/02/24 08:19:38 martin Exp $
*/
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
+
+#define USB_DEBUG_VAR uaudio_debug
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
#include /* for bootverbose */
-#include
-#include
-#include
-#include
-
#include
#include
#include "feeder_if.h"
@@ -72,17 +84,11 @@
#include
#ifdef USB_DEBUG
-#define DPRINTF(n,fmt,...) \
- do { if (uaudio_debug > (n)) { \
- printf("%s: " fmt, __FUNCTION__,## __VA_ARGS__); } } while (0)
-
static int uaudio_debug = 0;
-SYSCTL_NODE(_hw_usb, OID_AUTO, uaudio, CTLFLAG_RW, 0, "USB uaudio");
-SYSCTL_INT(_hw_usb_uaudio, OID_AUTO, debug, CTLFLAG_RW,
+SYSCTL_NODE(_hw_usb2, OID_AUTO, uaudio, CTLFLAG_RW, 0, "USB uaudio");
+SYSCTL_INT(_hw_usb2_uaudio, OID_AUTO, debug, CTLFLAG_RW,
&uaudio_debug, 0, "uaudio debug level");
-#else
-#define DPRINTF(...) do { } while (0)
#endif
static uint32_t uaudio_default_rate = 96000;
@@ -94,8 +100,6 @@
#define UAUDIO_RECURSE_LIMIT 24 /* rounds */
#define UAUDIO_DEFAULT_BUFSZ (16*1024) /* bytes */
-
-
#define MAKE_WORD(h,l) (((h) << 8) | (l))
#define BIT_TEST(bm,bno) (((bm)[(bno) / 8] >> (7 - ((bno) % 8))) & 1)
@@ -135,16 +139,16 @@
struct pcmchan_caps pcm_cap; /* capabilities */
struct snd_dbuf *pcm_buf;
- const struct usbd_config *usb_cfg;
+ const struct usb2_config *usb2_cfg;
struct mtx *pcm_mtx; /* lock protecting this structure */
struct uaudio_softc *priv_sc;
struct pcm_channel *pcm_ch;
- struct usbd_xfer *xfer[UAUDIO_NCHANBUFS];
- const struct usb_audio_streaming_interface_descriptor *p_asid;
- const struct usb_audio_streaming_type1_descriptor *p_asf1d;
- const struct usb_audio_streaming_endpoint_descriptor *p_sed;
- const usb_endpoint_descriptor_audio_t *p_ed1;
- const usb_endpoint_descriptor_audio_t *p_ed2;
+ struct usb2_xfer *xfer[UAUDIO_NCHANBUFS];
+ const struct usb2_audio_streaming_interface_descriptor *p_asid;
+ const struct usb2_audio_streaming_type1_descriptor *p_asf1d;
+ const struct usb2_audio_streaming_endpoint_descriptor *p_sed;
+ const usb2_endpoint_descriptor_audio_t *p_ed1;
+ const usb2_endpoint_descriptor_audio_t *p_ed2;
const struct uaudio_format *p_fmt;
uint8_t *buf; /* pointer to buffer */
@@ -170,7 +174,7 @@
#define UMIDI_BULK_SIZE 1024 /* bytes */
struct umidi_sub_chan {
- struct usb_cdev cdev;
+ struct usb2_fifo_sc fifo;
uint8_t *temp_cmd;
uint8_t temp_0[4];
uint8_t temp_1[4];
@@ -193,7 +197,7 @@
struct umidi_sub_chan sub[UMIDI_CABLES_MAX];
struct mtx mtx;
- struct usbd_xfer *xfer[UMIDI_N_TRANSFER];
+ struct usb2_xfer *xfer[UMIDI_N_TRANSFER];
uint8_t iface_index;
uint8_t iface_alt_index;
@@ -217,8 +221,8 @@
struct uaudio_chan sc_play_chan;
struct umidi_chan sc_midi_chan;
- struct usbd_device *sc_udev;
- struct usbd_xfer *sc_mixer_xfer[1];
+ struct usb2_device *sc_udev;
+ struct usb2_xfer *sc_mixer_xfer[1];
struct mtx *sc_mixer_lock;
struct uaudio_mixer_node *sc_mixer_root;
struct uaudio_mixer_node *sc_mixer_curr;
@@ -226,7 +230,6 @@
uint32_t sc_buffer_size;
uint32_t sc_mix_info;
uint32_t sc_recsrc_info;
- uint32_t sc_quirks;
uint16_t sc_audio_rev;
uint16_t sc_mixer_count;
@@ -237,7 +240,10 @@
uint8_t sc_mixer_chan;
uint8_t sc_pcm_registered:1;
uint8_t sc_mixer_init:1;
- uint8_t sc_unused:6;
+ uint8_t sc_uq_audio_swap_lr:1;
+ uint8_t sc_uq_au_inp_async:1;
+ uint8_t sc_uq_au_no_xu:1;
+ uint8_t sc_uq_bad_adc:1;
};
struct uaudio_search_result {
@@ -250,14 +256,14 @@
struct uaudio_terminal_node {
union {
- const usb_descriptor_t *desc;
- const struct usb_audio_input_terminal *it;
- const struct usb_audio_output_terminal *ot;
- const struct usb_audio_mixer_unit_0 *mu;
- const struct usb_audio_selector_unit *su;
- const struct usb_audio_feature_unit *fu;
- const struct usb_audio_processing_unit_0 *pu;
- const struct usb_audio_extension_unit_0 *eu;
+ const struct usb2_descriptor *desc;
+ const struct usb2_audio_input_terminal *it;
+ const struct usb2_audio_output_terminal *ot;
+ const struct usb2_audio_mixer_unit_0 *mu;
+ const struct usb2_audio_selector_unit *su;
+ const struct usb2_audio_feature_unit *fu;
+ const struct usb2_audio_processing_unit_0 *pu;
+ const struct usb2_audio_extension_unit_0 *eu;
} u;
struct uaudio_search_result usr;
struct uaudio_terminal_node *root;
@@ -307,157 +313,74 @@
static device_attach_t uaudio_attach;
static device_detach_t uaudio_detach;
-static usbd_callback_t uaudio_chan_play_callback;
-static usbd_callback_t uaudio_chan_record_callback;
-static usbd_callback_t uaudio_mixer_write_cfg_callback;
-static usbd_callback_t umidi_read_clear_stall_callback;
-static usbd_callback_t umidi_bulk_read_callback;
-static usbd_callback_t umidi_write_clear_stall_callback;
-static usbd_callback_t umidi_bulk_write_callback;
+static usb2_callback_t uaudio_chan_play_callback;
+static usb2_callback_t uaudio_chan_record_callback;
+static usb2_callback_t uaudio_mixer_write_cfg_callback;
+static usb2_callback_t umidi_read_clear_stall_callback;
+static usb2_callback_t umidi_bulk_read_callback;
+static usb2_callback_t umidi_write_clear_stall_callback;
+static usb2_callback_t umidi_bulk_write_callback;
#ifdef USB_DEBUG
-static void
- uaudio_chan_dump_ep_desc(const usb_endpoint_descriptor_audio_t *ed);
+static void uaudio_chan_dump_ep_desc(const usb2_endpoint_descriptor_audio_t *ed);
#endif
-static void
-uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usbd_device *udev,
- uint32_t rate, uint16_t fps, uint8_t channels,
- uint8_t bit_resolution);
-
-static void
- uaudio_chan_fill_info(struct uaudio_softc *sc, struct usbd_device *udev);
-
-static void
-uaudio_mixer_add_ctl_sub(struct uaudio_softc *sc,
- struct uaudio_mixer_node *mc);
-static void
- uaudio_mixer_add_ctl(struct uaudio_softc *sc, struct uaudio_mixer_node *mc);
+static void uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb2_device *udev, uint32_t rate, uint16_t fps, uint8_t channels, uint8_t bit_resolution);
+static void uaudio_chan_fill_info(struct uaudio_softc *sc, struct usb2_device *udev);
+static void uaudio_mixer_add_ctl_sub(struct uaudio_softc *sc, struct uaudio_mixer_node *mc);
+static void uaudio_mixer_add_ctl(struct uaudio_softc *sc, struct uaudio_mixer_node *mc);
+static void uaudio_mixer_add_input(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_output(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_mixer(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_selector(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static uint32_t uaudio_mixer_feature_get_bmaControls(const struct usb2_audio_feature_unit *d, uint8_t index);
+static void uaudio_mixer_add_feature(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_processing_updown(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_processing(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_extension(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static const void *uaudio_mixer_verify_desc(const void *arg, uint32_t len);
-static void
-uaudio_mixer_add_input(struct uaudio_softc *sc,
- const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_output(struct uaudio_softc *sc,
- const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_mixer(struct uaudio_softc *sc,
- const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_selector(struct uaudio_softc *sc,
- const struct uaudio_terminal_node *iot, int id);
-static uint32_t
-uaudio_mixer_feature_get_bmaControls(const struct usb_audio_feature_unit *d,
- uint8_t index);
-static void
-uaudio_mixer_add_feature(struct uaudio_softc *sc,
- const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_processing_updown(struct uaudio_softc *sc,
- const struct uaudio_terminal_node *iot,
- int id);
-static void
-uaudio_mixer_add_processing(struct uaudio_softc *sc,
- const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_extension(struct uaudio_softc *sc,
- const struct uaudio_terminal_node *iot, int id);
-static const void *
- uaudio_mixer_verify_desc(const void *arg, uint32_t len);
-
#ifdef USB_DEBUG
-static void
- uaudio_mixer_dump_cluster(uint8_t id, const struct uaudio_terminal_node *iot);
+static void uaudio_mixer_dump_cluster(uint8_t id, const struct uaudio_terminal_node *iot);
#endif
-static struct usb_audio_cluster
- uaudio_mixer_get_cluster(uint8_t id, const struct uaudio_terminal_node *iot);
+static struct usb2_audio_cluster uaudio_mixer_get_cluster(uint8_t id, const struct uaudio_terminal_node *iot);
#ifdef USB_DEBUG
-static const char *
- uaudio_mixer_get_terminal_name(uint16_t terminal_type);
+static const char *uaudio_mixer_get_terminal_name(uint16_t terminal_type);
#endif
-static uint16_t
-uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot,
- struct uaudio_mixer_node *mix);
-static uint16_t
-uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot,
- struct uaudio_mixer_node *mix);
+static uint16_t uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot, struct uaudio_mixer_node *mix);
+static uint16_t uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, struct uaudio_mixer_node *mix);
+static const struct uaudio_terminal_node *uaudio_mixer_get_input(const struct uaudio_terminal_node *iot, uint8_t index);
+static const struct uaudio_terminal_node *uaudio_mixer_get_output(const struct uaudio_terminal_node *iot, uint8_t index);
+static void uaudio_mixer_find_inputs_sub(struct uaudio_terminal_node *root, const uint8_t *p_id, uint8_t n_id, struct uaudio_search_result *info);
+static void uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *root, uint8_t id, uint8_t n_id, struct uaudio_search_result *info);
+static void uaudio_mixer_fill_info(struct uaudio_softc *sc, struct usb2_device *udev, void *desc);
+static uint16_t uaudio_mixer_get(struct usb2_device *udev, uint8_t what, struct uaudio_mixer_node *mc);
+static usb2_error_t uaudio_set_speed(struct usb2_device *udev, uint8_t endpt, uint32_t speed);
+static int uaudio_mixer_signext(uint8_t type, int val);
+static int uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val);
-static const struct uaudio_terminal_node *
- uaudio_mixer_get_input(const struct uaudio_terminal_node *iot, uint8_t index);
+static void uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct uaudio_mixer_node *mc, uint8_t chan, int32_t val);
+static void uaudio_mixer_init(struct uaudio_softc *sc);
+static uint8_t umidi_convert_to_usb(struct umidi_sub_chan *sub, uint8_t cn, uint8_t b);
+static struct umidi_sub_chan *umidi_sub_by_fifo(struct usb2_fifo *fifo);
+static void umidi_start_read(struct usb2_fifo *fifo);
+static void umidi_stop_read(struct usb2_fifo *fifo);
+static void umidi_start_write(struct usb2_fifo *fifo);
+static void umidi_stop_write(struct usb2_fifo *fifo);
+static int umidi_open(struct usb2_fifo *fifo, int fflags, struct thread *td);
+static int umidi_ioctl(struct usb2_fifo *fifo, u_long cmd, void *data, int fflags, struct thread *td);
+static void umidi_close(struct usb2_fifo *fifo, int fflags, struct thread *td);
+static void umidi_init(device_t dev);
+static int32_t umidi_probe(device_t dev);
+static int32_t umidi_detach(device_t dev);
-static const struct uaudio_terminal_node *
-uaudio_mixer_get_output(const struct uaudio_terminal_node *iot,
- uint8_t index);
-static void
-uaudio_mixer_find_inputs_sub(struct uaudio_terminal_node *root,
- const uint8_t *p_id, uint8_t n_id,
- struct uaudio_search_result *info);
-static void
-uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *root, uint8_t id,
- uint8_t n_id,
- struct uaudio_search_result *info);
-static void
-uaudio_mixer_fill_info(struct uaudio_softc *sc, struct usbd_device *udev,
- void *desc);
-static uint16_t
-uaudio_mixer_get(struct usbd_device *udev, uint8_t what,
- struct uaudio_mixer_node *mc);
-static usbd_status_t
- uaudio_set_speed(struct usbd_device *udev, uint8_t endpt, uint32_t speed);
-
-static int
- uaudio_mixer_signext(uint8_t type, int val);
-
-static int
- uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val);
-
-static void
-uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct uaudio_mixer_node *mc,
- uint8_t chan, int32_t val);
-static void
- uaudio_mixer_init(struct uaudio_softc *sc);
-
-static uint8_t
- umidi_convert_to_usb(struct umidi_sub_chan *sub, uint8_t cn, uint8_t b);
-
-static struct umidi_sub_chan *
- umidi_sub_by_cdev(struct usb_cdev *cdev);
-
-static void
- umidi_start_read(struct usb_cdev *cdev);
-
-static void
- umidi_stop_read(struct usb_cdev *cdev);
-
-static void
- umidi_start_write(struct usb_cdev *cdev);
-
-static void
- umidi_stop_write(struct usb_cdev *cdev);
-
-static int32_t
-umidi_open(struct usb_cdev *cdev, int32_t fflags,
- int32_t devtype, struct thread *td);
-
-static int32_t
-umidi_ioctl(struct usb_cdev *cdev, u_long cmd, caddr_t data,
- int32_t fflags, struct thread *td);
-static void
- umidi_init(device_t dev);
-
-static int32_t
- umidi_probe(device_t dev);
-
-static int32_t
- umidi_detach(device_t dev);
-
-static const struct usbd_config
+static const struct usb2_config
uaudio_cfg_record_full_speed[UAUDIO_NCHANBUFS] = {
[0] = {
.type = UE_ISOCHRONOUS,
@@ -480,7 +403,7 @@
},
};
-static const struct usbd_config
+static const struct usb2_config
uaudio_cfg_record_high_speed[UAUDIO_NCHANBUFS] = {
[0] = {
.type = UE_ISOCHRONOUS,
@@ -503,7 +426,7 @@
},
};
-static const struct usbd_config
+static const struct usb2_config
uaudio_cfg_play_full_speed[UAUDIO_NCHANBUFS] = {
[0] = {
.type = UE_ISOCHRONOUS,
@@ -526,7 +449,7 @@
},
};
-static const struct usbd_config
+static const struct usb2_config
uaudio_cfg_play_high_speed[UAUDIO_NCHANBUFS] = {
[0] = {
.type = UE_ISOCHRONOUS,
@@ -549,13 +472,13 @@
},
};
-static const struct usbd_config
+static const struct usb2_config
uaudio_mixer_config[1] = {
[0] = {
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = (sizeof(usb_device_request_t) + 4),
+ .mh.bufsize = (sizeof(struct usb2_device_request) + 4),
.mh.callback = &uaudio_mixer_write_cfg_callback,
.mh.timeout = 1000, /* 1 second */
},
@@ -581,7 +504,7 @@
[0xF] = 1, /* bytes */
};
-static const struct usbd_config
+static const struct usb2_config
umidi_config[UMIDI_N_TRANSFER] = {
[0] = {
.type = UE_BULK,
@@ -605,7 +528,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.flags = {},
.mh.callback = &umidi_write_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
@@ -616,7 +539,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.flags = {},
.mh.callback = &umidi_read_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
@@ -646,34 +569,29 @@
static int
uaudio_probe(device_t dev)
{
- struct usb_attach_arg *uaa = device_get_ivars(dev);
- usb_interface_descriptor_t *id;
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
- if (uaa->usb_mode != USB_MODE_HOST) {
- return (UMATCH_NONE);
- }
- if (uaa->iface == NULL) {
- return (UMATCH_NONE);
+ if (uaa->usb2_mode != USB_MODE_HOST) {
+ return (ENXIO);
}
- id = usbd_get_interface_descriptor(uaa->iface);
-
/* trigger on the control interface */
- if ((id == NULL) ||
- (id->bInterfaceClass != UICLASS_AUDIO) ||
- (id->bInterfaceSubClass != UISUBCLASS_AUDIOCONTROL) ||
- (usbd_get_quirks(uaa->device)->uq_flags & UQ_BAD_AUDIO)) {
- return (UMATCH_NONE);
+ if ((uaa->info.bInterfaceClass == UICLASS_AUDIO) &&
+ (uaa->info.bInterfaceSubClass == UISUBCLASS_AUDIOCONTROL)) {
+ if (usb2_test_quirk(uaa, UQ_BAD_AUDIO))
+ return (ENXIO);
+ else
+ return (0);
}
- return (UMATCH_IFACECLASS_IFACESUBCLASS);
+ return (ENXIO);
}
static int
uaudio_attach(device_t dev)
{
- struct usb_attach_arg *uaa = device_get_ivars(dev);
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
struct uaudio_softc *sc = device_get_softc(dev);
- usb_interface_descriptor_t *id;
+ struct usb2_interface_descriptor *id;
device_t child;
if (sc == NULL) {
@@ -682,20 +600,31 @@
sc->sc_play_chan.priv_sc = sc;
sc->sc_rec_chan.priv_sc = sc;
sc->sc_udev = uaa->device;
- sc->sc_quirks = usbd_get_quirks(uaa->device)->uq_flags;
+
+ if (usb2_test_quirk(uaa, UQ_AUDIO_SWAP_LR))
+ sc->sc_uq_audio_swap_lr = 1;
+
+ if (usb2_test_quirk(uaa, UQ_AU_INP_ASYNC))
+ sc->sc_uq_au_inp_async = 1;
+
+ if (usb2_test_quirk(uaa, UQ_AU_NO_XU))
+ sc->sc_uq_au_no_xu = 1;
+
+ if (usb2_test_quirk(uaa, UQ_BAD_ADC))
+ sc->sc_uq_bad_adc = 1;
umidi_init(dev);
- usbd_set_device_desc(dev);
+ device_set_usb2_desc(dev);
- id = usbd_get_interface_descriptor(uaa->iface);
+ id = usb2_get_interface_descriptor(uaa->iface);
uaudio_chan_fill_info(sc, uaa->device);
uaudio_mixer_fill_info(sc, uaa->device, id);
- sc->sc_mixer_iface_index = uaa->iface_index;
- sc->sc_mixer_iface_no = id->bInterfaceNumber;
+ sc->sc_mixer_iface_index = uaa->info.bIfaceIndex;
+ sc->sc_mixer_iface_no = uaa->info.bIfaceNum;
DPRINTF(0, "audio rev %d.%02x\n",
sc->sc_audio_rev >> 8,
@@ -782,7 +711,7 @@
}
uaudio_mixer_init(sc);
- if (sc->sc_quirks & UQ_AUDIO_SWAP_LR) {
+ if (sc->sc_uq_audio_swap_lr) {
DPRINTF(0, "hardware has swapped left and right\n");
uaudio_pcm_setflags(dev, SD_F_PSWAPLR);
}
@@ -868,7 +797,7 @@
#ifdef USB_DEBUG
static void
-uaudio_chan_dump_ep_desc(const usb_endpoint_descriptor_audio_t *ed)
+uaudio_chan_dump_ep_desc(const usb2_endpoint_descriptor_audio_t *ed)
{
if (ed) {
DPRINTF(0, "endpoint=%p bLength=%d bDescriptorType=%d \n"
@@ -886,18 +815,18 @@
#endif
static void
-uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usbd_device *udev,
+uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb2_device *udev,
uint32_t rate, uint16_t fps, uint8_t channels,
uint8_t bit_resolution)
{
- usb_descriptor_t *desc = NULL;
- const struct usb_audio_streaming_interface_descriptor *asid = NULL;
- const struct usb_audio_streaming_type1_descriptor *asf1d = NULL;
- const struct usb_audio_streaming_endpoint_descriptor *sed = NULL;
- const usb_endpoint_descriptor_audio_t *ed1 = NULL;
- const usb_endpoint_descriptor_audio_t *ed2 = NULL;
- usb_config_descriptor_t *cd = usbd_get_config_descriptor(udev);
- usb_interface_descriptor_t *id;
+ struct usb2_descriptor *desc = NULL;
+ const struct usb2_audio_streaming_interface_descriptor *asid = NULL;
+ const struct usb2_audio_streaming_type1_descriptor *asf1d = NULL;
+ const struct usb2_audio_streaming_endpoint_descriptor *sed = NULL;
+ const usb2_endpoint_descriptor_audio_t *ed1 = NULL;
+ const usb2_endpoint_descriptor_audio_t *ed2 = NULL;
+ struct usb2_config_descriptor *cd = usb2_get_config_descriptor(udev);
+ struct usb2_interface_descriptor *id;
const struct uaudio_format *p_fmt;
struct uaudio_chan *chan;
uint16_t curidx = 0xFFFF;
@@ -913,7 +842,7 @@
uint8_t audio_if = 0;
uint8_t sample_size;
- while ((desc = usbd_desc_foreach(cd, desc))) {
+ while ((desc = usb2_desc_foreach(cd, desc))) {
if ((desc->bDescriptorType == UDESC_INTERFACE) &&
(desc->bLength >= sizeof(*id))) {
@@ -945,7 +874,7 @@
*/
if ((sc->sc_midi_chan.valid == 0) &&
- usbd_get_iface(udev, curidx)) {
+ usb2_get_iface(udev, curidx)) {
sc->sc_midi_chan.iface_index = curidx;
sc->sc_midi_chan.iface_alt_index = alt_index;
sc->sc_midi_chan.valid = 1;
@@ -1028,7 +957,7 @@
ep_type = UE_GET_ISO_TYPE(ed1->bmAttributes);
ep_sync = 0;
- if ((sc->sc_quirks & UQ_AU_INP_ASYNC) &&
+ if ((sc->sc_uq_au_inp_async) &&
(ep_dir == UE_DIR_IN) && (ep_type == UE_ISO_ADAPT)) {
ep_type = UE_ISO_ASYNC;
}
@@ -1105,7 +1034,7 @@
&(sc->sc_rec_chan) :
&(sc->sc_play_chan);
- if ((chan->valid == 0) && usbd_get_iface(udev, curidx)) {
+ if ((chan->valid == 0) && usb2_get_iface(udev, curidx)) {
chan->valid = 1;
#ifdef USB_DEBUG
@@ -1133,7 +1062,7 @@
chan->iface_index = curidx;
chan->iface_alt_index = alt_index;
- chan->usb_cfg =
+ chan->usb2_cfg =
(ep_dir == UE_DIR_IN) ?
((fps == 1000) ?
uaudio_cfg_record_full_speed :
@@ -1167,11 +1096,11 @@
}
static void
-uaudio_chan_fill_info(struct uaudio_softc *sc, struct usbd_device *udev)
+uaudio_chan_fill_info(struct uaudio_softc *sc, struct usb2_device *udev)
{
uint32_t rate = uaudio_default_rate;
uint32_t z;
- uint16_t fps = (usbd_get_speed(udev) == USB_SPEED_HIGH) ? 8000 : 1000;
+ uint16_t fps = (usb2_get_speed(udev) == USB_SPEED_HIGH) ? 8000 : 1000;
uint8_t bits = uaudio_default_bits;
uint8_t y;
uint8_t channels = uaudio_default_channels;
@@ -1206,7 +1135,7 @@
}
static void
-uaudio_chan_play_callback(struct usbd_xfer *xfer)
+uaudio_chan_play_callback(struct usb2_xfer *xfer)
{
struct uaudio_chan *ch = xfer->priv_sc;
uint32_t *p_len = xfer->frlengths;
@@ -1214,8 +1143,8 @@
uint32_t total = (ch->bytes_per_frame * xfer->nframes);
uint32_t offset;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
tr_transferred:
if (xfer->actlen < xfer->sumlen) {
DPRINTF(0, "short transfer, "
@@ -1223,7 +1152,7 @@
}
chn_intr(ch->pcm_ch);
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
if (ch->bytes_per_frame > xfer->max_frame_size) {
DPRINTF(0, "bytes per transfer, %d, "
"exceeds maximum, %d!\n",
@@ -1249,7 +1178,7 @@
if (n > total) {
n = total;
}
- usbd_copy_in(xfer->frbuffers, offset, ch->cur, n);
+ usb2_copy_in(xfer->frbuffers, offset, ch->cur, n);
total -= n;
ch->cur += n;
@@ -1260,11 +1189,11 @@
}
}
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error == USBD_ERR_CANCELLED) {
+ if (xfer->error == USB_ERR_CANCELLED) {
return;
}
goto tr_transferred;
@@ -1272,7 +1201,7 @@
}
static void
-uaudio_chan_record_callback(struct usbd_xfer *xfer)
+uaudio_chan_record_callback(struct usb2_xfer *xfer)
{
struct uaudio_chan *ch = xfer->priv_sc;
uint32_t *p_len = xfer->frlengths;
@@ -1282,8 +1211,8 @@
uint32_t offset0;
uint32_t offset1;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
tr_transferred:
if (xfer->actlen < total) {
DPRINTF(0, "short transfer, "
@@ -1305,7 +1234,7 @@
if (m > p_len[n]) {
m = p_len[n];
}
- usbd_copy_out(xfer->frbuffers, offset1, ch->cur, m);
+ usb2_copy_out(xfer->frbuffers, offset1, ch->cur, m);
p_len[n] -= m;
offset1 += m;
@@ -1321,7 +1250,7 @@
chn_intr(ch->pcm_ch);
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
if (ch->bytes_per_frame > xfer->max_frame_size) {
DPRINTF(0, "bytes per transfer, %d, "
"exceeds maximum, %d!\n",
@@ -1337,11 +1266,11 @@
DPRINTF(0, "no buffer!\n");
return;
}
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error == USBD_ERR_CANCELLED) {
+ if (xfer->error == USB_ERR_CANCELLED) {
return;
}
goto tr_transferred;
@@ -1357,7 +1286,7 @@
uint8_t endpoint;
uint8_t iface_index;
uint8_t alt_index;
- usbd_status_t err;
+ usb2_error_t err;
ch->buf = malloc(sc->sc_buffer_size, M_DEVBUF, M_WAITOK | M_ZERO);
@@ -1405,13 +1334,13 @@
DPRINTF(0, "endpoint=0x%02x, speed=%d, iface=%d alt=%d\n",
endpoint, ch->sample_rate, iface_index, alt_index);
- err = usbd_set_alt_interface_index(sc->sc_udev, iface_index, alt_index);
+ err = usb2_set_alt_interface_index(sc->sc_udev, iface_index, alt_index);
if (err) {
DPRINTF(0, "setting of alternate index failed: %s!\n",
- usbd_errstr(err));
+ usb2_errstr(err));
goto error;
}
- USBD_SET_IFACE_NO_PROBE(sc->sc_udev, iface_index);
+ usb2_set_parent_iface(sc->sc_udev, iface_index, sc->sc_mixer_iface_index);
/*
* If just one sampling rate is supported,
@@ -1427,8 +1356,8 @@
DPRINTF(0, "setting of sample rate failed! (continuing anyway)\n");
}
}
- if (usbd_transfer_setup(sc->sc_udev, &iface_index, ch->xfer,
- ch->usb_cfg, UAUDIO_NCHANBUFS, ch, ch->pcm_mtx)) {
+ if (usb2_transfer_setup(sc->sc_udev, &iface_index, ch->xfer,
+ ch->usb2_cfg, UAUDIO_NCHANBUFS, ch, ch->pcm_mtx)) {
DPRINTF(0, "could not allocate USB transfers!\n");
goto error;
}
@@ -1446,7 +1375,7 @@
free(ch->buf, M_DEVBUF);
ch->buf = NULL;
}
- usbd_transfer_unsetup(ch->xfer, UAUDIO_NCHANBUFS);
+ usb2_transfer_unsetup(ch->xfer, UAUDIO_NCHANBUFS);
ch->valid = 0;
@@ -1533,10 +1462,10 @@
#error "please update code"
#endif
if (ch->xfer[0]) {
- usbd_transfer_start(ch->xfer[0]);
+ usb2_transfer_start(ch->xfer[0]);
}
if (ch->xfer[1]) {
- usbd_transfer_start(ch->xfer[1]);
+ usb2_transfer_start(ch->xfer[1]);
}
return (0);
}
@@ -1547,8 +1476,8 @@
#if (UAUDIO_NCHANBUFS != 2)
#error "please update code"
#endif
- usbd_transfer_stop(ch->xfer[0]);
- usbd_transfer_stop(ch->xfer[1]);
+ usb2_transfer_stop(ch->xfer[0]);
+ usb2_transfer_stop(ch->xfer[1]);
return (0);
}
@@ -1639,7 +1568,7 @@
const struct uaudio_terminal_node *iot, int id)
{
#ifdef USB_DEBUG
- const struct usb_audio_input_terminal *d = iot[id].u.it;
+ const struct usb2_audio_input_terminal *d = iot[id].u.it;
DPRINTF(2, "bTerminalId=%d wTerminalType=0x%04x "
"bAssocTerminal=%d bNrChannels=%d wChannelConfig=%d "
@@ -1656,7 +1585,7 @@
const struct uaudio_terminal_node *iot, int id)
{
#ifdef USB_DEBUG
- const struct usb_audio_output_terminal *d = iot[id].u.ot;
+ const struct usb2_audio_output_terminal *d = iot[id].u.ot;
DPRINTF(2, "bTerminalId=%d wTerminalType=0x%04x "
"bAssocTerminal=%d bSourceId=%d iTerminal=%d\n",
@@ -1672,8 +1601,8 @@
{
struct uaudio_mixer_node mix;
- const struct usb_audio_mixer_unit_0 *d0 = iot[id].u.mu;
- const struct usb_audio_mixer_unit_1 *d1;
+ const struct usb2_audio_mixer_unit_0 *d0 = iot[id].u.mu;
+ const struct usb2_audio_mixer_unit_1 *d1;
uint32_t bno; /* bit number */
uint32_t p; /* bit number accumulator */
@@ -1756,7 +1685,7 @@
uaudio_mixer_add_selector(struct uaudio_softc *sc,
const struct uaudio_terminal_node *iot, int id)
{
- const struct usb_audio_selector_unit *d = iot[id].u.su;
+ const struct usb2_audio_selector_unit *d = iot[id].u.su;
struct uaudio_mixer_node mix;
struct uaudio_mixer_node dummy;
uint16_t i;
@@ -1797,7 +1726,7 @@
}
static uint32_t
-uaudio_mixer_feature_get_bmaControls(const struct usb_audio_feature_unit *d,
+uaudio_mixer_feature_get_bmaControls(const struct usb2_audio_feature_unit *d,
uint8_t index)
{
uint32_t temp = 0;
@@ -1822,7 +1751,7 @@
uaudio_mixer_add_feature(struct uaudio_softc *sc,
const struct uaudio_terminal_node *iot, int id)
{
- const struct usb_audio_feature_unit *d = iot[id].u.fu;
+ const struct usb2_audio_feature_unit *d = iot[id].u.fu;
struct uaudio_mixer_node mix;
uint32_t fumask;
uint32_t mmask;
@@ -1949,10 +1878,10 @@
uaudio_mixer_add_processing_updown(struct uaudio_softc *sc,
const struct uaudio_terminal_node *iot, int id)
{
- const struct usb_audio_processing_unit_0 *d0 = iot[id].u.pu;
- const struct usb_audio_processing_unit_1 *d1 =
+ const struct usb2_audio_processing_unit_0 *d0 = iot[id].u.pu;
+ const struct usb2_audio_processing_unit_1 *d1 =
(const void *)(d0->baSourceId + d0->bNrInPins);
- const struct usb_audio_processing_unit_updown *ud =
+ const struct usb2_audio_processing_unit_updown *ud =
(const void *)(d1->bmControls + d1->bControlSize);
struct uaudio_mixer_node mix;
uint8_t i;
@@ -1992,8 +1921,8 @@
uaudio_mixer_add_processing(struct uaudio_softc *sc,
const struct uaudio_terminal_node *iot, int id)
{
- const struct usb_audio_processing_unit_0 *d0 = iot[id].u.pu;
- const struct usb_audio_processing_unit_1 *d1 =
+ const struct usb2_audio_processing_unit_0 *d0 = iot[id].u.pu;
+ const struct usb2_audio_processing_unit_1 *d1 =
(const void *)(d0->baSourceId + d0->bNrInPins);
struct uaudio_mixer_node mix;
uint16_t ptype;
@@ -2038,15 +1967,15 @@
uaudio_mixer_add_extension(struct uaudio_softc *sc,
const struct uaudio_terminal_node *iot, int id)
{
- const struct usb_audio_extension_unit_0 *d0 = iot[id].u.eu;
- const struct usb_audio_extension_unit_1 *d1 =
+ const struct usb2_audio_extension_unit_0 *d0 = iot[id].u.eu;
+ const struct usb2_audio_extension_unit_1 *d1 =
(const void *)(d0->baSourceId + d0->bNrInPins);
struct uaudio_mixer_node mix;
DPRINTF(2, "bUnitId=%d bNrInPins=%d\n",
d0->bUnitId, d0->bNrInPins);
- if (sc->sc_quirks & UQ_AU_NO_XU) {
+ if (sc->sc_uq_au_no_xu) {
return;
}
if (d1->bControlSize == 0) {
@@ -2070,19 +1999,19 @@
static const void *
uaudio_mixer_verify_desc(const void *arg, uint32_t len)
{
- const struct usb_audio_mixer_unit_1 *d1;
- const struct usb_audio_extension_unit_1 *e1;
- const struct usb_audio_processing_unit_1 *u1;
+ const struct usb2_audio_mixer_unit_1 *d1;
+ const struct usb2_audio_extension_unit_1 *e1;
+ const struct usb2_audio_processing_unit_1 *u1;
union {
- const usb_descriptor_t *desc;
- const struct usb_audio_input_terminal *it;
- const struct usb_audio_output_terminal *ot;
- const struct usb_audio_mixer_unit_0 *mu;
- const struct usb_audio_selector_unit *su;
- const struct usb_audio_feature_unit *fu;
- const struct usb_audio_processing_unit_0 *pu;
- const struct usb_audio_extension_unit_0 *eu;
+ const struct usb2_descriptor *desc;
+ const struct usb2_audio_input_terminal *it;
+ const struct usb2_audio_output_terminal *ot;
+ const struct usb2_audio_mixer_unit_0 *mu;
+ const struct usb2_audio_selector_unit *su;
+ const struct usb2_audio_feature_unit *fu;
+ const struct usb2_audio_processing_unit_0 *pu;
+ const struct usb2_audio_extension_unit_0 *eu;
} u;
u.desc = arg;
@@ -2206,7 +2135,7 @@
};
uint16_t cc;
uint8_t i;
- const struct usb_audio_cluster cl = uaudio_mixer_get_cluster(id, iot);
+ const struct usb2_audio_cluster cl = uaudio_mixer_get_cluster(id, iot);
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From hselasky at FreeBSD.org Tue Jul 1 23:36:53 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 23:36:56 2008
Subject: PERFORCE change 144450 for review
Message-ID: <200807012336.m61Narvo002646@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144450
Change 144450 by hselasky@hselasky_laptop001 on 2008/07/01 23:36:42
Workaround panic at USB sound device detach during
playback! There might be a deadlock situation here
if the USB sound device is located on the same HUB
like the mouse and keyboard, and the HUB is detached,
but else this works fine and is better than nothing.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/sound/uaudio2.c#3 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/sound/uaudio2.c#3 (text+ko) ====
@@ -661,11 +661,6 @@
device_printf(dev, "No midi sequencer\n");
}
- if (sc->sc_play_chan.valid ||
- sc->sc_rec_chan.valid) {
- device_printf(dev, "WARNING: Unplugging the device while "
- "it is in use will cause a panic!\n");
- }
DPRINTF(0, "doing child attach\n");
/* attach the children */
@@ -760,6 +755,7 @@
struct uaudio_softc *sc = device_get_softc(device_get_parent(dev));
int error = 0;
+repeat:
if (sc->sc_pcm_registered) {
error = pcm_unregister(dev);
} else {
@@ -769,8 +765,11 @@
}
if (error) {
- panic("Please don't detach your sound device "
- "while it is in use. This is not supported yet!\n");
+ device_printf(dev, "Waiting for sound application to exit!\n");
+ mtx_lock(&Giant);
+ usb2_pause_mtx(&Giant, 2000);
+ mtx_unlock(&Giant);
+ goto repeat; /* try again */
}
return (0); /* success */
}
From hselasky at FreeBSD.org Tue Jul 1 23:43:00 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Tue Jul 1 23:43:02 2008
Subject: PERFORCE change 144451 for review
Message-ID: <200807012342.m61NgxUU003398@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144451
Change 144451 by hselasky@hselasky_laptop001 on 2008/07/01 23:42:40
- Fix some synchronisation issues.
- Remove a debug "usb2_pause_mtx()".
- Add code to automatically decide if IOCTLs should
be merged or split when two USB FIFOs are opened
in Read+Write mode.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/controller/at91dci_atmelarm.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ehci2_pci.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_atmelarm.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_pci.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uhci2_pci.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/usb2_bus.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/usb2_controller.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uss820dci_pccard.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#7 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#7 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#8 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/controller/at91dci_atmelarm.c#4 (text+ko) ====
@@ -210,7 +210,6 @@
goto error;
}
device_set_ivars(sc->sc_dci.sc_bus.bdev, &(sc->sc_dci.sc_bus));
- device_set_softc(sc->sc_dci.sc_bus.bdev, &(sc->sc_dci.sc_bus));
err = usb2_config_td_setup(&(sc->sc_dci.sc_config_td), sc,
&(sc->sc_dci.sc_bus.mtx), NULL, 0, 4);
==== //depot/projects/usb/src/sys/dev/usb2/controller/ehci2_pci.c#4 (text+ko) ====
@@ -287,7 +287,6 @@
goto error;
}
device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
- device_set_softc(sc->sc_bus.bdev, &sc->sc_bus);
/*
* ehci_pci_match will never return NULL if ehci_pci_probe
==== //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_atmelarm.c#4 (text) ====
@@ -108,7 +108,6 @@
goto error;
}
device_set_ivars(sc->sc_ohci.sc_bus.bdev, &(sc->sc_ohci.sc_bus));
- device_set_softc(sc->sc_ohci.sc_bus.bdev, &(sc->sc_ohci.sc_bus));
strlcpy(sc->sc_ohci.sc_vendor, "Atmel", sizeof(sc->sc_ohci.sc_vendor));
==== //depot/projects/usb/src/sys/dev/usb2/controller/ohci2_pci.c#4 (text+ko) ====
@@ -235,7 +235,6 @@
goto error;
}
device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
- device_set_softc(sc->sc_bus.bdev, &sc->sc_bus);
/*
* ohci_pci_match will never return NULL if ohci_pci_probe
==== //depot/projects/usb/src/sys/dev/usb2/controller/uhci2_pci.c#4 (text+ko) ====
@@ -288,7 +288,6 @@
goto error;
}
device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
- device_set_softc(sc->sc_bus.bdev, &sc->sc_bus);
/*
* uhci_pci_match must never return NULL if uhci_pci_probe
==== //depot/projects/usb/src/sys/dev/usb2/controller/usb2_bus.h#2 (text+ko) ====
@@ -75,7 +75,6 @@
uint8_t usbrev; /* USB revision. See "USB_REV_XXX". */
uint8_t devices_max; /* maximum number of USB devices */
- uint8_t ready; /* set when USB BUS is ready */
uint8_t do_probe; /* set if USB BUS should be re-probed */
union {
==== //depot/projects/usb/src/sys/dev/usb2/controller/usb2_controller.c#4 (text+ko) ====
@@ -50,7 +50,6 @@
static void usb2_attach_sub(device_t dev, struct usb2_bus *bus);
static void usb2_post_init(void *arg);
-static void usb2_bus_init(void *arg);
static void usb2_bus_mem_flush_all_cb(struct usb2_bus *bus, struct usb2_page_cache *pc, struct usb2_page *pg, uint32_t size, uint32_t align);
static void usb2_bus_mem_alloc_all_cb(struct usb2_bus *bus, struct usb2_page_cache *pc, struct usb2_page *pg, uint32_t size, uint32_t align);
static void usb2_bus_mem_free_all_cb(struct usb2_bus *bus, struct usb2_page_cache *pc, struct usb2_page *pg, uint32_t size, uint32_t align);
@@ -112,19 +111,20 @@
static int
usb2_attach(device_t dev)
{
- struct usb2_bus *bus = device_get_softc(dev);
+ struct usb2_bus *bus = device_get_ivars(dev);
DPRINTF(0, "\n");
- mtx_lock(&Giant);
+ if (bus == NULL) {
+ DPRINTF(-1, "USB device has no ivars\n");
+ return (ENXIO);
+ }
if (usb2_post_init_called) {
mtx_lock(&Giant);
usb2_attach_sub(dev, bus);
mtx_unlock(&Giant);
usb2_needs_explore(bus, 1);
}
- mtx_unlock(&Giant);
-
return (0); /* return success */
}
@@ -138,6 +138,10 @@
DPRINTF(0, "\n");
+ if (bus == NULL) {
+ /* was never setup properly */
+ return (0);
+ }
/* Let the USB explore process detach all devices. */
mtx_lock(&(bus->mtx));
@@ -156,9 +160,6 @@
usb2_proc_unsetup(&(bus->explore_proc));
- /* clear the softc */
- device_set_softc(dev, NULL);
-
return (0);
}
@@ -218,8 +219,10 @@
bus = ((struct usb2_bus_msg *)pm)->bus;
udev = bus->devices[USB_ROOT_HUB_ADDR];
dev = bus->bdev;
+ /* clear the softc */
+ device_set_softc(dev, NULL);
+ /* clear bdev variable */
bus->bdev = NULL;
- bus->ready = 0;
mtx_unlock(&(bus->mtx));
mtx_lock(&Giant);
@@ -231,7 +234,9 @@
* Free USB Root device, but not any sub-devices, hence they
* are freed by the caller of this function:
*/
+ sx_xlock(udev->default_sx + 1);
usb2_detach_device(udev, USB_IFACE_INDEX_ANY, 0);
+ sx_unlock(udev->default_sx + 1);
usb2_free_device(udev);
mtx_unlock(&Giant);
@@ -320,8 +325,8 @@
&(bus->mtx), USB_PRI_MED)) {
printf("WARNING: Creation of USB explore process failed.\n");
}
- /* set ready flag */
- bus->ready = 1;
+ /* set softc - we are ready */
+ device_set_softc(dev, bus);
return;
}
@@ -342,16 +347,20 @@
mtx_lock(&Giant);
+ usb2_devclass_ptr = devclass_find("usbus");
+
dc = usb2_devclass_ptr;
if (dc) {
max = devclass_get_maxunit(dc) + 1;
for (n = 0; n != max; n++) {
dev = devclass_get_device(dc, n);
if (dev && device_is_attached(dev)) {
- bus = device_get_softc(dev);
- mtx_lock(&Giant);
- usb2_attach_sub(dev, bus);
- mtx_unlock(&Giant);
+ bus = device_get_ivars(dev);
+ if (bus) {
+ mtx_lock(&Giant);
+ usb2_attach_sub(dev, bus);
+ mtx_unlock(&Giant);
+ }
}
}
} else {
@@ -369,21 +378,6 @@
}
SYSINIT(usb2_post_init, SI_SUB_KICK_SCHEDULER, SI_ORDER_ANY, usb2_post_init, NULL);
-
-/*------------------------------------------------------------------------*
- * usb2_bus_init
- *
- * This function is called before the USB system is started.
- *------------------------------------------------------------------------*/
-static void
-usb2_bus_init(void *arg)
-{
- /* register our devclass */
- usb2_devclass_ptr = devclass_find("usbus");
- return;
-}
-
-SYSINIT(usb2_bus_init, SI_SUB_DRIVERS, SI_ORDER_FIRST, usb2_bus_init, NULL);
SYSUNINIT(usb2_bus_unload, SI_SUB_KLD, SI_ORDER_ANY, usb2_bus_unload, NULL);
/*------------------------------------------------------------------------*
==== //depot/projects/usb/src/sys/dev/usb2/controller/uss820dci_pccard.c#4 (text+ko) ====
@@ -189,7 +189,6 @@
goto error;
}
device_set_ivars(sc->sc_bus.bdev, &(sc->sc_bus));
- device_set_softc(sc->sc_bus.bdev, &(sc->sc_bus));
err = usb2_config_td_setup(&(sc->sc_config_td), sc,
&(sc->sc_bus.mtx), NULL, 0, 4);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#7 (text+ko) ====
@@ -314,10 +314,6 @@
DPRINTF(1, "no bus\n");
goto error;
}
- if (ploc->bus->ready == 0) {
- DPRINTF(1, "not ready\n");
- goto error;
- }
if (ploc->dev_index >= ploc->bus->devices_max) {
DPRINTF(1, "invalid dev index\n");
goto error;
@@ -941,7 +937,11 @@
return;
}
if (usb2_last_devloc != (uint32_t)(0 - 1)) {
- DPRINTF(-1, "Clone race!\n");
+ /*
+ * XXX can we assume that the clone and open operation is
+ * atomic ?
+ */
+ DPRINTF(1, "Clone race!\n");
}
usb2_last_devloc = usb2_path_convert(name +
sizeof(USB_DEVICE_NAME) - 1);
@@ -1083,7 +1083,10 @@
{
struct usb2_location loc;
int fflags;
+ int err_rx;
+ int err_tx;
int err;
+ uint8_t is_common = 0;
err = usb2_ref_device(fp, &loc, 0);;
if (err) {
@@ -1093,19 +1096,49 @@
DPRINTF(1, "fflags=%u, cmd=0x%lx\n", fflags, cmd);
- if ((fflags & FREAD) && (err == 0)) {
- err = usb2_ioctl_f_sub(loc.rxfifo, cmd, addr, td);
- if (err) {
- err = (loc.rxfifo->methods->f_ioctl) (
- loc.rxfifo, cmd, addr, fflags & ~FWRITE, td);
+ if (fflags & FREAD) {
+ if (fflags & FWRITE) {
+ /*
+ * Automagically figure out if we have an IOCTL that
+ * should not be replicated to both FIFOs:
+ */
+ if ((loc.rxfifo->priv_sc0 ==
+ loc.txfifo->priv_sc0) &&
+ (loc.rxfifo->priv_sc1 ==
+ loc.txfifo->priv_sc1) &&
+ (loc.rxfifo->methods ==
+ loc.txfifo->methods)) {
+ is_common = 1;
+ }
+ }
+ err_rx = usb2_ioctl_f_sub(loc.rxfifo, cmd, addr, td);
+ if (err_rx == ENOTTY) {
+ err_rx = (loc.rxfifo->methods->f_ioctl) (
+ loc.rxfifo, cmd, addr,
+ is_common ? fflags : (fflags & ~FWRITE), td);
}
+ } else {
+ err_rx = 0;
}
- if ((fflags & FWRITE) && (err == 0)) {
- err = usb2_ioctl_f_sub(loc.txfifo, cmd, addr, td);
- if (err) {
- err = (loc.txfifo->methods->f_ioctl) (
- loc.txfifo, cmd, addr, fflags & ~FREAD, td);
+ if (fflags & FWRITE) {
+ err_tx = usb2_ioctl_f_sub(loc.txfifo, cmd, addr, td);
+ if (err_tx == ENOTTY) {
+ if (is_common)
+ err_tx = 0; /* already handled this IOCTL */
+ else
+ err_tx = (loc.txfifo->methods->f_ioctl) (
+ loc.txfifo, cmd, addr, fflags & ~FREAD, td);
}
+ } else {
+ err_tx = 0;
+ }
+
+ if (err_rx) {
+ err = err_rx;
+ } else if (err_tx) {
+ err = err_tx;
+ } else {
+ err = 0; /* no error */
}
usb2_unref_device(&loc);
return (err);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#5 (text+ko) ====
@@ -571,9 +571,6 @@
DPRINTF(0, "characteristics=0x%04x\n",
UGETW(hd.wHubCharacteristics));
} else {
-
- usb2_pause_mtx(&Giant, 100);
-
err = usb2_req_get_device_status
(udev, &Giant, &ds);
if (err) {
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#7 (text+ko) ====
@@ -1282,8 +1282,8 @@
{
DPRINTF(0, "\n");
- if (bus->ready == 0) {
- DPRINTF(0, "BUS is not ready\n");
+ if (bus == NULL) {
+ DPRINTF(0, "No bus pointer!\n");
return;
}
mtx_lock(&(bus->mtx));
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#8 (text+ko) ====
@@ -1885,6 +1885,14 @@
if (pq->curr == xfer) {
/* start the next USB transfer, if any */
usb2_command_wrapper(pq, NULL);
+
+ if (pq->curr || TAILQ_FIRST(&(pq->head))) {
+ /* there is another USB transfer waiting */
+ } else {
+ /* this is the last USB transfer */
+ /* clear isochronous sync flag */
+ xfer->pipe->is_synced = 0;
+ }
}
}
/* keep some statistics */
@@ -1896,13 +1904,6 @@
[xfer->pipe->edesc->bmAttributes & UE_XFERTYPE]++;
}
- /*
- * if this is the last USB transfer on the PIPE queue we are no
- * longer synced:
- */
- if (TAILQ_FIRST(&(xfer->pipe->pipe_q.head)) == NULL) {
- xfer->pipe->is_synced = 0;
- }
/* call the USB transfer callback */
usb2_command_wrapper(&(xfer->usb2_root->done_q), xfer);
return;
From peter at FreeBSD.org Wed Jul 2 01:12:37 2008
From: peter at FreeBSD.org (Peter Wemm)
Date: Wed Jul 2 01:12:41 2008
Subject: PERFORCE change 144452 for review
Message-ID: <200807020112.m621CVOM023449@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144452
Change 144452 by peter@peter_daintree on 2008/07/02 01:12:05
IFC @144449
Affected files ...
.. //depot/projects/bike_sched/sys/Makefile#5 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/bpf_jit_machdep.c#2 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/bpf_jit_machdep.h#2 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/exception.S#4 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/genassym.c#4 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/identcpu.c#5 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/local_apic.c#5 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/machdep.c#9 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/mem.c#3 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/minidump_machdep.c#4 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/pmap.c#11 integrate
.. //depot/projects/bike_sched/sys/amd64/amd64/trap.c#6 integrate
.. //depot/projects/bike_sched/sys/amd64/conf/GENERIC#8 integrate
.. //depot/projects/bike_sched/sys/amd64/conf/NOTES#8 integrate
.. //depot/projects/bike_sched/sys/amd64/include/clock.h#6 integrate
.. //depot/projects/bike_sched/sys/amd64/include/iodev.h#2 integrate
.. //depot/projects/bike_sched/sys/amd64/include/memdev.h#2 integrate
.. //depot/projects/bike_sched/sys/amd64/include/pcpu.h#3 integrate
.. //depot/projects/bike_sched/sys/amd64/include/pmap.h#4 integrate
.. //depot/projects/bike_sched/sys/amd64/include/pmc_mdep.h#3 integrate
.. //depot/projects/bike_sched/sys/amd64/include/stack.h#2 integrate
.. //depot/projects/bike_sched/sys/amd64/include/vmparam.h#4 integrate
.. //depot/projects/bike_sched/sys/amd64/isa/clock.c#7 integrate
.. //depot/projects/bike_sched/sys/amd64/linux32/linux32_dummy.c#5 integrate
.. //depot/projects/bike_sched/sys/amd64/linux32/linux32_proto.h#7 integrate
.. //depot/projects/bike_sched/sys/amd64/linux32/linux32_syscall.h#7 integrate
.. //depot/projects/bike_sched/sys/amd64/linux32/linux32_sysent.c#7 integrate
.. //depot/projects/bike_sched/sys/amd64/linux32/syscalls.master#7 integrate
.. //depot/projects/bike_sched/sys/arm/arm/identcpu.c#3 integrate
.. //depot/projects/bike_sched/sys/arm/arm/intr.c#5 integrate
.. //depot/projects/bike_sched/sys/arm/arm/machdep.c#5 integrate
.. //depot/projects/bike_sched/sys/arm/arm/pmap.c#6 integrate
.. //depot/projects/bike_sched/sys/arm/at91/at91.c#4 integrate
.. //depot/projects/bike_sched/sys/arm/at91/at91_twi.c#3 integrate
.. //depot/projects/bike_sched/sys/arm/at91/if_ate.c#5 integrate
.. //depot/projects/bike_sched/sys/arm/at91/uart_dev_at91usart.c#6 integrate
.. //depot/projects/bike_sched/sys/arm/conf/AVILA#6 integrate
.. //depot/projects/bike_sched/sys/arm/conf/BWCT#4 integrate
.. //depot/projects/bike_sched/sys/arm/conf/CRB#4 integrate
.. //depot/projects/bike_sched/sys/arm/conf/EP80219#4 integrate
.. //depot/projects/bike_sched/sys/arm/conf/GUMSTIX#1 branch
.. //depot/projects/bike_sched/sys/arm/conf/GUMSTIX.hints#1 branch
.. //depot/projects/bike_sched/sys/arm/conf/HL200#4 integrate
.. //depot/projects/bike_sched/sys/arm/conf/IQ31244#6 integrate
.. //depot/projects/bike_sched/sys/arm/conf/KB920X#7 integrate
.. //depot/projects/bike_sched/sys/arm/conf/SIMICS#6 integrate
.. //depot/projects/bike_sched/sys/arm/conf/SKYEYE#6 integrate
.. //depot/projects/bike_sched/sys/arm/include/intr.h#3 integrate
.. //depot/projects/bike_sched/sys/arm/include/memdev.h#2 integrate
.. //depot/projects/bike_sched/sys/arm/sa11x0/sa11x0_ost.c#3 integrate
.. //depot/projects/bike_sched/sys/arm/xscale/i8134x/crb_machdep.c#4 integrate
.. //depot/projects/bike_sched/sys/arm/xscale/i8134x/i81342_pci.c#2 integrate
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/files.pxa#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/if_smc_smi.c#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/pxa_gpio.c#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/pxa_icu.c#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/pxa_machdep.c#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/pxa_obio.c#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/pxa_smi.c#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/pxa_space.c#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/pxa_timer.c#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/pxareg.h#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/pxavar.h#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/std.pxa#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/uart_bus_pxa.c#1 branch
.. //depot/projects/bike_sched/sys/arm/xscale/pxa/uart_cpu_pxa.c#1 branch
.. //depot/projects/bike_sched/sys/boot/Makefile.inc#1 branch
.. //depot/projects/bike_sched/sys/boot/arm/Makefile.inc#1 branch
.. //depot/projects/bike_sched/sys/boot/arm/at91/Makefile.inc#3 integrate
.. //depot/projects/bike_sched/sys/boot/common/ufsread.c#3 integrate
.. //depot/projects/bike_sched/sys/boot/efi/Makefile.inc#2 integrate
.. //depot/projects/bike_sched/sys/boot/forth/loader.conf#5 integrate
.. //depot/projects/bike_sched/sys/boot/i386/Makefile.inc#3 integrate
.. //depot/projects/bike_sched/sys/boot/i386/boot2/boot2.c#4 integrate
.. //depot/projects/bike_sched/sys/boot/i386/libi386/biossmap.c#3 integrate
.. //depot/projects/bike_sched/sys/boot/i386/libi386/time.c#2 integrate
.. //depot/projects/bike_sched/sys/boot/i386/loader/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/boot/ia64/Makefile.inc#2 integrate
.. //depot/projects/bike_sched/sys/boot/ia64/common/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/boot/ia64/efi/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/boot/ia64/ski/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/boot/ofw/Makefile.inc#1 branch
.. //depot/projects/bike_sched/sys/boot/pc98/Makefile.inc#3 integrate
.. //depot/projects/bike_sched/sys/boot/pc98/boot2/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/boot/pc98/loader/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/boot/powerpc/Makefile.inc#1 branch
.. //depot/projects/bike_sched/sys/boot/powerpc/ofw/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/boot/sparc64/Makefile.inc#2 integrate
.. //depot/projects/bike_sched/sys/boot/sparc64/loader/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/boot/uboot/Makefile.inc#1 branch
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/kern/opensolaris.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/kern/opensolaris_cmn_err.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/kern/opensolaris_string.c#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/machine/endian.h#2 delete
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/rpc/xdr.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/acl.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/atomic.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/bitmap.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/byteorder.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/callb.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/cmn_err.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/cpupart.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/cpuvar.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/cpuvar_defs.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/cyclic.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/cyclic_impl.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/dkio.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/feature_tests.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/kmem.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/lock.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/mntent.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/objfs.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/pcpu.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/sema.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/sysmacros.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/taskq.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/compat/opensolaris/sys/taskq_impl.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/ctf/ctf_mod.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/ctf/ctf_subr.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/dtrace/lockstat.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/dtrace/profile.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/dtrace/sdt_subr.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/dtrace/systrace.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/refcount.c#2 integrate
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c#2 integrate
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/refcount.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#2 integrate
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#3 integrate
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/cmn_err.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/cpupart.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/cpuvar.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/ctf.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/ctf_api.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/debug.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace_impl.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/fasttrap.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/isa_defs.h#2 integrate
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/sdt.h#2 delete
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/common/sys/vmem.h#2 delete
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/intel/sys/fasttrap_isa.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/contrib/opensolaris/uts/sparc/sys/fasttrap_isa.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/cyclic/amd64/cyclic_machdep.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/cyclic/cyclic.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/cyclic/cyclic_test.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/cyclic/i386/cyclic_machdep.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtmalloc/dtmalloc.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/amd64/dis_tables.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/amd64/dis_tables.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/amd64/dtrace_asm.S#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/amd64/dtrace_isa.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/amd64/dtrace_subr.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/amd64/instr_size.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_anon.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_cddl.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_clone.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_debug.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_hacks.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_ioctl.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_load.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_modevent.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_sysctl.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_test.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_unload.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/dtrace_vtime.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/i386/dis_tables.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/i386/dis_tables.h#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/i386/dtrace_asm.S#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/i386/dtrace_isa.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/i386/dtrace_subr.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/dtrace/i386/instr_size.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/fbt/fbt.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/profile/profile.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/prototype.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/sdt/sdt.c#1 branch
.. //depot/projects/bike_sched/sys/cddl/dev/systrace/systrace.c#1 branch
.. //depot/projects/bike_sched/sys/compat/linux/linux_emul.c#2 integrate
.. //depot/projects/bike_sched/sys/compat/linux/linux_emul.h#2 integrate
.. //depot/projects/bike_sched/sys/compat/linux/linux_file.c#7 integrate
.. //depot/projects/bike_sched/sys/compat/linux/linux_futex.c#4 integrate
.. //depot/projects/bike_sched/sys/compat/linux/linux_futex.h#3 integrate
.. //depot/projects/bike_sched/sys/compat/linux/linux_mib.c#3 integrate
.. //depot/projects/bike_sched/sys/compat/linux/linux_misc.c#8 integrate
.. //depot/projects/bike_sched/sys/compat/linux/linux_stats.c#5 integrate
.. //depot/projects/bike_sched/sys/compat/linux/linux_util.c#5 integrate
.. //depot/projects/bike_sched/sys/compat/ndis/subr_ndis.c#5 integrate
.. //depot/projects/bike_sched/sys/compat/ndis/subr_ntoskrnl.c#4 integrate
.. //depot/projects/bike_sched/sys/compat/pecoff/imgact_pecoff.c#5 delete
.. //depot/projects/bike_sched/sys/compat/pecoff/imgact_pecoff.h#2 delete
.. //depot/projects/bike_sched/sys/compat/svr4/svr4_misc.c#6 integrate
.. //depot/projects/bike_sched/sys/conf/Makefile.amd64#4 integrate
.. //depot/projects/bike_sched/sys/conf/NOTES#9 integrate
.. //depot/projects/bike_sched/sys/conf/files#12 integrate
.. //depot/projects/bike_sched/sys/conf/files.amd64#6 integrate
.. //depot/projects/bike_sched/sys/conf/files.i386#6 integrate
.. //depot/projects/bike_sched/sys/conf/files.pc98#5 integrate
.. //depot/projects/bike_sched/sys/conf/files.powerpc#5 integrate
.. //depot/projects/bike_sched/sys/conf/files.sparc64#4 integrate
.. //depot/projects/bike_sched/sys/conf/files.sun4v#3 integrate
.. //depot/projects/bike_sched/sys/conf/kern.mk#4 integrate
.. //depot/projects/bike_sched/sys/conf/kern.post.mk#5 integrate
.. //depot/projects/bike_sched/sys/conf/kern.pre.mk#5 integrate
.. //depot/projects/bike_sched/sys/conf/ldscript.mips#2 integrate
.. //depot/projects/bike_sched/sys/conf/ldscript.mips.cfe#2 integrate
.. //depot/projects/bike_sched/sys/conf/newvers.sh#3 integrate
.. //depot/projects/bike_sched/sys/conf/options#9 integrate
.. //depot/projects/bike_sched/sys/conf/options.amd64#4 integrate
.. //depot/projects/bike_sched/sys/conf/options.arm#4 integrate
.. //depot/projects/bike_sched/sys/conf/options.i386#4 integrate
.. //depot/projects/bike_sched/sys/conf/options.pc98#4 integrate
.. //depot/projects/bike_sched/sys/contrib/dev/iwn/LICENSE#1 branch
.. //depot/projects/bike_sched/sys/contrib/dev/iwn/iwlwifi-4965-4.44.17.fw.uu#1 branch
.. //depot/projects/bike_sched/sys/contrib/dev/ral/LICENSE#1 branch
.. //depot/projects/bike_sched/sys/contrib/dev/ral/Makefile#1 branch
.. //depot/projects/bike_sched/sys/contrib/dev/ral/rt2561.fw.uu#1 branch
.. //depot/projects/bike_sched/sys/contrib/dev/ral/rt2561s.fw.uu#1 branch
.. //depot/projects/bike_sched/sys/contrib/dev/ral/rt2661.fw.uu#1 branch
.. //depot/projects/bike_sched/sys/contrib/dev/ral/rt2661_ucode.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/dev/ral/rt2860.fw.uu#1 branch
.. //depot/projects/bike_sched/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c#3 integrate
.. //depot/projects/bike_sched/sys/contrib/pf/net/pf.c#4 integrate
.. //depot/projects/bike_sched/sys/contrib/pf/net/pf_ioctl.c#4 integrate
.. //depot/projects/bike_sched/sys/contrib/rdma/core_priv.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_addr.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_cache.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_cm.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_fmr_pool.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_mad.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_marshall.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_pack.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_sa.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_smi.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_umem.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_user_cm.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_user_mad.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_user_sa.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_user_verbs.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/ib_verbs.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/iw_cm.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/krping/getopt.c#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/krping/getopt.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/krping/krping.c#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/krping/krping.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/krping/krping_dev.c#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/rdma_addr.c#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/rdma_cache.c#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/rdma_cm.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/rdma_cm_ib.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/rdma_cma.c#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/rdma_device.c#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/rdma_iwcm.c#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/rdma_user_cm.h#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/rdma_verbs.c#1 branch
.. //depot/projects/bike_sched/sys/contrib/rdma/types.h#1 branch
.. //depot/projects/bike_sched/sys/ddb/db_capture.c#2 integrate
.. //depot/projects/bike_sched/sys/ddb/db_ps.c#6 integrate
.. //depot/projects/bike_sched/sys/dev/aac/aac.c#8 integrate
.. //depot/projects/bike_sched/sys/dev/aac/aac_pci.c#6 integrate
.. //depot/projects/bike_sched/sys/dev/acpi_support/acpi_asus.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/acpi_support/acpi_ibm.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/acpi_support/acpi_sony.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/acpica/acpi_thermal.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/age/if_age.c#1 branch
.. //depot/projects/bike_sched/sys/dev/age/if_agereg.h#1 branch
.. //depot/projects/bike_sched/sys/dev/age/if_agevar.h#1 branch
.. //depot/projects/bike_sched/sys/dev/agp/agp_i810.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ata/ata-all.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/ata/ata-chipset.c#7 integrate
.. //depot/projects/bike_sched/sys/dev/ata/ata-disk.c#6 integrate
.. //depot/projects/bike_sched/sys/dev/ata/ata-lowlevel.c#6 integrate
.. //depot/projects/bike_sched/sys/dev/ata/ata-pci.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/ata/ata-pci.h#6 integrate
.. //depot/projects/bike_sched/sys/dev/ata/ata-queue.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/ata/atapi-cd.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/ata/atapi-fd.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/ata/atapi-tape.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/ath/ah_osdep.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/ath/ah_osdep.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ath/ath_rate/amrr/amrr.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ath/ath_rate/amrr/amrr.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ath/ath_rate/onoe/onoe.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ath/ath_rate/onoe/onoe.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/ath/ath_rate/sample/sample.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ath/ath_rate/sample/sample.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/ath/if_ath.c#6 integrate
.. //depot/projects/bike_sched/sys/dev/ath/if_ath_pci.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/ath/if_athioctl.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/ath/if_athrate.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/ath/if_athvar.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/atkbdc/psm.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/awi/am79c930.c#2 delete
.. //depot/projects/bike_sched/sys/dev/awi/am79c930reg.h#2 delete
.. //depot/projects/bike_sched/sys/dev/awi/am79c930var.h#2 delete
.. //depot/projects/bike_sched/sys/dev/awi/awi.c#3 delete
.. //depot/projects/bike_sched/sys/dev/awi/awireg.h#2 delete
.. //depot/projects/bike_sched/sys/dev/awi/awivar.h#3 delete
.. //depot/projects/bike_sched/sys/dev/awi/if_awi_pccard.c#3 delete
.. //depot/projects/bike_sched/sys/dev/bce/if_bce.c#7 integrate
.. //depot/projects/bike_sched/sys/dev/bce/if_bcefw.h#5 integrate
.. //depot/projects/bike_sched/sys/dev/bce/if_bcereg.h#5 integrate
.. //depot/projects/bike_sched/sys/dev/bfe/if_bfe.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/bge/if_bge.c#6 integrate
.. //depot/projects/bike_sched/sys/dev/bge/if_bgereg.h#5 integrate
.. //depot/projects/bike_sched/sys/dev/bktr/bktr_i2c.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/bm/if_bm.c#1 branch
.. //depot/projects/bike_sched/sys/dev/bm/if_bmreg.h#1 branch
.. //depot/projects/bike_sched/sys/dev/bm/if_bmvar.h#1 branch
.. //depot/projects/bike_sched/sys/dev/ce/ceddk.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ce/if_ce.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ciss/ciss.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/cnw/if_cnw.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/coretemp/coretemp.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/cp/cpddk.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/cp/if_cp.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/cs/if_cs.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/cs/if_cs_isa.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/cs/if_cs_pccard.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/cs/if_csreg.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/cs/if_csvar.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/ctau/ctddk.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ctau/if_ct.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/cx/cxddk.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/cx/if_cx.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/cxgb_config.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/cxgb_l2t.c#3 delete
.. //depot/projects/bike_sched/sys/dev/cxgb/cxgb_l2t.h#3 delete
.. //depot/projects/bike_sched/sys/dev/cxgb/cxgb_main.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/cxgb_offload.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/cxgb_offload.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/cxgb_osdep.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/t3cdev.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.h#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.h#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cq.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_dbg.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_ev.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_hal.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_hal.h#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_mem.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.h#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_qp.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_resource.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_resource.h#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_user.h#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_wr.h#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_ddp.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_defs.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_l2t.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_l2t.h#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_listen.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_t3_ddp.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_tcp_offload.c#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_tcp_offload.h#1 branch
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_toepcb.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_tom.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/cxgb/ulp/tom/cxgb_tom_sysctl.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/dc/if_dc.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/dcons/dcons_os.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_82571.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_82571.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_api.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_api.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_defines.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_hw.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_ich8lan.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_ich8lan.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_osdep.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_phy.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/e1000_phy.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/em/if_em.c#6 integrate
.. //depot/projects/bike_sched/sys/dev/em/if_em.h#5 integrate
.. //depot/projects/bike_sched/sys/dev/et/if_et.c#1 branch
.. //depot/projects/bike_sched/sys/dev/et/if_etreg.h#1 branch
.. //depot/projects/bike_sched/sys/dev/et/if_etvar.h#1 branch
.. //depot/projects/bike_sched/sys/dev/ex/if_ex.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/ex/if_ex_isa.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ex/if_ex_pccard.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ex/if_exvar.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/fe/if_fe.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/fe/if_fe_cbus.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/fe/if_fe_isa.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/fe/if_fe_pccard.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/fe/if_fevar.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/firewire/firewire.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/firewire/fwohci.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/gem/if_gem.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/harp/if_harp.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore.h#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_aali.h#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_buffer.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_command.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_globals.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_if.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_include.h#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_init.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_intr.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_output.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_receive.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_slave.h#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_stats.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_stats.h#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_timer.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_transmit.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_var.h#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/fore_vcm.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/hfa_eisa.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/hfa_freebsd.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/hfa_freebsd.h#2 delete
.. //depot/projects/bike_sched/sys/dev/hfa/hfa_pci.c#3 delete
.. //depot/projects/bike_sched/sys/dev/hfa/hfa_sbus.c#2 delete
.. //depot/projects/bike_sched/sys/dev/hme/if_hme.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/hme/if_hme_pci.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/hme/if_hme_sbus.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/hme/if_hmereg.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/hme/if_hmevar.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/ichsmb/ichsmb.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ichsmb/ichsmb_pci.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ichsmb/ichsmb_var.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/idt/idt.c#2 delete
.. //depot/projects/bike_sched/sys/dev/idt/idt_harp.c#2 delete
.. //depot/projects/bike_sched/sys/dev/idt/idt_pci.c#3 delete
.. //depot/projects/bike_sched/sys/dev/idt/idtreg.h#3 delete
.. //depot/projects/bike_sched/sys/dev/idt/idtvar.h#2 delete
.. //depot/projects/bike_sched/sys/dev/ie/if_ie.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/ie/if_ie_isa.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ie/if_ievar.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ieee488/upd7210.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/if_ndis/if_ndis.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/if_ndis/if_ndisvar.h#5 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_82575.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_api.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_api.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_defines.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_hw.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_mac.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_manage.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_osdep.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_osdep.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/igb/e1000_phy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/igb/if_igb.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/igb/if_igb.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/iicbus/iicsmb.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/io/iodev.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/ipw/if_ipw.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/ipw/if_ipwvar.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/iscsi/initiator/iscsi.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/iwi/if_iwi.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/iwi/if_iwivar.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/iwn/if_iwn.c#1 branch
.. //depot/projects/bike_sched/sys/dev/iwn/if_iwnreg.h#1 branch
.. //depot/projects/bike_sched/sys/dev/iwn/if_iwnvar.h#1 branch
.. //depot/projects/bike_sched/sys/dev/ixgbe/LICENSE#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/README#1 branch
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe_82598.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe_api.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe_api.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe_common.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe_common.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe_osdep.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe_phy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe_phy.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ixgbe/ixgbe_type.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/jme/if_jme.c#1 branch
.. //depot/projects/bike_sched/sys/dev/jme/if_jmereg.h#1 branch
.. //depot/projects/bike_sched/sys/dev/jme/if_jmevar.h#1 branch
.. //depot/projects/bike_sched/sys/dev/k8temp/k8temp.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/led/led.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/malo/if_malo.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/malo/if_malo.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/md/md.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/mfi/mfi.c#7 integrate
.. //depot/projects/bike_sched/sys/dev/mfi/mfi_ioctl.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/mii/atphy.c#1 branch
.. //depot/projects/bike_sched/sys/dev/mii/atphyreg.h#1 branch
.. //depot/projects/bike_sched/sys/dev/mii/brgphy.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/mii/brgphyreg.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/mii/ciphy.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/mii/jmphy.c#1 branch
.. //depot/projects/bike_sched/sys/dev/mii/jmphyreg.h#1 branch
.. //depot/projects/bike_sched/sys/dev/mii/lxtphy.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/mii/miidevs#5 integrate
.. //depot/projects/bike_sched/sys/dev/mii/smcphy.c#1 branch
.. //depot/projects/bike_sched/sys/dev/mii/truephy.c#1 branch
.. //depot/projects/bike_sched/sys/dev/mii/truephyreg.h#1 branch
.. //depot/projects/bike_sched/sys/dev/mpt/mpt.h#5 integrate
.. //depot/projects/bike_sched/sys/dev/mpt/mpt_cam.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/mpt/mpt_pci.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/mpt/mpt_raid.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/mpt/mpt_user.c#1 branch
.. //depot/projects/bike_sched/sys/dev/nmdm/nmdm.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/nve/if_nve.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/nve/if_nvereg.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/ofw/ofw_console.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/pccard/pccard_cis.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/pci/pcivar.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/puc/pucdata.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/ral/if_ral_pci.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ral/if_ralrate.c#2 delete
.. //depot/projects/bike_sched/sys/dev/ral/if_ralrate.h#2 delete
.. //depot/projects/bike_sched/sys/dev/ral/rt2560.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/ral/rt2560reg.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/ral/rt2560var.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/ral/rt2661.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/ral/rt2661_ucode.h#2 delete
.. //depot/projects/bike_sched/sys/dev/ral/rt2661var.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/scc/scc_bfe.h#4 integrate
.. //depot/projects/bike_sched/sys/dev/scc/scc_bfe_ebus.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/scc/scc_bfe_macio.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/scc/scc_bfe_quicc.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/scc/scc_bfe_sbus.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/scc/scc_core.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/si/si.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/si/si.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/sio/sio.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/smbus/smb.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/smc/if_smc.c#1 branch
.. //depot/projects/bike_sched/sys/dev/smc/if_smcreg.h#1 branch
.. //depot/projects/bike_sched/sys/dev/smc/if_smcvar.h#1 branch
.. //depot/projects/bike_sched/sys/dev/snc/dp83932.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/snc/dp83932subr.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/snc/dp83932var.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/snc/if_sncreg.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/snp/snp.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/sound/midi/sequencer.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/sound/pci/atiixp.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/sound/pci/hda/hdac.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/sound/pcm/dsp.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/speaker/spkr.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/sym/sym_defs.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/sym/sym_fw.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/sym/sym_fw1.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/sym/sym_fw2.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/sym/sym_hipd.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/ti/if_ti.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/tx/if_tx.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/tx/if_txvar.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/uart/uart_core.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/uart/uart_dev_ns8250.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/usb/ehci.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/usb/ehcivar.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/usb/if_axe.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/usb/if_rum.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/usb/if_rumvar.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/usb/if_udav.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/usb/if_ural.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/usb/if_uralvar.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/usb/if_zyd.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/usb/if_zydreg.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/usb/ohci.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/usb/ubsa.c#6 integrate
.. //depot/projects/bike_sched/sys/dev/usb/uipaq.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/usb/umass.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/usb/ums.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/usb/uplcom.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/usb/usb.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/usb/usbdevs#9 integrate
.. //depot/projects/bike_sched/sys/dev/usb/uscanner.c#5 integrate
.. //depot/projects/bike_sched/sys/dev/usb/uxb360gp_rdesc.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/vkbd/vkbd.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/vx/if_vx.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/wi/if_wavelan_ieee.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/wi/if_wi.c#4 integrate
.. //depot/projects/bike_sched/sys/dev/wi/if_wi_pccard.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/wi/if_wi_pci.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/wi/if_wivar.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/wi/spectrum24t_cf.h#2 delete
.. //depot/projects/bike_sched/sys/dev/wpi/if_wpi.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/wpi/if_wpivar.h#3 integrate
.. //depot/projects/bike_sched/sys/dev/xe/if_xe.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/xe/if_xe_pccard.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/xe/if_xevar.h#2 integrate
.. //depot/projects/bike_sched/sys/fs/cd9660/cd9660_vnops.c#2 integrate
.. //depot/projects/bike_sched/sys/fs/devfs/devfs_devs.c#4 integrate
.. //depot/projects/bike_sched/sys/fs/devfs/devfs_int.h#3 integrate
.. //depot/projects/bike_sched/sys/fs/devfs/devfs_rule.c#4 integrate
.. //depot/projects/bike_sched/sys/fs/devfs/devfs_vnops.c#5 integrate
.. //depot/projects/bike_sched/sys/fs/fdescfs/fdesc.h#2 integrate
.. //depot/projects/bike_sched/sys/fs/fdescfs/fdesc_vfsops.c#4 integrate
.. //depot/projects/bike_sched/sys/fs/fdescfs/fdesc_vnops.c#5 integrate
.. //depot/projects/bike_sched/sys/fs/ntfs/ntfs_ihash.c#3 integrate
.. //depot/projects/bike_sched/sys/fs/ntfs/ntfs_subr.c#4 integrate
.. //depot/projects/bike_sched/sys/fs/smbfs/smbfs_node.c#4 integrate
.. //depot/projects/bike_sched/sys/fs/tmpfs/tmpfs_subr.c#3 integrate
.. //depot/projects/bike_sched/sys/fs/udf/udf_vnops.c#4 integrate
.. //depot/projects/bike_sched/sys/fs/unionfs/union.h#3 integrate
.. //depot/projects/bike_sched/sys/fs/unionfs/union_subr.c#5 integrate
.. //depot/projects/bike_sched/sys/fs/unionfs/union_vnops.c#5 integrate
.. //depot/projects/bike_sched/sys/geom/geom_dev.c#5 integrate
.. //depot/projects/bike_sched/sys/geom/geom_subr.c#5 integrate
.. //depot/projects/bike_sched/sys/geom/journal/g_journal.c#2 integrate
.. //depot/projects/bike_sched/sys/geom/part/g_part.c#5 integrate
.. //depot/projects/bike_sched/sys/geom/part/g_part.h#6 integrate
.. //depot/projects/bike_sched/sys/geom/part/g_part_apm.c#3 integrate
.. //depot/projects/bike_sched/sys/geom/part/g_part_bsd.c#3 integrate
.. //depot/projects/bike_sched/sys/geom/part/g_part_gpt.c#4 integrate
.. //depot/projects/bike_sched/sys/geom/part/g_part_if.m#3 integrate
.. //depot/projects/bike_sched/sys/geom/part/g_part_mbr.c#5 integrate
.. //depot/projects/bike_sched/sys/geom/part/g_part_pc98.c#3 integrate
.. //depot/projects/bike_sched/sys/geom/part/g_part_vtoc8.c#3 integrate
.. //depot/projects/bike_sched/sys/geom/vinum/geom_vinum_share.c#3 integrate
.. //depot/projects/bike_sched/sys/geom/virstor/g_virstor.c#2 integrate
.. //depot/projects/bike_sched/sys/i386/acpica/acpi_machdep.c#5 integrate
.. //depot/projects/bike_sched/sys/i386/bios/apm.c#4 integrate
.. //depot/projects/bike_sched/sys/i386/conf/GENERIC#8 integrate
.. //depot/projects/bike_sched/sys/i386/conf/NOTES#7 integrate
.. //depot/projects/bike_sched/sys/i386/conf/PAE#5 integrate
.. //depot/projects/bike_sched/sys/i386/cpufreq/est.c#4 integrate
.. //depot/projects/bike_sched/sys/i386/i386/bpf_jit_machdep.c#2 integrate
.. //depot/projects/bike_sched/sys/i386/i386/bpf_jit_machdep.h#2 integrate
.. //depot/projects/bike_sched/sys/i386/i386/exception.s#4 integrate
.. //depot/projects/bike_sched/sys/i386/i386/genassym.c#3 integrate
.. //depot/projects/bike_sched/sys/i386/i386/identcpu.c#6 integrate
.. //depot/projects/bike_sched/sys/i386/i386/local_apic.c#8 integrate
.. //depot/projects/bike_sched/sys/i386/i386/machdep.c#9 integrate
.. //depot/projects/bike_sched/sys/i386/i386/pmap.c#9 integrate
.. //depot/projects/bike_sched/sys/i386/i386/trap.c#7 integrate
.. //depot/projects/bike_sched/sys/i386/include/clock.h#6 integrate
.. //depot/projects/bike_sched/sys/i386/include/iodev.h#2 integrate
.. //depot/projects/bike_sched/sys/i386/include/memdev.h#2 integrate
.. //depot/projects/bike_sched/sys/i386/include/pcpu.h#3 integrate
.. //depot/projects/bike_sched/sys/i386/include/pecoff_machdep.h#2 delete
.. //depot/projects/bike_sched/sys/i386/isa/clock.c#7 integrate
.. //depot/projects/bike_sched/sys/i386/isa/pmtimer.c#3 integrate
.. //depot/projects/bike_sched/sys/i386/linux/linux_dummy.c#5 integrate
.. //depot/projects/bike_sched/sys/i386/linux/linux_proto.h#7 integrate
.. //depot/projects/bike_sched/sys/i386/linux/linux_syscall.h#7 integrate
.. //depot/projects/bike_sched/sys/i386/linux/linux_sysent.c#7 integrate
.. //depot/projects/bike_sched/sys/i386/linux/syscalls.master#7 integrate
.. //depot/projects/bike_sched/sys/i4b/capi/README#2 delete
.. //depot/projects/bike_sched/sys/i4b/capi/capi.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/capi/capi_l4if.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/capi/capi_llif.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/capi/capi_msgs.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/capi/capi_msgs.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/capi/iavc/iavc.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/capi/iavc/iavc_card.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/capi/iavc/iavc_isa.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/capi/iavc/iavc_lli.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/capi/iavc/iavc_pci.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/driver/i4b_ctl.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/driver/i4b_ing.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/driver/i4b_ipr.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/driver/i4b_isppp.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/driver/i4b_rbch.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/driver/i4b_tel.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/driver/i4b_trace.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_cause.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_debug.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_global.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_ioctl.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_isdnq931.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_l1l2.h#3 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_l2l3.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_l3l4.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_mbuf.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_rbch_ioctl.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_tel_ioctl.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/include/i4b_trace.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/i4b_hdlc.c#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/i4b_hdlc.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/i4b_l1.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/i4b_l1dmux.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/i4b_l1lib.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi/i4b_ifpi_ext.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi/i4b_ifpi_isac.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi/i4b_ifpi_l1.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi/i4b_ifpi_l1fsm.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi/i4b_ifpi_pci.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi2/i4b_ifpi2_ext.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi2/i4b_ifpi2_isacsx.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi2/i4b_ifpi2_isacsx.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi2/i4b_ifpi2_l1.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi2/i4b_ifpi2_l1fsm.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpi2/i4b_ifpi2_pci.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpnp/i4b_ifpnp_avm.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpnp/i4b_ifpnp_ext.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpnp/i4b_ifpnp_isac.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpnp/i4b_ifpnp_l1.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ifpnp/i4b_ifpnp_l1fsm.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ihfc/i4b_ihfc.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ihfc/i4b_ihfc_drv.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ihfc/i4b_ihfc_drv.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ihfc/i4b_ihfc_ext.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ihfc/i4b_ihfc_l1if.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/ihfc/i4b_ihfc_pnp.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_asuscom_ipac.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_avm_a1.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_bchan.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_ctx_s0P.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_diva.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_drn_ngo.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_dynalink.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_elsa_pcc16.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_elsa_qs1i.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_elsa_qs1p.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_hscx.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_hscx.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_ipac.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_isac.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_isac.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_isic.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_isic.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_isic_ext.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_isic_isa.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_isic_pnp.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_itk_ix1.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_l1.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_l1fsm.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_siemens_isurf.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_sws.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_tel_s016.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_tel_s0163.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_tel_s08.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/isic/i4b_usr_sti.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/itjc/i4b_hdlc.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/itjc/i4b_itjc_ext.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/itjc/i4b_itjc_isac.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/itjc/i4b_itjc_l1.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/itjc/i4b_itjc_l1fsm.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/itjc/i4b_itjc_pci.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/iwic/i4b_iwic.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/iwic/i4b_iwic_bchan.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/iwic/i4b_iwic_dchan.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/iwic/i4b_iwic_ext.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/iwic/i4b_iwic_fsm.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/iwic/i4b_iwic_l1if.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/iwic/i4b_iwic_pci.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer1/iwic/i4b_w6692.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_iframe.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_l2.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_l2.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_l2fsm.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_l2fsm.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_l2timer.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_lme.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_mbuf.c#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_sframe.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_tei.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_uframe.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer2/i4b_util.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_l2if.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_l3.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_l3fsm.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_l3fsm.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_l3timer.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_l4if.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_q931.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_q931.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_q932fac.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer3/i4b_q932fac.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer4/i4b_i4bdrv.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer4/i4b_l4.c#3 delete
.. //depot/projects/bike_sched/sys/i4b/layer4/i4b_l4.h#2 delete
.. //depot/projects/bike_sched/sys/i4b/layer4/i4b_l4mgmt.c#4 delete
.. //depot/projects/bike_sched/sys/i4b/layer4/i4b_l4timer.c#3 delete
.. //depot/projects/bike_sched/sys/ia64/conf/DEFAULTS#7 integrate
.. //depot/projects/bike_sched/sys/ia64/ia64/clock.c#4 integrate
.. //depot/projects/bike_sched/sys/ia64/ia64/interrupt.c#5 integrate
.. //depot/projects/bike_sched/sys/ia64/ia64/machdep.c#11 integrate
.. //depot/projects/bike_sched/sys/ia64/ia64/mp_machdep.c#4 integrate
.. //depot/projects/bike_sched/sys/ia64/ia64/pmap.c#6 integrate
.. //depot/projects/bike_sched/sys/ia64/include/atomic.h#4 integrate
.. //depot/projects/bike_sched/sys/ia64/include/memdev.h#2 integrate
.. //depot/projects/bike_sched/sys/kern/Make.tags.inc#3 integrate
.. //depot/projects/bike_sched/sys/kern/imgact_elf.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/init_sysent.c#10 integrate
.. //depot/projects/bike_sched/sys/kern/kern_conf.c#6 integrate
.. //depot/projects/bike_sched/sys/kern/kern_cpu.c#4 integrate
.. //depot/projects/bike_sched/sys/kern/kern_cpuset.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/kern_ctf.c#1 branch
.. //depot/projects/bike_sched/sys/kern/kern_descrip.c#8 integrate
.. //depot/projects/bike_sched/sys/kern/kern_dtrace.c#1 branch
.. //depot/projects/bike_sched/sys/kern/kern_event.c#7 integrate
.. //depot/projects/bike_sched/sys/kern/kern_exec.c#6 integrate
.. //depot/projects/bike_sched/sys/kern/kern_exit.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/kern_fork.c#11 integrate
.. //depot/projects/bike_sched/sys/kern/kern_intr.c#10 integrate
.. //depot/projects/bike_sched/sys/kern/kern_jail.c#6 integrate
.. //depot/projects/bike_sched/sys/kern/kern_kthread.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/kern_linker.c#8 integrate
.. //depot/projects/bike_sched/sys/kern/kern_lock.c#7 integrate
.. //depot/projects/bike_sched/sys/kern/kern_lockf.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/kern_malloc.c#4 integrate
.. //depot/projects/bike_sched/sys/kern/kern_proc.c#7 integrate
.. //depot/projects/bike_sched/sys/kern/kern_rwlock.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/kern_sdt.c#1 branch
.. //depot/projects/bike_sched/sys/kern/kern_sig.c#8 integrate
.. //depot/projects/bike_sched/sys/kern/kern_switch.c#16 integrate
.. //depot/projects/bike_sched/sys/kern/kern_sx.c#4 integrate
.. //depot/projects/bike_sched/sys/kern/kern_thr.c#8 integrate
.. //depot/projects/bike_sched/sys/kern/kern_umtx.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/kern_xxx.c#3 integrate
.. //depot/projects/bike_sched/sys/kern/link_elf.c#6 integrate
.. //depot/projects/bike_sched/sys/kern/link_elf_obj.c#6 integrate
.. //depot/projects/bike_sched/sys/kern/linker_if.m#3 integrate
.. //depot/projects/bike_sched/sys/kern/sched_4bsd.c#25 integrate
.. //depot/projects/bike_sched/sys/kern/sched_ule.c#25 integrate
.. //depot/projects/bike_sched/sys/kern/stack_protector.c#1 branch
.. //depot/projects/bike_sched/sys/kern/subr_blist.c#2 integrate
.. //depot/projects/bike_sched/sys/kern/subr_bus.c#7 integrate
.. //depot/projects/bike_sched/sys/kern/subr_clist.c#1 branch
.. //depot/projects/bike_sched/sys/kern/subr_clock.c#4 integrate
.. //depot/projects/bike_sched/sys/kern/subr_kdb.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/subr_lock.c#4 integrate
.. //depot/projects/bike_sched/sys/kern/subr_param.c#3 integrate
.. //depot/projects/bike_sched/sys/kern/subr_rtc.c#2 integrate
.. //depot/projects/bike_sched/sys/kern/subr_smp.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/subr_witness.c#7 integrate
.. //depot/projects/bike_sched/sys/kern/sys_pipe.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/sys_socket.c#4 integrate
.. //depot/projects/bike_sched/sys/kern/syscalls.c#9 integrate
.. //depot/projects/bike_sched/sys/kern/syscalls.master#11 integrate
.. //depot/projects/bike_sched/sys/kern/systrace_args.c#6 integrate
.. //depot/projects/bike_sched/sys/kern/sysv_sem.c#5 integrate
.. //depot/projects/bike_sched/sys/kern/tty.c#7 integrate
.. //depot/projects/bike_sched/sys/kern/tty_cons.c#6 integrate
.. //depot/projects/bike_sched/sys/kern/tty_subr.c#3 delete
.. //depot/projects/bike_sched/sys/kern/tty_tty.c#4 integrate
.. //depot/projects/bike_sched/sys/kern/uipc_mbuf.c#6 integrate
.. //depot/projects/bike_sched/sys/kern/uipc_sem.c#4 integrate
.. //depot/projects/bike_sched/sys/kern/uipc_shm.c#3 integrate
.. //depot/projects/bike_sched/sys/kern/uipc_sockbuf.c#3 integrate
.. //depot/projects/bike_sched/sys/kern/uipc_socket.c#9 integrate
.. //depot/projects/bike_sched/sys/kern/uipc_syscalls.c#7 integrate
.. //depot/projects/bike_sched/sys/kern/vfs_aio.c#4 integrate
.. //depot/projects/bike_sched/sys/kern/vfs_export.c#3 integrate
.. //depot/projects/bike_sched/sys/kern/vfs_mount.c#8 integrate
.. //depot/projects/bike_sched/sys/kern/vfs_subr.c#10 integrate
.. //depot/projects/bike_sched/sys/kern/vfs_syscalls.c#8 integrate
.. //depot/projects/bike_sched/sys/mips/conf/ADM5120#2 integrate
.. //depot/projects/bike_sched/sys/mips/conf/IDT#2 integrate
.. //depot/projects/bike_sched/sys/mips/conf/MALTA#2 integrate
.. //depot/projects/bike_sched/sys/mips/conf/QEMU#2 integrate
.. //depot/projects/bike_sched/sys/mips/conf/SENTRY5#2 integrate
.. //depot/projects/bike_sched/sys/mips/include/am29lv081b.h#2 delete
.. //depot/projects/bike_sched/sys/mips/include/cp0.h#2 delete
.. //depot/projects/bike_sched/sys/mips/include/float.h#2 integrate
.. //depot/projects/bike_sched/sys/mips/include/iodev.h#2 integrate
.. //depot/projects/bike_sched/sys/mips/include/memdev.h#2 integrate
.. //depot/projects/bike_sched/sys/mips/include/pmap.h#2 integrate
.. //depot/projects/bike_sched/sys/mips/include/pte.h#2 integrate
.. //depot/projects/bike_sched/sys/mips/mips/machdep.c#2 integrate
.. //depot/projects/bike_sched/sys/mips/mips/mips_subr.c#2 delete
.. //depot/projects/bike_sched/sys/mips/mips/pmap.c#2 integrate
.. //depot/projects/bike_sched/sys/mips/mips/trap.c#2 integrate
.. //depot/projects/bike_sched/sys/modules/Makefile#7 integrate
.. //depot/projects/bike_sched/sys/modules/age/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/ath_rate_amrr/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/modules/ath_rate_onoe/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/modules/ath_rate_sample/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/modules/awi/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/bm/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/cnw/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/cxgb/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/modules/cxgb/cxgb/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/cxgb/iw_cxgb/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/cxgb/tom/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/cyclic/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/Makefile.inc#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/dtmalloc/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/dtrace/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/dtrace_test/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/dtraceall/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/dtraceall/dtraceall.c#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/fasttrap/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/fbt/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/lockstat/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/profile/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/prototype/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/sdt/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/dtrace/systrace/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/em/Makefile#6 integrate
.. //depot/projects/bike_sched/sys/modules/esp/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/et/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/firmware/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/harp/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/hfa/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/hfa/Makefile.inc#2 delete
.. //depot/projects/bike_sched/sys/modules/hfa/eisa/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/hfa/hfa/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/hfa/pci/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/hfa/sbus/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/hme/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/idt/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/isp/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/modules/ispfw/Makefile#4 integrate
.. //depot/projects/bike_sched/sys/modules/iwn/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/iwnfw/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/ixgbe/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/modules/jme/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/le/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/modules/malo/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/mii/Makefile#4 integrate
.. //depot/projects/bike_sched/sys/modules/mpt/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/netgraph/atm/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/modules/netgraph/atm/atmpif/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/nfslockd/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/opensolaris/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/pecoff/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/ral/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/ralfw/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/ralfw/Makefile.inc#1 branch
.. //depot/projects/bike_sched/sys/modules/ralfw/rt2561/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/ralfw/rt2561s/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/ralfw/rt2661/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/rdma/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/rdma/addr/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/rdma/cma/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/rdma/core/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/rdma/iwcm/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/rdma/krping/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/scc/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/sem/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/sound/driver/Makefile#4 integrate
.. //depot/projects/bike_sched/sys/modules/wlan/Makefile#3 integrate
.. //depot/projects/bike_sched/sys/modules/wlan_acl/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/wlan_amrr/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/wlan_ccmp/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/wlan_rssadapt/Makefile#1 branch
.. //depot/projects/bike_sched/sys/modules/wlan_scan_ap/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/wlan_scan_sta/Makefile#2 delete
.. //depot/projects/bike_sched/sys/modules/wlan_tkip/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/wlan_wep/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/wlan_xauth/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/net/bpf.c#9 integrate
.. //depot/projects/bike_sched/sys/net/ethernet.h#3 integrate
.. //depot/projects/bike_sched/sys/net/if.c#8 integrate
.. //depot/projects/bike_sched/sys/net/if_atmsubr.c#4 integrate
.. //depot/projects/bike_sched/sys/net/if_bridge.c#6 integrate
.. //depot/projects/bike_sched/sys/net/if_ethersubr.c#5 integrate
.. //depot/projects/bike_sched/sys/net/if_fwsubr.c#3 integrate
.. //depot/projects/bike_sched/sys/net/if_gif.c#6 integrate
.. //depot/projects/bike_sched/sys/net/if_gif.h#2 integrate
.. //depot/projects/bike_sched/sys/net/if_gre.c#5 integrate
.. //depot/projects/bike_sched/sys/net/if_gre.h#2 integrate
.. //depot/projects/bike_sched/sys/net/if_iso88025subr.c#4 integrate
.. //depot/projects/bike_sched/sys/net/if_loop.c#6 integrate
.. //depot/projects/bike_sched/sys/net/if_media.h#4 integrate
.. //depot/projects/bike_sched/sys/net/if_stf.c#5 integrate
.. //depot/projects/bike_sched/sys/net/if_tap.c#4 integrate
.. //depot/projects/bike_sched/sys/net/if_tun.c#4 integrate
.. //depot/projects/bike_sched/sys/net/if_var.h#6 integrate
.. //depot/projects/bike_sched/sys/net/radix_mpath.c#2 integrate
.. //depot/projects/bike_sched/sys/net/radix_mpath.h#2 integrate
.. //depot/projects/bike_sched/sys/net/route.c#6 integrate
.. //depot/projects/bike_sched/sys/net/route.h#4 integrate
.. //depot/projects/bike_sched/sys/net/rtsock.c#6 integrate
.. //depot/projects/bike_sched/sys/net80211/_ieee80211.h#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211.c#4 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211.h#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_acl.c#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_adhoc.c#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_adhoc.h#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_amrr.c#2 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_amrr.h#2 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_crypto.c#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_crypto.h#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_crypto_ccmp.c#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_crypto_none.c#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_crypto_tkip.c#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_crypto_wep.c#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_ddb.c#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_dfs.c#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_dfs.h#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_freebsd.c#4 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_freebsd.h#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_hostap.c#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_hostap.h#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_ht.c#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_ht.h#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_input.c#4 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_input.h#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_ioctl.c#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_ioctl.h#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_monitor.c#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_monitor.h#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_node.c#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_node.h#3 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_output.c#4 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_phy.c#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_phy.h#1 branch
.. //depot/projects/bike_sched/sys/net80211/ieee80211_power.c#2 integrate
.. //depot/projects/bike_sched/sys/net80211/ieee80211_power.h#2 integrate
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From peter at FreeBSD.org Wed Jul 2 02:29:55 2008
From: peter at FreeBSD.org (Peter Wemm)
Date: Wed Jul 2 02:30:01 2008
Subject: PERFORCE change 144453 for review
Message-ID: <200807020229.m622TrGl030566@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144453
Change 144453 by peter@peter_daintree on 2008/07/02 02:29:27
IFC @144452
Affected files ...
.. //depot/projects/hammer/Makefile.inc1#137 integrate
.. //depot/projects/hammer/ObsoleteFiles.inc#54 integrate
.. //depot/projects/hammer/contrib/gcc/config/i386/freebsd.h#14 integrate
.. //depot/projects/hammer/etc/devd.conf#33 integrate
.. //depot/projects/hammer/etc/periodic/security/800.loginfail#7 integrate
.. //depot/projects/hammer/etc/rc.d/lockd#6 integrate
.. //depot/projects/hammer/etc/rc.d/statd#5 integrate
.. //depot/projects/hammer/games/fortune/datfiles/fortunes#82 integrate
.. //depot/projects/hammer/gnu/lib/Makefile#8 integrate
.. //depot/projects/hammer/gnu/lib/csu/Makefile#12 integrate
.. //depot/projects/hammer/gnu/lib/libssp/Makefile#2 integrate
.. //depot/projects/hammer/gnu/usr.bin/cvs/contrib/Makefile#5 integrate
.. //depot/projects/hammer/lib/csu/Makefile.inc#1 branch
.. //depot/projects/hammer/lib/libarchive/archive_read_support_format_zip.c#20 integrate
.. //depot/projects/hammer/lib/libarchive/test/Makefile#12 integrate
.. //depot/projects/hammer/lib/libarchive/test/test_compat_zip_1.zip.uu#2 integrate
.. //depot/projects/hammer/lib/libarchive/test/test_read_format_zip.c#4 integrate
.. //depot/projects/hammer/lib/libarchive/test/test_read_format_zip.zip.uu#1 branch
.. //depot/projects/hammer/lib/libc/Makefile#31 integrate
.. //depot/projects/hammer/lib/libc/amd64/gen/_setjmp.S#8 integrate
.. //depot/projects/hammer/lib/libc/amd64/gen/setjmp.S#10 integrate
.. //depot/projects/hammer/lib/libc/gen/glob.c#7 integrate
.. //depot/projects/hammer/lib/libc/i386/gen/_setjmp.S#3 integrate
.. //depot/projects/hammer/lib/libc/i386/gen/setjmp.S#3 integrate
.. //depot/projects/hammer/lib/libc/net/getaddrinfo.3#14 integrate
.. //depot/projects/hammer/lib/libc/stdio/Makefile.inc#18 integrate
.. //depot/projects/hammer/lib/libc/stdio/printf-pos.c#1 branch
.. //depot/projects/hammer/lib/libc/stdio/printflocal.h#1 branch
.. //depot/projects/hammer/lib/libc/stdio/vfprintf.c#26 integrate
.. //depot/projects/hammer/lib/libc/stdio/vfwprintf.c#22 integrate
.. //depot/projects/hammer/lib/libc/stdlib/system.3#3 integrate
.. //depot/projects/hammer/lib/libc/sys/mkdir.2#7 integrate
.. //depot/projects/hammer/lib/libc/sys/socket.2#7 integrate
.. //depot/projects/hammer/lib/libstand/Makefile#21 integrate
.. //depot/projects/hammer/lib/libthr/Makefile#28 integrate
.. //depot/projects/hammer/lib/libutil/Makefile#18 integrate
.. //depot/projects/hammer/lib/libutil/hexdump.3#1 branch
.. //depot/projects/hammer/lib/libutil/hexdump.c#1 branch
.. //depot/projects/hammer/lib/libutil/libutil.h#11 integrate
.. //depot/projects/hammer/lib/msun/man/cos.3#4 integrate
.. //depot/projects/hammer/libexec/rtld-elf/Makefile#19 integrate
.. //depot/projects/hammer/release/Makefile#100 integrate
.. //depot/projects/hammer/release/picobsd/build/picobsd#8 integrate
.. //depot/projects/hammer/release/scripts/src-install.sh#6 integrate
.. //depot/projects/hammer/rescue/librescue/Makefile#9 integrate
.. //depot/projects/hammer/rescue/rescue/Makefile#39 integrate
.. //depot/projects/hammer/sbin/atacontrol/atacontrol.8#11 integrate
.. //depot/projects/hammer/sbin/devfs/devfs.8#14 integrate
.. //depot/projects/hammer/sbin/dhclient/dhclient.c#15 integrate
.. //depot/projects/hammer/sbin/ggate/ggated/ggated.c#7 integrate
.. //depot/projects/hammer/sbin/sconfig/sconfig.c#6 integrate
.. //depot/projects/hammer/share/man/man4/aac.4#17 integrate
.. //depot/projects/hammer/share/man/man5/src.conf.5#19 integrate
.. //depot/projects/hammer/share/mk/bsd.cpu.mk#36 integrate
.. //depot/projects/hammer/share/mk/bsd.sys.mk#17 integrate
.. //depot/projects/hammer/sys/amd64/include/iodev.h#2 integrate
.. //depot/projects/hammer/sys/amd64/include/memdev.h#2 integrate
.. //depot/projects/hammer/sys/amd64/include/pmap.h#67 integrate
.. //depot/projects/hammer/sys/amd64/include/vmparam.h#28 integrate
.. //depot/projects/hammer/sys/arm/include/memdev.h#2 integrate
.. //depot/projects/hammer/sys/boot/Makefile.inc#1 branch
.. //depot/projects/hammer/sys/boot/arm/Makefile.inc#1 branch
.. //depot/projects/hammer/sys/boot/arm/at91/Makefile.inc#4 integrate
.. //depot/projects/hammer/sys/boot/efi/Makefile.inc#4 integrate
.. //depot/projects/hammer/sys/boot/i386/Makefile.inc#8 integrate
.. //depot/projects/hammer/sys/boot/i386/boot2/boot2.c#23 integrate
.. //depot/projects/hammer/sys/boot/i386/loader/Makefile#16 integrate
.. //depot/projects/hammer/sys/boot/ia64/Makefile.inc#4 integrate
.. //depot/projects/hammer/sys/boot/ia64/common/Makefile#2 integrate
.. //depot/projects/hammer/sys/boot/ia64/efi/Makefile#5 integrate
.. //depot/projects/hammer/sys/boot/ia64/ski/Makefile#6 integrate
.. //depot/projects/hammer/sys/boot/ofw/Makefile.inc#1 branch
.. //depot/projects/hammer/sys/boot/pc98/Makefile.inc#5 integrate
.. //depot/projects/hammer/sys/boot/pc98/boot2/Makefile#10 integrate
.. //depot/projects/hammer/sys/boot/pc98/loader/Makefile#13 integrate
.. //depot/projects/hammer/sys/boot/powerpc/Makefile.inc#1 branch
.. //depot/projects/hammer/sys/boot/powerpc/ofw/Makefile#4 integrate
.. //depot/projects/hammer/sys/boot/sparc64/Makefile.inc#2 integrate
.. //depot/projects/hammer/sys/boot/sparc64/loader/Makefile#10 integrate
.. //depot/projects/hammer/sys/boot/uboot/Makefile.inc#1 branch
.. //depot/projects/hammer/sys/compat/pecoff/imgact_pecoff.c#20 delete
.. //depot/projects/hammer/sys/compat/pecoff/imgact_pecoff.h#3 delete
.. //depot/projects/hammer/sys/conf/NOTES#147 integrate
.. //depot/projects/hammer/sys/conf/files#184 integrate
.. //depot/projects/hammer/sys/conf/kern.mk#27 integrate
.. //depot/projects/hammer/sys/conf/kern.pre.mk#54 integrate
.. //depot/projects/hammer/sys/dev/aac/aac_pci.c#33 integrate
.. //depot/projects/hammer/sys/dev/acpi_support/acpi_asus.c#12 integrate
.. //depot/projects/hammer/sys/dev/ce/ceddk.h#2 integrate
.. //depot/projects/hammer/sys/dev/ce/if_ce.c#7 integrate
.. //depot/projects/hammer/sys/dev/cp/cpddk.h#5 integrate
.. //depot/projects/hammer/sys/dev/cp/if_cp.c#26 integrate
.. //depot/projects/hammer/sys/dev/ctau/ctddk.h#3 integrate
.. //depot/projects/hammer/sys/dev/ctau/if_ct.c#29 integrate
.. //depot/projects/hammer/sys/dev/cx/cxddk.h#3 integrate
.. //depot/projects/hammer/sys/dev/cx/if_cx.c#37 integrate
.. //depot/projects/hammer/sys/dev/io/iodev.c#2 integrate
.. //depot/projects/hammer/sys/dev/mfi/mfi.c#16 integrate
.. //depot/projects/hammer/sys/dev/mpt/mpt_pci.c#24 integrate
.. //depot/projects/hammer/sys/dev/mpt/mpt_user.c#2 integrate
.. //depot/projects/hammer/sys/dev/sound/pci/atiixp.h#5 integrate
.. //depot/projects/hammer/sys/dev/usb/usbdevs#105 integrate
.. //depot/projects/hammer/sys/dev/usb/uscanner.c#31 integrate
.. //depot/projects/hammer/sys/fs/smbfs/smbfs_node.c#26 integrate
.. //depot/projects/hammer/sys/geom/virstor/g_virstor.c#2 integrate
.. //depot/projects/hammer/sys/i386/include/iodev.h#2 integrate
.. //depot/projects/hammer/sys/i386/include/memdev.h#2 integrate
.. //depot/projects/hammer/sys/ia64/include/memdev.h#2 integrate
.. //depot/projects/hammer/sys/kern/kern_cpuset.c#7 integrate
.. //depot/projects/hammer/sys/kern/kern_descrip.c#83 integrate
.. //depot/projects/hammer/sys/kern/kern_intr.c#50 integrate
.. //depot/projects/hammer/sys/kern/kern_lockf.c#21 integrate
.. //depot/projects/hammer/sys/kern/kern_xxx.c#15 integrate
.. //depot/projects/hammer/sys/kern/stack_protector.c#1 branch
.. //depot/projects/hammer/sys/kern/uipc_sem.c#23 integrate
.. //depot/projects/hammer/sys/kern/uipc_shm.c#4 integrate
.. //depot/projects/hammer/sys/mips/include/iodev.h#2 integrate
.. //depot/projects/hammer/sys/mips/include/memdev.h#2 integrate
.. //depot/projects/hammer/sys/modules/nfslockd/Makefile#2 integrate
.. //depot/projects/hammer/sys/modules/pecoff/Makefile#5 delete
.. //depot/projects/hammer/sys/modules/ralfw/Makefile#2 integrate
.. //depot/projects/hammer/sys/modules/sem/Makefile#3 integrate
.. //depot/projects/hammer/sys/net/if.c#77 integrate
.. //depot/projects/hammer/sys/net/if_bridge.c#41 integrate
.. //depot/projects/hammer/sys/net/if_gre.c#38 integrate
.. //depot/projects/hammer/sys/net/if_loop.c#35 integrate
.. //depot/projects/hammer/sys/net/if_var.h#48 integrate
.. //depot/projects/hammer/sys/netinet/udp_usrreq.c#56 integrate
.. //depot/projects/hammer/sys/netinet6/in6_rmx.c#15 integrate
.. //depot/projects/hammer/sys/netinet6/ip6_ipsec.c#6 integrate
.. //depot/projects/hammer/sys/netipsec/key.c#21 integrate
.. //depot/projects/hammer/sys/nfsclient/nfs.h#23 integrate
.. //depot/projects/hammer/sys/nfsclient/nfs_node.c#27 integrate
.. //depot/projects/hammer/sys/nfsclient/nfs_vfsops.c#58 integrate
.. //depot/projects/hammer/sys/nfsclient/nfs_vnops.c#62 integrate
.. //depot/projects/hammer/sys/nfsclient/nfsmount.h#12 integrate
.. //depot/projects/hammer/sys/nfsclient/nfsnode.h#22 integrate
.. //depot/projects/hammer/sys/nfsserver/nfs_syscalls.c#26 integrate
.. //depot/projects/hammer/sys/nlm/nlm.h#2 integrate
.. //depot/projects/hammer/sys/nlm/nlm_advlock.c#1 branch
.. //depot/projects/hammer/sys/nlm/nlm_prot.h#2 integrate
.. //depot/projects/hammer/sys/nlm/nlm_prot_clnt.c#3 integrate
.. //depot/projects/hammer/sys/nlm/nlm_prot_impl.c#5 integrate
.. //depot/projects/hammer/sys/nlm/nlm_prot_server.c#3 integrate
.. //depot/projects/hammer/sys/powerpc/include/memdev.h#2 integrate
.. //depot/projects/hammer/sys/rpc/auth_unix.c#3 integrate
.. //depot/projects/hammer/sys/rpc/authunix_prot.c#3 integrate
.. //depot/projects/hammer/sys/rpc/clnt.h#2 integrate
.. //depot/projects/hammer/sys/rpc/clnt_dg.c#3 integrate
.. //depot/projects/hammer/sys/rpc/clnt_rc.c#4 integrate
.. //depot/projects/hammer/sys/rpc/clnt_vc.c#3 integrate
.. //depot/projects/hammer/sys/rpc/rpcb_clnt.c#3 integrate
.. //depot/projects/hammer/sys/rpc/svc_vc.c#3 integrate
.. //depot/projects/hammer/sys/security/mac/mac_framework.h#13 integrate
.. //depot/projects/hammer/sys/security/mac/mac_policy.h#14 integrate
.. //depot/projects/hammer/sys/security/mac/mac_posix_sem.c#8 integrate
.. //depot/projects/hammer/sys/security/mac_biba/mac_biba.c#48 integrate
.. //depot/projects/hammer/sys/security/mac_mls/mac_mls.c#47 integrate
.. //depot/projects/hammer/sys/security/mac_stub/mac_stub.c#31 integrate
.. //depot/projects/hammer/sys/security/mac_test/mac_test.c#50 integrate
.. //depot/projects/hammer/sys/sparc64/include/in_cksum.h#4 integrate
.. //depot/projects/hammer/sys/sparc64/include/memdev.h#2 integrate
.. //depot/projects/hammer/sys/sun4v/include/in_cksum.h#2 integrate
.. //depot/projects/hammer/sys/sun4v/include/memdev.h#2 integrate
.. //depot/projects/hammer/sys/sys/fcntl.h#9 integrate
.. //depot/projects/hammer/sys/sys/file.h#20 integrate
.. //depot/projects/hammer/sys/sys/ksem.h#2 integrate
.. //depot/projects/hammer/sys/sys/lockf.h#9 integrate
.. //depot/projects/hammer/sys/sys/param.h#114 integrate
.. //depot/projects/hammer/sys/sys/priv.h#9 integrate
.. //depot/projects/hammer/sys/sys/semaphore.h#2 integrate
.. //depot/projects/hammer/sys/sys/user.h#26 integrate
.. //depot/projects/hammer/tools/build/options/WITHOUT_SSP#2 integrate
.. //depot/projects/hammer/tools/regression/file/flock/flock.c#2 integrate
.. //depot/projects/hammer/tools/regression/lib/libc/stdio/Makefile#5 integrate
.. //depot/projects/hammer/tools/regression/lib/libc/stdio/test-print-positional.c#1 branch
.. //depot/projects/hammer/tools/regression/posixsem/Makefile#1 branch
.. //depot/projects/hammer/tools/regression/posixsem/posixsem.c#1 branch
.. //depot/projects/hammer/tools/regression/posixsem/posixsem.t#1 branch
.. //depot/projects/hammer/tools/regression/posixsem/test.c#1 branch
.. //depot/projects/hammer/tools/regression/posixsem/test.h#1 branch
.. //depot/projects/hammer/tools/regression/posixshm/test.c#2 integrate
.. //depot/projects/hammer/usr.bin/cpio/cpio.c#4 integrate
.. //depot/projects/hammer/usr.bin/gzip/gzip.1#5 integrate
.. //depot/projects/hammer/usr.bin/gzip/unbzip2.c#2 integrate
.. //depot/projects/hammer/usr.bin/gzip/znew#3 integrate
.. //depot/projects/hammer/usr.bin/make/make.1#35 integrate
.. //depot/projects/hammer/usr.bin/procstat/procstat_files.c#4 integrate
.. //depot/projects/hammer/usr.bin/su/su.1#13 integrate
.. //depot/projects/hammer/usr.bin/tar/write.c#33 integrate
.. //depot/projects/hammer/usr.bin/unzip/unzip.1#2 integrate
.. //depot/projects/hammer/usr.bin/unzip/unzip.c#2 integrate
.. //depot/projects/hammer/usr.sbin/config/mkmakefile.c#17 integrate
.. //depot/projects/hammer/usr.sbin/cron/cron/cron.8#6 integrate
.. //depot/projects/hammer/usr.sbin/cron/cron/cron.c#7 integrate
.. //depot/projects/hammer/usr.sbin/cron/cron/cron.h#6 integrate
.. //depot/projects/hammer/usr.sbin/cron/cron/do_command.c#8 integrate
.. //depot/projects/hammer/usr.sbin/mountd/exports.5#9 integrate
.. //depot/projects/hammer/usr.sbin/newsyslog/newsyslog.conf.5#7 integrate
.. //depot/projects/hammer/usr.sbin/ngctl/main.c#11 integrate
.. //depot/projects/hammer/usr.sbin/pmcstat/pmcstat.8#11 integrate
.. //depot/projects/hammer/usr.sbin/pmcstat/pmcstat.c#16 integrate
.. //depot/projects/hammer/usr.sbin/rpc.lockd/lockd.c#13 integrate
.. //depot/projects/hammer/usr.sbin/rpc.statd/file.c#4 integrate
.. //depot/projects/hammer/usr.sbin/wpa/wpa_supplicant/Makefile#14 integrate
.. //depot/projects/hammer/usr.sbin/wpa/wpa_supplicant/wpa_supplicant.conf.5#10 integrate
Differences ...
==== //depot/projects/hammer/Makefile.inc1#137 (text+ko) ====
@@ -1,5 +1,5 @@
#
-# $FreeBSD: src/Makefile.inc1,v 1.606 2008/06/18 13:52:58 obrien Exp $
+# $FreeBSD: src/Makefile.inc1,v 1.607 2008/06/25 21:33:28 ru Exp $
#
# Make command line options:
# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
@@ -225,6 +225,7 @@
${BMAKEENV} ${MAKE} -f Makefile.inc1 \
DESTDIR= \
BOOTSTRAPPING=${OSRELDATE} \
+ -DWITHOUT_SSP \
-DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \
-DWITHOUT_NLS -DNO_PIC -DWITHOUT_PROFILE -DNO_SHARED \
-DNO_CPU_CFLAGS -DNO_WARNS -DNO_CTF
@@ -235,7 +236,7 @@
TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
DESTDIR= \
BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS \
- -DNO_WARNS -DNO_CTF
+ -DNO_WARNS -DNO_CTF -DWITHOUT_SSP
# cross-tools stage
XMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \
@@ -452,7 +453,7 @@
.if ${MK_KERBEROS} != "no"
.for _t in obj depend all
cd ${.CURDIR}/kerberos5/tools; \
- MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= ${_t}
+ MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} -DWITHOUT_SSP DESTDIR= ${_t}
.endfor
.endif
.for _t in obj includes
@@ -480,7 +481,7 @@
.endfor
.for _dir in lib/ncurses/ncurses lib/ncurses/ncursesw lib/libmagic
cd ${.CURDIR}/${_dir}; \
- MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= build-tools
+ MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} -DWITHOUT_SSP DESTDIR= build-tools
.endfor
cd ${.CURDIR}; \
${LIB32WMAKE} -f Makefile.inc1 libraries
@@ -772,14 +773,14 @@
@echo "--------------------------------------------------------------"
cd ${KRNLOBJDIR}/${_kernel}; \
MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \
- ${MAKE} -DNO_CPU_CFLAGS -DNO_CTF \
+ ${MAKE} -DWITHOUT_SSP -DNO_CPU_CFLAGS -DNO_CTF \
-f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile
# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case.
.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules)
.for target in obj depend all
cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \
MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \
- ${MAKE} -DNO_CPU_CFLAGS -DNO_CTF ${target}
+ ${MAKE} -DWITHOUT_SSP -DNO_CPU_CFLAGS -DNO_CTF ${target}
.endfor
.endif
.if !defined(NO_KERNELDEPEND)
==== //depot/projects/hammer/ObsoleteFiles.inc#54 (text+ko) ====
@@ -1,5 +1,5 @@
#
-# $FreeBSD: src/ObsoleteFiles.inc,v 1.143 2008/06/14 10:42:18 ed Exp $
+# $FreeBSD: src/ObsoleteFiles.inc,v 1.144 2008/07/01 21:54:08 danger Exp $
#
# This file lists old files (OLD_FILES), libraries (OLD_LIBS) and
# directories (OLD_DIRS) which should get removed at an update. Recently
@@ -14,6 +14,9 @@
# The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
#
+# 20080701: wpa_supplicant.conf moved to share/examples/etc/
+OLD_FILES+=usr/share/examples/wpa_supplicant/wpa_supplicant.conf
+OLD_DIRS+=usr/share/examples/wpa_supplicant
# 20080614: sgtty removed
OLD_FILES+=usr/include/sys/ttychars.h
OLD_FILES+=usr/include/sys/ttydev.h
==== //depot/projects/hammer/contrib/gcc/config/i386/freebsd.h#14 (text+ko) ====
@@ -22,7 +22,7 @@
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
-/* $FreeBSD: src/contrib/gcc/config/i386/freebsd.h,v 1.73 2007/05/19 02:30:20 kan Exp $ */
+/* $FreeBSD: src/contrib/gcc/config/i386/freebsd.h,v 1.75 2008/06/28 15:28:17 obrien Exp $ */
#undef CC1_SPEC
#define CC1_SPEC "%(cc1_cpu) %{profile:-p}"
@@ -54,7 +54,7 @@
/* Reset our STARTFILE_SPEC which was properly set in config/freebsd.h
but trashed by config//. */
-#undef STARTFILE_SPEC
+#undef STARTFILE_SPEC
#define STARTFILE_SPEC FBSD_STARTFILE_SPEC
/* Provide an ENDFILE_SPEC appropriate for FreeBSD/i386. */
@@ -78,13 +78,13 @@
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE (TARGET_64BIT ? 32 : BITS_PER_WORD)
-#undef SUBTARGET_EXTRA_SPECS /* i386.h bogusly defines it. */
+#undef SUBTARGET_EXTRA_SPECS /* i386.h bogusly defines it. */
#define SUBTARGET_EXTRA_SPECS \
{ "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)");
-#define TARGET_ELF 1
+#define TARGET_ELF 1
/* This goes away when the math emulator is fixed. */
#undef TARGET_SUBTARGET_DEFAULT
@@ -101,7 +101,7 @@
/* FreeBSD sets the rounding precision of the FPU to 53 bits. Let the
compiler get the contents of and std::numeric_limits correct. */
-#undef TARGET_96_ROUND_53_LONG_DOUBLE
+#undef TARGET_96_ROUND_53_LONG_DOUBLE
#define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT)
/* Tell final.c that we don't need a label passed to mcount. */
@@ -110,7 +110,7 @@
/* Output assembler code to FILE to begin profiling of the current function.
LABELNO is an optional label. */
-#undef MCOUNT_NAME
+#undef MCOUNT_NAME
#define MCOUNT_NAME ".mcount"
/* Output assembler code to FILE to end profiling of the current function. */
@@ -145,7 +145,7 @@
else \
fprintf ((FILE), "%s", xname); \
} \
- else \
+ else \
{ \
if (xname[0] == '%') \
xname += 2; \
@@ -191,7 +191,7 @@
uninitialized global data will be output in the data section if
`-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
used. */
-#undef BSS_SECTION_ASM_OP
+#undef BSS_SECTION_ASM_OP
#define BSS_SECTION_ASM_OP "\t.section\t.bss"
/* Like `ASM_OUTPUT_BSS' except takes the required alignment as a
@@ -202,7 +202,7 @@
Try to use function `asm_output_aligned_bss' defined in file
`varasm.c' when defining this macro. */
-#undef ASM_OUTPUT_ALIGNED_BSS
+#undef ASM_OUTPUT_ALIGNED_BSS
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
@@ -230,7 +230,7 @@
assemble_name (asm_out_file, NAME); \
fputc ('-', asm_out_file); \
assemble_name (asm_out_file, \
- XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \
+ XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \
fprintf (asm_out_file, "\n"); \
} while (0)
==== //depot/projects/hammer/etc/devd.conf#33 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/etc/devd.conf,v 1.41 2008/06/15 13:26:25 kmacy Exp $
+# $FreeBSD: src/etc/devd.conf,v 1.42 2008/06/27 12:04:36 rpaulo Exp $
#
# Refer to devd.conf(5) and devd(8) man pages for the details on how to
# run and configure devd.
@@ -255,6 +255,28 @@
action "/etc/rc.resume acpi $notify";
};
+# The next blocks enable volume hotkeys that can be found on the Asus EeePC
+notify 0 {
+ match "system" "ACPI";
+ match "subsystem" "ASUS-Eee";
+ match "notify" "0x13";
+ action "mixer 0";
+};
+
+notify 0 {
+ match "system" "ACPI";
+ match "subsystem" "ASUS-Eee";
+ match "notify" "0x14";
+ action "mixer vol -10";
+};
+
+notify 0 {
+ match "system" "ACPI";
+ match "subsystem" "ASUS-Eee";
+ match "notify" "0x15";
+ action "mixer vol +10";
+};
+
/* EXAMPLES TO END OF FILE
# The following might be an example of something that a vendor might
==== //depot/projects/hammer/etc/periodic/security/800.loginfail#7 (text+ko) ====
@@ -24,7 +24,7 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD: src/etc/periodic/security/800.loginfail,v 1.8 2007/02/23 21:42:54 remko Exp $
+# $FreeBSD: src/etc/periodic/security/800.loginfail,v 1.9 2008/06/30 08:01:47 mtm Exp $
#
# Show login failures
@@ -59,7 +59,7 @@
[Yy][Ee][Ss])
echo ""
echo "${host} login failures:"
- n=$(catmsgs | egrep -ia "^$yesterday.*: .* (fail|invalid|bad|illegal)" |
+ n=$(catmsgs | egrep -ia "^$yesterday.*: .*(fail|invalid|bad|illegal)" |
tee /dev/stderr | wc -l)
[ $n -gt 0 ] && rc=1 || rc=0;;
*) rc=0;;
==== //depot/projects/hammer/etc/rc.d/lockd#6 (text+ko) ====
@@ -1,7 +1,7 @@
#!/bin/sh
#
# FreeBSD History: src/etc/rc.d/nfslocking,v 1.11 2004/10/07 13:55:26 mtm
-# $FreeBSD: src/etc/rc.d/lockd,v 1.20 2008/06/23 04:05:39 mtm Exp $
+# $FreeBSD: src/etc/rc.d/lockd,v 1.21 2008/06/27 15:45:17 mtm Exp $
#
# PROVIDE: lockd
@@ -15,7 +15,7 @@
rcvar=rpc_lockd_enable
command="/usr/sbin/rpc.${name}"
start_precmd='lockd_precmd'
-stop_precmd='checkyesno nfs_server_enable || checkyesno nfsclient_enable'
+stop_precmd='checkyesno nfs_server_enable || checkyesno nfs_client_enable'
status_precmd=$stop_precmd
# Make sure that we are either an NFS client or server, and that we get
@@ -26,7 +26,7 @@
local ret
ret=0
- if ! checkyesno nfs_server_enable && ! checkyesno nfsclient_enable
+ if ! checkyesno nfs_server_enable && ! checkyesno nfs_client_enable
then
ret=1
fi
==== //depot/projects/hammer/etc/rc.d/statd#5 (text+ko) ====
@@ -1,7 +1,7 @@
#!/bin/sh
#
# FreeBSD History: src/etc/rc.d/nfslocking,v 1.11 2004/10/07 13:55:26 mtm Exp
-# $FreeBSD: src/etc/rc.d/statd,v 1.19 2008/06/23 04:05:39 mtm Exp $
+# $FreeBSD: src/etc/rc.d/statd,v 1.20 2008/06/27 15:45:17 mtm Exp $
#
# PROVIDE: statd
@@ -15,7 +15,7 @@
rcvar=rpc_statd_enable
command="/usr/sbin/rpc.${name}"
start_precmd='statd_precmd'
-stop_precmd='checkyesno nfs_server_enable || checkyesno nfsclient_enable'
+stop_precmd='checkyesno nfs_server_enable || checkyesno nfs_client_enable'
status_precmd=$stop_precmd
# Make sure that we are either an NFS client or server, and that we get
@@ -26,7 +26,7 @@
local ret
ret=0
- if ! checkyesno nfs_server_enable && ! checkyesno nfsclient_enable
+ if ! checkyesno nfs_server_enable && ! checkyesno nfs_client_enable
then
ret=1
fi
==== //depot/projects/hammer/games/fortune/datfiles/fortunes#82 (text+ko) ====
@@ -1,5 +1,5 @@
This fortune brought to you by:
-$FreeBSD: src/games/fortune/datfiles/fortunes,v 1.264 2008/06/23 20:27:37 phk Exp $
+$FreeBSD: src/games/fortune/datfiles/fortunes,v 1.265 2008/06/25 04:56:08 wollman Exp $
%
=======================================================================
|| ||
@@ -14259,7 +14259,7 @@
The computer assumes that all behavior is in pursuit of an ultimate
goal. Whenever a motorist changes his or her mind and veers off
course, the GPS lady issues that snippy announcement: "Recalculating!"
- -- Joel Achenbach (www.slate.com, 20 jun 2008)
+ -- Joel Achenbach (www.slate.com, 20 Jun 2008)
%
Computers don't actually think.
You just think they think.
==== //depot/projects/hammer/gnu/lib/Makefile#8 (text+ko) ====
@@ -1,8 +1,8 @@
-# $FreeBSD: src/gnu/lib/Makefile,v 1.42 2007/05/19 04:25:54 kan Exp $
+# $FreeBSD: src/gnu/lib/Makefile,v 1.43 2008/06/25 21:33:28 ru Exp $
.include
-SUBDIR= csu libgcc libgcov libdialog libgomp libregex libreadline
+SUBDIR= csu libgcc libgcov libdialog libgomp libregex libreadline libssp
# libsupc++ uses libstdc++ headers, although 'make includes' should
# have taken care of that already.
@@ -14,8 +14,4 @@
SUBDIR+= libobjc
.endif
-.if ${MK_SSP} != "no"
-SUBDIR+= libssp
-.endif
-
.include
==== //depot/projects/hammer/gnu/lib/csu/Makefile#12 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/gnu/lib/csu/Makefile,v 1.28 2008/01/24 07:43:09 ru Exp $
+# $FreeBSD: src/gnu/lib/csu/Makefile,v 1.29 2008/06/25 21:33:28 ru Exp $
GCCDIR= ${.CURDIR}/../../../contrib/gcc
GCCLIB= ${.CURDIR}/../../../contrib/gcclibs
@@ -19,6 +19,7 @@
-I${CCDIR}/cc_tools
CRTS_CFLAGS= -DCRTSTUFFS_O -DSHARED ${PICFLAG}
MKDEP= -DCRT_BEGIN
+WITHOUT_SSP=
.if ${MACHINE_ARCH} == "ia64"
BEGINSRC= crtbegin.asm
==== //depot/projects/hammer/gnu/lib/libssp/Makefile#2 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/gnu/lib/libssp/Makefile,v 1.2 2007/05/22 10:40:58 ru Exp $
+# $FreeBSD: src/gnu/lib/libssp/Makefile,v 1.3 2008/06/25 21:33:28 ru Exp $
GCCDIR= ${.CURDIR}/../../../contrib/gcc
GCCLIB= ${.CURDIR}/../../../contrib/gcclibs
@@ -10,6 +10,7 @@
SHLIB_MAJOR= 0
SHLIBDIR?= /lib
NO_PROFILE=
+WITHOUT_SSP=
SRCS= ssp.c gets-chk.c memcpy-chk.c memmove-chk.c mempcpy-chk.c \
memset-chk.c snprintf-chk.c sprintf-chk.c stpcpy-chk.c \
==== //depot/projects/hammer/gnu/usr.bin/cvs/contrib/Makefile#5 (text+ko) ====
@@ -1,6 +1,4 @@
-# $FreeBSD: src/gnu/usr.bin/cvs/contrib/Makefile,v 1.20 2008/01/16 17:15:59 obrien Exp $
-
-.POSIX:
+# $FreeBSD: src/gnu/usr.bin/cvs/contrib/Makefile,v 1.21 2008/06/27 14:59:23 obrien Exp $
.include "../Makefile.inc"
@@ -21,6 +19,10 @@
.SUFFIXES: .sh .pl .in
+# Prevent Makefile.in from overwriting Makefile through the suffix rules.
+Makefile:
+ @:
+
.sh:
cp ${.IMPSRC} ${.TARGET}
==== //depot/projects/hammer/lib/libarchive/archive_read_support_format_zip.c#20 (text+ko) ====
@@ -24,7 +24,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_zip.c,v 1.24 2008/06/15 05:15:53 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_zip.c,v 1.26 2008/06/30 16:19:26 des Exp $");
#ifdef HAVE_ERRNO_H
#include
@@ -53,6 +53,9 @@
int64_t entry_compressed_bytes_read;
int64_t entry_uncompressed_bytes_read;
+ /* Running CRC32 of the decompressed data */
+ unsigned long entry_crc32;
+
unsigned version;
unsigned system;
unsigned flags;
@@ -70,7 +73,7 @@
char end_of_entry;
char end_of_entry_cleanup;
- long crc32;
+ unsigned long crc32;
ssize_t filename_length;
ssize_t extra_length;
int64_t uncompressed_size;
@@ -299,6 +302,7 @@
zip->end_of_entry_cleanup = 0;
zip->entry_uncompressed_bytes_read = 0;
zip->entry_compressed_bytes_read = 0;
+ zip->entry_crc32 = crc32(0, NULL, 0);
if ((h = __archive_read_ahead(a, 4)) == NULL)
return (ARCHIVE_FATAL);
@@ -523,14 +527,13 @@
"ZIP uncompressed data is wrong size");
return (ARCHIVE_WARN);
}
-/* TODO: Compute CRC. */
-/*
- if (zip->crc32 != zip->entry_crc32_calculated) {
+ /* Check computed CRC against header */
+ if (zip->crc32 != zip->entry_crc32) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "ZIP data CRC error");
+ "ZIP bad CRC: 0x%lx should be 0x%lx",
+ zip->entry_crc32, zip->crc32);
return (ARCHIVE_WARN);
}
-*/
/* End-of-entry cleanup done. */
zip->end_of_entry_cleanup = 1;
}
@@ -570,6 +573,11 @@
}
break;
}
+ /* Update checksum */
+ if (r == ARCHIVE_OK && *size) {
+ zip->entry_crc32 =
+ crc32(zip->entry_crc32, *buff, *size);
+ }
return (r);
}
==== //depot/projects/hammer/lib/libarchive/test/Makefile#12 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/lib/libarchive/test/Makefile,v 1.21 2008/06/15 05:05:53 kientzle Exp $
+# $FreeBSD: src/lib/libarchive/test/Makefile,v 1.23 2008/06/26 11:58:26 des Exp $
# Where to find the libarchive sources
LA_SRCDIR=${.CURDIR}/..
@@ -72,7 +72,7 @@
# Build the test program using all libarchive sources + the test sources.
SRCS= ${LA_SRCS} \
${TESTS} \
- ${.OBJDIR}/list.h \
+ list.h \
main.c \
read_open_memory.c
@@ -84,19 +84,19 @@
CFLAGS+= -DPLATFORM_CONFIG_H=\"config_freebsd.h\"
LDADD= -lz -lbz2
CFLAGS+= -static -g
-CFLAGS+= -I${LA_SRCDIR}
+CFLAGS+= -I${LA_SRCDIR} -I.
# Uncomment to link against dmalloc
-LDADD+= -L/usr/local/lib -ldmalloc
-CFLAGS+= -I/usr/local/include -DUSE_DMALLOC
-WARNS=6
+#LDADD+= -L/usr/local/lib -ldmalloc
+#CFLAGS+= -I/usr/local/include -DUSE_DMALLOC
+#WARNS=6
# Build libarchive_test and run it.
check test: libarchive_test
./libarchive_test -v -r ${.CURDIR}
# list.h is just a list of all tests, as indicated by DEFINE_TEST macro lines
-${.OBJDIR}/list.h: ${TESTS} Makefile
+list.h: ${TESTS} Makefile
(cd ${.CURDIR}; cat ${TESTS}) | grep DEFINE_TEST > list.h
CLEANFILES += *.out *.o *.core *~ list.h
==== //depot/projects/hammer/lib/libarchive/test/test_compat_zip_1.zip.uu#2 (text+ko) ====
@@ -1,3 +1,4 @@
+$FreeBSD: src/lib/libarchive/test/test_compat_zip_1.zip.uu,v 1.2 2008/06/30 15:49:12 des Exp $
begin 644 test_compat_zip_1.zip
M4$L#!!0`"``(``B$@S<````````````````4````345402U)3D8O34%.249%
M4U0N34;S3 1
assert(0 == archive_read_finish(a));
#else
==== //depot/projects/hammer/lib/libc/Makefile#31 (text+ko) ====
@@ -1,5 +1,5 @@
# @(#)Makefile 8.2 (Berkeley) 2/3/94
-# $FreeBSD: src/lib/libc/Makefile,v 1.73 2007/10/01 18:15:10 ru Exp $
+# $FreeBSD: src/lib/libc/Makefile,v 1.74 2008/06/25 21:33:28 ru Exp $
SHLIBDIR?= /lib
@@ -122,3 +122,9 @@
# Disable warnings in contributed sources.
CWARNFLAGS:= ${.IMPSRC:Ngdtoa_*.c:C/^.+$/${CWARNFLAGS}/}
+# XXX For now, we don't allow libc to be compiled with
+# -fstack-protector-all because it breaks rtld. We may want to make a librtld
+# in the future to circumvent this.
+SSP_CFLAGS:= ${SSP_CFLAGS:S/^-fstack-protector-all$/-fstack-protector/}
+# Disable stack protection for SSP symbols.
+SSP_CFLAGS:= ${.IMPSRC:N*/stack_protector.c:C/^.+$/${SSP_CFLAGS}/}
==== //depot/projects/hammer/lib/libc/amd64/gen/_setjmp.S#8 (text+ko) ====
@@ -34,7 +34,7 @@
.asciz "@(#)_setjmp.s 5.1 (Berkeley) 4/23/90"
#endif /* LIBC_SCCS and not lint */
#include
-__FBSDID("$FreeBSD: src/lib/libc/amd64/gen/_setjmp.S,v 1.19 2007/01/09 00:27:48 imp Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/amd64/gen/_setjmp.S,v 1.20 2008/06/28 17:55:43 das Exp $");
/*
* C library -- _setjmp, _longjmp
@@ -58,6 +58,7 @@
movq %r14,48(%rax) /* 6; r14 */
movq %r15,56(%rax) /* 7; r15 */
fnstcw 64(%rax) /* 8; fpu cw */
+ stmxcsr 68(%rax) /* and mxcsr */
xorq %rax,%rax
ret
@@ -65,6 +66,15 @@
.set CNAME(_longjmp),CNAME(___longjmp)
ENTRY(___longjmp)
movq %rdi,%rdx
+ /* Restore the mxcsr, but leave exception flags intact. */
+ stmxcsr -4(%rsp)
+ movl 68(%rdx),%eax
+ andl $0xffffffc0,%eax
+ movl -4(%rsp),%edi
+ andl $0x3f,%edi
+ xorl %eax,%edi
+ movl %edi,-4(%rsp)
+ ldmxcsr -4(%rsp)
movq %rsi,%rax /* retval */
movq 0(%rdx),%rcx
movq 8(%rdx),%rbx
@@ -74,7 +84,6 @@
movq 40(%rdx),%r13
movq 48(%rdx),%r14
movq 56(%rdx),%r15
- fninit
fldcw 64(%rdx)
testq %rax,%rax
jnz 1f
==== //depot/projects/hammer/lib/libc/amd64/gen/setjmp.S#10 (text+ko) ====
@@ -34,7 +34,7 @@
.asciz "@(#)setjmp.s 5.1 (Berkeley) 4/23/90"
#endif /* LIBC_SCCS and not lint */
#include
-__FBSDID("$FreeBSD: src/lib/libc/amd64/gen/setjmp.S,v 1.27 2007/01/09 00:27:48 imp Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/amd64/gen/setjmp.S,v 1.28 2008/06/28 17:55:43 das Exp $");
/*
* C library -- _setjmp, _longjmp
@@ -67,6 +67,7 @@
movq %r14,48(%rcx) /* 6; r14 */
movq %r15,56(%rcx) /* 7; r15 */
fnstcw 64(%rcx) /* 8; fpu cw */
+ stmxcsr 68(%rcx) /* and mxcsr */
xorq %rax,%rax
ret
@@ -83,6 +84,15 @@
popq %rsi
popq %rdi /* jmpbuf */
movq %rdi,%rdx
+ /* Restore the mxcsr, but leave exception flags intact. */
+ stmxcsr -4(%rsp)
+ movl 68(%rdx),%eax
+ andl $0xffffffc0,%eax
+ movl -4(%rsp),%edi
+ andl $0x3f,%edi
+ xorl %eax,%edi
+ movl %edi,-4(%rsp)
+ ldmxcsr -4(%rsp)
movq %rsi,%rax /* retval */
movq 0(%rdx),%rcx
movq 8(%rdx),%rbx
@@ -92,7 +102,6 @@
movq 40(%rdx),%r13
movq 48(%rdx),%r14
movq 56(%rdx),%r15
- fninit
fldcw 64(%rdx)
testq %rax,%rax
jnz 1f
==== //depot/projects/hammer/lib/libc/gen/glob.c#7 (text+ko) ====
@@ -34,7 +34,7 @@
static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93";
#endif /* LIBC_SCCS and not lint */
#include
-__FBSDID("$FreeBSD: src/lib/libc/gen/glob.c,v 1.26 2007/01/09 00:27:54 imp Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/gen/glob.c,v 1.27 2008/06/26 07:12:35 mtm Exp $");
/*
* glob(3) -- a superset of the one defined in POSIX 1003.2.
@@ -143,7 +143,7 @@
static int g_Ctoc(const Char *, char *, size_t);
static int g_lstat(Char *, struct stat *, glob_t *);
static DIR *g_opendir(Char *, glob_t *);
-static Char *g_strchr(Char *, wchar_t);
+static const Char *g_strchr(const Char *, wchar_t);
#ifdef notdef
static Char *g_strcat(Char *, const Char *);
#endif
@@ -246,7 +246,7 @@
if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS)
return glob0(pattern, pglob, limit);
- while ((ptr = (const Char *) g_strchr((Char *) ptr, LBRACE)) != NULL)
+ while ((ptr = g_strchr(ptr, LBRACE)) != NULL)
if (!globexp2(ptr, pattern, pglob, &rv, limit))
return rv;
@@ -449,7 +449,7 @@
if (c == NOT)
++qpatnext;
if (*qpatnext == EOS ||
- g_strchr((Char *) qpatnext+1, RBRACKET) == NULL) {
+ g_strchr(qpatnext+1, RBRACKET) == NULL) {
*bufnext++ = LBRACKET;
if (c == NOT)
--qpatnext;
@@ -859,8 +859,8 @@
return(stat(buf, sb));
}
-static Char *
-g_strchr(Char *str, wchar_t ch)
+static const Char *
+g_strchr(const Char *str, wchar_t ch)
{
do {
==== //depot/projects/hammer/lib/libc/i386/gen/_setjmp.S#3 (text+ko) ====
@@ -34,7 +34,7 @@
.asciz "@(#)_setjmp.s 5.1 (Berkeley) 4/23/90"
#endif /* LIBC_SCCS and not lint */
#include
-__FBSDID("$FreeBSD: src/lib/libc/i386/gen/_setjmp.S,v 1.17 2007/01/09 00:27:58 imp Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/i386/gen/_setjmp.S,v 1.18 2008/06/28 17:58:06 das Exp $");
/*
* C library -- _setjmp, _longjmp
@@ -70,7 +70,6 @@
movl 12(%edx),%ebp
movl 16(%edx),%esi
movl 20(%edx),%edi
- fninit
fldcw 24(%edx)
testl %eax,%eax
jnz 1f
==== //depot/projects/hammer/lib/libc/i386/gen/setjmp.S#3 (text+ko) ====
@@ -34,7 +34,7 @@
.asciz "@(#)setjmp.s 5.1 (Berkeley) 4/23/90"
#endif /* LIBC_SCCS and not lint */
#include
-__FBSDID("$FreeBSD: src/lib/libc/i386/gen/setjmp.S,v 1.23 2007/01/09 00:27:58 imp Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/i386/gen/setjmp.S,v 1.24 2008/06/28 17:58:06 das Exp $");
/*
* C library -- _setjmp, _longjmp
@@ -90,7 +90,6 @@
movl 12(%edx),%ebp
movl 16(%edx),%esi
movl 20(%edx),%edi
- fninit
fldcw 24(%edx)
testl %eax,%eax
jnz 1f
==== //depot/projects/hammer/lib/libc/net/getaddrinfo.3#14 (text+ko) ====
@@ -16,9 +16,9 @@
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
.\" PERFORMANCE OF THIS SOFTWARE.
.\"
-.\" $FreeBSD: src/lib/libc/net/getaddrinfo.3,v 1.33 2007/06/06 19:24:02 remko Exp $
+.\" $FreeBSD: src/lib/libc/net/getaddrinfo.3,v 1.34 2008/07/01 22:59:20 danger Exp $
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From pgj at FreeBSD.org Wed Jul 2 03:36:01 2008
From: pgj at FreeBSD.org (Gabor Pali)
Date: Wed Jul 2 03:36:06 2008
Subject: PERFORCE change 144455 for review
Message-ID: <200807020336.m623a0Oi037943@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144455
Change 144455 by pgj@disznohal on 2008/07/02 03:35:57
A bit of rework in www/hu/advocacy
Affected files ...
.. //depot/projects/docproj_hu/www/hu/advocacy/index.sgml#4 edit
.. //depot/projects/docproj_hu/www/hu/advocacy/myths.sgml#4 edit
Differences ...
==== //depot/projects/docproj_hu/www/hu/advocacy/index.sgml#4 (text+ko) ====
@@ -33,15 +33,27 @@
- Webes források
+ Webes források
-
*BSD mítoszok
- Bemutatunk és leleplezünk néhány *BSD
- projektrõl terjedõ mítoszt.
+ Bemutatunk és leleplezünk néhány
+ *BSD projektrõl terjedõ mítoszt.
+
+
+
-
&os; a
@@ -63,34 +75,51 @@
&os;-t használó oldalak
+ - A Daemon News
+ egy elektronikus publikáció a BSD
+ operációs rendszerekrõl
+ általában. A célja, hogy egy forrás
+ legyen a &os;, OpenBSD, és NetBSD
+ közösségek számára.
+
+ - A BSD Freak egy új
+ oldal, amely a BSD rendszerekrõl felhasználói
+ szemszögbõl bemutató leírásokat,
+ cikkeket és folyóiratokat
+ kínál.
+
+ - A Hosting Providers Performance a Netcraft
+ oldala, a nagyobb tár- és
+ tartalomszolgáltatások
+ megbízhatóságát követi nyomon,
+ amelyek közül sok &os;-t használ.
+
- A Daemon News
- egy elektronikus publikáció a BSD operációs
- rendszerekrõl általában. A célja, hogy egy
- forrás legyen a FreeBSD, OpenBSD, és NetBSD
- közösségek számára.
+ href="http://dmoz.org/Computers/Software/Operating_Systems/Unix/BSD/FreeBSD/"
+ name="dmoz">The Open Directory Project
célja, hogy
+ a legátfogóbb könyvtár legyen a
+ weben. Ebben önkéntes szerkesztõk serege
+ segíti.
- - A BSD Freak egy új oldal,
- útmutatókat, cikkeket és folyóiratokat
- kínál a BSD rendszerekrõl felhasználói
- szemszögbõl
+
- BSDCan, az
- évente megrendezett BSD Konferencia a Kanadában található Ottawában.
+ évente megrendezett BSD Konferencia a Kanadában
+ található Ottawában.
- - EuroBSDCon,
- az éves BSD Konferencia Európában.
+ - EuroBSDCon, az
+ éves BSD Konferencia Európában.
==== //depot/projects/docproj_hu/www/hu/advocacy/myths.sgml#4 (text+ko) ====
@@ -2,7 +2,7 @@
-
+
%developers;
@@ -17,579 +17,689 @@
&header;
- Miközben a BSD projektek (DragonflyBSD, FreeBSD, NetBSD, és
- OpenBSD) nagyra nõttek, számos mítosz kezdett
- terjedni róluk. Ezek közül néhányat
- jó szándékú, ám megfontolatlan
- személyek indítottak el, másokat pedig önhitt
- emberek.
+ Miközben a BSD projektek (DragonflyBSD, &os;, NetBSD
+ és az OpenBSD) nagyra nõttek, számos
+ mítosz kezdett terjedni róluk. Ezek közül
+ néhányat jó szándékú,
+ ám megfontolatlan személyek indítottak el,
+ másokat pedig önhitt emberek.
- Ennek az oldalnak az a célja, hogy a lehetõ legnagyobb
- tárgyilagosság mellett eloszlassa ezeket a
+
Ennek az oldalnak az a célja, hogy a lehetõ
+ legnagyobb tárgyilagosság mellett eloszlassa ezeket a
tévhiteket.
- Megjegyzés: Ezen az oldalon a "*BSD"
- kifejezés mind a négy BSD projektre vonatkozik. Ahol a
- mende-monda az egyik különálló projektre
- vonatkozik, ott azt külön említjük.
+ Megjegyzés: Ezen az oldalon a ,,*BSD''
+ kifejezés mind a négy BSD projektre vonatkozik.
+ Ahol az adott mende-monda csak az egyik
+ különálló projektre vonatkozik, ott azt
+ külön említjük.
- Ha úgy gondolja, hogy az oldal valamely
- témában hiányos ismereteket közöl,
- kérjük értesítse az oldal
- fenntartóját, &a.trhodes;-ot a következõ e-mail
- címen:
- <trhodes@FreeBSD.org>
+ Ha úgy érezzük, hogy az oldal
+ valamely témában hiányos ismereteket
+ közöl, akkor értesítsük az oldal
+ fenntartóját, &a.trhodes;-ot a következõ
+ e-mail címen: <trhodes@FreeBSD.org>
Tartalom
- - A *BSD zárt fejlesztési
- modellel rendelkezik
+ - A *BSD rendszerek zárt
+ fejlesztési modellel rendelkeznek, sokkal inkább
+ ,,katedrálisok'' mintsem ,,bazárok''
- - Nem készíthet saját
- disztribúciót, vagy egyéb, *BSD-bõl
- származó munkát
+ - A *BSD rendszerekrõl nem
+ készíthetõ saját
+ disztribúció, vagy nem
+ származtatható egyéb munka
- - A *BSD egy remek kiszolgáló, de rossz
- desktop rendszer
+ - A *BSD rendszerek remek
+ kiszolgálók, de rossz asztali rendszerek
- - A *BSD kódbázis régi,
- elavult és haldokló
+ - A *BSD rendszerek
+ forráskódja régi, elavult és
+ haldoklik
- - A *BSD projektek egymással versengenek
- felhasználók csoportjait egyre jobban megosztva
- ezzel
+ - A *BSD projektek egymással
+ háborúznak, hetente válnak ki újabb
+ felhasználói csoportok
- - Nem lehet *BSD rendszereket fürtözni
- (párhuzamos használat)
+ - A *BSD rendszereket nem
+ fürtözni (párhuzamos
+ számításokra)
- Nincs kereskedelmi támogatás
- *BSD rendszerekhez
+ a *BSD rendszerekhez
- - Nincsenek alkalmazások
- *BSD rendszerekhez
+ - Nincsenek alkalmazások a *BSD
+ rendszerekhez
- - A *BSD jobb, mint más rendszerek
+ - A *BSD rendszerek jobbak, mint más
+ rendszerek
- - Más rendszerek jobbak, mint a *BSD
+ - Más rendszerek jobbak, mint a
+ *BSD a rendszerek
- Mítoszok
+ Mítoszok
- A *BSD zárt fejlesztési
- modellel rendelkezik
+ A *BSD rendszerek zárt
+ fejlesztési modellel rendelkeznek, sokkal inkább
+ ,,katedrálisok'' mintsem ,,bazárok''
- Eric Raymond nagy hatású írása
- "The
- Cathedral and the Bazaar" címmel a Linux fejlesztési
- modellt (és azt a modellt, amelyet Eric a fetchmail-hez
- használt) említi mint a "nyílt" fejlesztési
- modell példáját. Ezzel szemben a *BSD
+
Eric Raymond nagy hatású írása A katedrális és a bazár
+ címmel a Linux fejlesztési modellt (és azt a
+ modellt, amelyet Eric a fetchmail
+ kifejlesztéséhez használt) említi mint
+ a ,,nyílt'' fejlesztési modell
+ példáját. Ezzel szemben a *BSD
fejlesztési modelljét gyakran jellemzik
zártként.
- A hallgatólagos bírálat szerint a "bazár"
- (nyílt) jó, és a "katedrális" (zárt)
- rossz.
+ A hallgatólagos bírálat szerint a
+ ,,bazár'' (nyílt) jó, és a
+ ,,katedrális'' (zárt) rossz.
- Ha valami, akkor a *BSD fejlesztési modell
- még inkább hasonlít a
- "bazárhoz", mint a Linux vagy a fetchmail
- esetében, amelyeket Eric említ.
+ Ha valami, akkor a *BSD rendszerek által alkalmazott
+ fejlesztési modell még inkább
+ hasonlít a ,,bazárhoz'', mint a Linux vagy a
+ fetchmail esetében, amelyeket Eric
+ említ.
- Vegye figyelembe a következõket:
+ Ehhez elég csupán a következõket
+ figyelembe vennünk:
- Minden *BSD projekt: Az aktuális fejlesztési
- forráskód a FreeBSD, NetBSD, és az OpenBSD
- esetében is bárki számára
- elérhetõ az Interneten keresztül, a nap 24
- órájában. Nem szükséges
- arra várni, hogy egy új kiadás jelenjen meg.
+ -
+
Minden *BSD projekt esetén: A
+ forráskód aktuális változata a
+ &os;, NetBSD, és az OpenBSD esetében is a nap 24
+ órájában bárki
+ számára elérhetõ az Interneten
+ keresztül. Nem szükséges arra várni,
+ hogy egy új kiadás jelenjen meg.
- FreeBSD, NetBSD: Egy telepíthetõ "snapshot"
- verzió válik elérhetõvé 24
- óránként. Ezek a snapshotok teljesen
- ugyanúgy telepíthetõk mint a
- közönséges kiadások, és a
- telepítéshez nem szükséges egy
- meglévõ rendszer.
+ &os;, NetBSD: Egy telepíthetõ ,,pillanat''
+ verzió 24 óránként válik
+ elérhetõvé. Ezek a pillanatképek
+ teljesen ugyanúgy telepíthetõk mint a
+ közönséges kiadások, és a
+ telepítéshez nem szükséges egy
+ meglévõ rendszer.
- OpenBSD: OpenBSD snapshotok naponta készülnek,
- és ha Theo elég jónak találja õket,
- felkerülnek a tükörszerverekre.
+ OpenBSD: OpenBSD pillanatképei naponta
+ készülnek, és ha Theo elég
+ jónak találja ezeket, felkerülnek a
+ tükörszerverekre.
- Ezzel ellentétben a Linux kernelnek csak alkalmilag
- válik elérhetõvé új verziója,
- és a különbözõ disztribúciók
- kiadási gyakorisága a disztribúció
- fejlesztõitõl függ.
+ Ezzel ellentétben a Linux kernelnek csak alkalmilag
+ válik elérhetõvé új
+ verziója, és a különbözõ
+ disztribúciók kiadási gyakorisága
+ a disztribúció fejlesztõitõl
+ függ.
- Itt nem kíséri harsonaszó egy új kernel
- megjelenését, mivel a legtöbb *BSD
- felhasználó számára ez egy mindennapi
- esemény.
+ Itt nem kíséri harsonaszó egy új
+ kernel megjelenését, mivel a legtöbb *BSD
+ felhasználó számára ez egy
+ teljesen megszokott esemény.
+
- A *BSD projektek mind CVS-t használnak a
- forráskód karbantartásához.
+ -
+
A *BSD projektek mind CVS-t használnak a
+ forráskód karbantartásához.
- Minden *BSD projekt: a CVS Repository a nap 24
- órájában böngészhetõ, és
- a repóból az egész rendszer letölthetõ.
- A forrás elérhetõ Anonymous CVS, CVSup, CVSupit,
- CTM (e-mail-en keresztül), vagy FTP
- segítségével.
+ Minden *BSD projekt esetén: a CVS Repository a
+ nap 24 órájában
+ böngészhetõ, és a repositoryból
+ az egész rendszer letölthetõ. A
+ forrás elérhetõ anonim CVS, CVSup, CVSupit,
+ CTM (e-mail-en keresztül) vagy egyszerû FTP
+ segítségével.
+
- Bárki küldhet javításokat,
- hibajelentéseket, dokumentációt, és
- egyéb hozzájárulásokat. Ezt a *BSD
- rendszerek részét képezõ send-pr
- program, vagy a webes felület segítségével
- lehet megtenni.
+ -
+
Bárki küldhet javításokat,
+ hibajelentéseket, dokumentációt,
+ és egyéb módokon is
+ hozzájárulhat a munkához. Ezt a *BSD
+ rendszerek részét képezõ
+ send-pr program vagy a webes felület
+ segítségével lehet megtenni.
- A dokumentáció hemzseg az erre való
- hivatkozásoktól.
+ A dokumentáció hemzseg az erre utaló
+ hivatkozásoktól.
+
- Nem mindenki hajthat végre változtatásokat a
- *BSD kódban. Elõször committerré kell
- válnia. Általában olyan emberek kapnak "commit
- jogot", akik már a send-pr
- segítségével, vagy hasonló módon
- beküldtek pár jól átgondolt
- változtatást a projektnek.
+ -
+
Nem mindenki hajthat végre
+ változtatásokat a *BSD rendszerek
+ forráskódjában, ehhez elõször
+ committerré kell válnia.
+ Általában olyan emberek kapnak ,,commit jogot'',
+ akik már a send-pr
+ segítségével vagy más
+ hasonló módon beküldtek már
+ pár alapos változtatást a projektnek.
Ez a rendszer hasonló a Linux módszeréhez.
Egyetlen ember, Linus jogosult megváltoztatni a kernelt,
- de a különbözõ területek fejlesztése
- (mint például a hálózati kód)
- más emberek közt van szétosztva
- karbantartásra.
+ de a különbözõ területek (mint
+ például a hálózati kód)
+ fejlesztését más emberek tartják
+ karban.
- Mellesleg: Nik (nik@FreeBSD.org) jó példa erre.
- Miután számos fejlesztést hajtott végre a
- FreeBSD Dokumentációs Projekten és a weboldalon,
- felajánlották neki a "commit jogot", hogy ne kelljen
- más committereket zargatnia, hogy hajtsák végre
- az általa készített fejlesztéseket.
- Soha nem kérte ezt a jogot, ingyen kapta.
+ Mellesleg Nik (nik@FreeBSD.org) jó példa erre.
+ Miután számos fejlesztést hajtott
+ végre a FreeBSD Dokumentációs Projekten
+ és a weboldalon, felajánlották neki a
+ ,,commit jogot'', hogy ne kelljen más committereket
+ zargatnia, hogy hajtsák végre az általa
+ készített fejlesztéseket. Soha nem
+ kérte ezt a jogot, ingyen kapta.
+
- Nem készíthet saját
- disztribúciót, vagy egyéb, *BSD-bõl
- származó munkát
+ A *BSD rendszerekrõl nem
+ készíthetõ saját
+ disztribúció, vagy nem származtatható
+ egyéb munka
- Készíthet, csak a dokumentációban és
- a forrásfájlokban fel kell tüntetnie, hogy a
- kód honnan
- származik. Rengeteg származtatott projekt
- létezik:
+ Készíthetõ, csak a
+ dokumentációban és a
+ forrásfájlokban fel kell tüntetni, hogy a
+ forráskód honnan származik. Rengeteg
+ származtatott projekt létezik:
- A DragonflyBSD
- a FreeBSD 4.X egy kódelágazásaként
- indult, de azóta kialakult a saját
- felhasználói közössége és a
- fejlesztési céljai.
+ -
+
A DragonflyBSD a
+ &os; 4.X egy leágazásaként indult,
+ de azóta már van saját
+ felhasználói közössége
+ és vannak fejlesztési céljai.
+
- A TrustedBSD
- olyan kiegészítéseket nyújt
- a FreeBSD-hez, amelyek a trusted operációs
- rendszerekre jellemzõ funkciókkal látják
- el azt, megcélozva ezzel az IT biztonsági
- minõsítést, a Common Criteria-t (CC).
- Ez a projekt fejlesztés alatt áll, a kód
- nagy része visszakerül a FreeBSD alaprendszerbe, de a
- fejlesztés külön történik.
+ -
+
A TrustedBSD a
+ &os;-hez nyújt a megbízható (trusted)
+ operációs rendszerekre jellemzõ
+ funkciókat képviselõ
+ különbözõ kiterjesztéseket,
+ és ezzel az IT biztonsági
+ minõsítést, a Common Criteria-t (CC)
+ célozza meg. Ez a projekt folyamatos fejlesztés
+ alatt áll, a kód nagy része
+ visszakerül a &os; alaprendszerébe, de a
+ fejlesztés külön történik.
+
- A FreeSBIE egy
- CD-ROM-ról futó teljes desktop rendszer.
- Telepíthetõ is, de különösen
- hasznos háttértár nélküli
- számítógépekhez.
+ -
+
A FreeSBIE egy
+ CD-ROM-ról futó teljes asztali rendszer.
+ Telepíthetõ is, de különösen
+ hasznos háttértár nélküli
+ számítógépekhez.
- A Frenzy egy
- másik live-CD disztribúció, de
- elsõsorban adminisztrációs feladatokhoz.
- Egyaránt tartalmaz hardvertesztelõ,
- fájlrendszer-ellenõrzõ, biztonsági
- ellenõrzõ, hálózat-konfiguráló
- és -analizáló szoftvereket.
+ -
+
A Frenzy egy
+ másik live-CD disztribúció, de
+ elsõsorban adminisztrációs feladatokhoz.
+ Egyaránt tartalmaz hardvertesztelõ,
+ állományrendszer-ellenõrzõ,
+ biztonsági ellenõrzõ,
+ hálózatkonfiguráló és
+ -analizáló szoftvereket.
+
- A PicoBSD
- egy testreszabott FreeBSD disztribúció, amely
- elfér akár egy floppy lemezen is. Remek eszköz
- merevlemez nélküli 386-os PC-k routerré, vagy
- nyomtató szerverré alakításához.
- A FreeBSD forrásfa része, tekintse meg a
- /usr/src/release/picobsd könyvtárat.
+ -
+
A PicoBSD
+ egy testreszabott &os; disztribúció, amely
+ elfér akár egy floppy lemezen is. Remek
+ eszköz merevlemez nélküli 386-os PC-k
+ útválasztóvá vagy
+ nyomtatószerverré
+ alakításához. A &os;
+ forrásfájának része, lásd a
+ /usr/src/release/picobsd könyvtárat.
+
- A NanoBSD egy
- másik projekt a FreeBSD minimális
- helyigényû verzióinak
- elõállításához amelyek
- elférnek egy Compact Flash kártyán, vagy
- egyéb elterjedt adathordozón. Ez a projekt is
- a FreeBSD forrásfa része, tekintse meg a
- /usr/src/tools/tools/nanobsd könyvtárat.
+ -
+
A NanoBSD egy
+ másik olyan projekt, amely a &os; minimális
+ helyigényû verziójának
+ elõállításával foglalkozik.
+ Ez a változat elfér egy Compact Flash
+ kártyán vagy egyéb kisebb
+ méretû adathordozón. Ez a projekt is a
+ &os; forrásfájának része,
+ lásd a /usr/src/tools/tools/nanobsd
+ könyvtárat.
+
- A TinyBSD
- shell scriptek egy olyan készlete, amelyek a
- FreeBSD 5.X és 6.X verzióin alapuló
- beágyazott rendszerek fejlesztéséhez
- használható.
+ -
+
A TinyBSD olyan
+ shell szripteket foglal össze, amelyek a &os; 5.X
+ és 6.X verzióin alapuló beágyazott
+ rendszerek fejlesztéséhez
+ használhatóak.
- A ThinBSD egy
- kisméretû rendszerindító lemez,
- amellyel egy egyszerû PC-t használhatunk
- Microsoft Windows RDP kliensként, vagy
- X terminálként. Az egész
- konfiguráció DHCP protokollon
- végezhetõ.
+ -
+
A ThinBSD egy
+ kisméretû rendszerindító lemez,
+ amellyel egy egyszerû PC-t használhatunk Microsoft
+ Windows RDP kliensként, vagy X
+ terminálként. Az egész
+ konfiguráció DHCP protokollon
+ végezhetõ.
+
- A PC-BSD egy dekstop
- felhasználásra készített
- FreeBSD leszármazott. A fejlesztés
- célja, hogy könnyen telepíthetõ
- legyen és egy segítõkész
- közösség alakuljon ki
- körülötte.
+ -
+
A PC-BSD egy asztali
+ felhasználásra elõkészített
+ &os; leszármazott. A fejlesztés célja,
+ hogy könnyen telepíthetõ legyen és egy
+ segítõkész közösség
+ alakuljon ki körülötte.
+
- A DesktopBSD egy
- másik desktop felhasználásra
- szánt FreeBSD alapú operációs
- rendszer.
+ -
+
A DesktopBSD egy
+ másik asztali felhasználásra szánt
+ &os; alapú operációs rendszer.
+
- A
- Gentoo/FreeBSD a Gentoo Projekt kezdeményezése
- arra, hogy a Gentoo adminisztrációs adottságait
- portolják a megbízható FreeBSD kernelre és
- szoftverkörnyezetre. A projekt befejezetlen,
- kísérleti stádiumban van.
+ -
+
A Gentoo/&os;
+ a Gentoo Projekt kezdeményezése arra, hogy a
+ Gentoo adminisztrációs adottságait
+ portolják a megbízható &os;
+ rendszermagjára és
+ szoftverkörnyezetére. A projekt befejezetlen,
+ jelenleg kísérleti stádiumban van.
+
- A m0n0wall egy
- FreeBSD alapú tûzfalrendszer, amely
- rengeteg olyan funkcióval rendelkezik, amelyet
- a drága tûzfalak nyújtanak, mint
- például a webes interfész,
- visszaállíthatóság a
- gyári beállításokra,
- alapos csomagszûrés, NAT/PAT
- átirányítás, DHCP kliens
- és szerver, gyorstáras névszerver
- és még ennél is több.
+ -
+
A m0n0wall egy &os;
+ alapú tûzfalrendszer. Rengeteg olyan
+ funkcióval rendelkezik, amelyet a drága
+ tûzfalak is nyújtanak, mint például
+ a webes interfész, gyári
+ beállítások
+ visszaállítása,
+ állapottartó csomagszûrés, NAT/PAT
+ átirányítás, DHCP kliens és
+ szerver, gyorstárazó névszerver és
+ még sok minden más.
+
- A pfSense egy
- mo0nowall alapú tûzfalrendszer, de a fejlesztés
- céljai és a támogatott funkciók
- különbözõek, mint pl. az OpenBSD Packet
- Filter (PF), FreeBSD 6.1, ALTQ támogatás a
- kiûnõ háló csomagütemezéshez
- és egy integrált csomagkezelõ rendszer a
- bõvíthetõ funkcionalitásért.
+ -
+
A pfSense egy m0n0wall
+ alapú tûzfalrendszer, de a fejlesztés
+ céljai és a támogatott funkciók
+ különbözõek, mint például az
+ OpenBSD Packet Filter (PF) és a &os; 6.1
+ támogatása, vagy a kitûnõ
+ hálózati ütemezéshez az ALTQ
+ támogatása, valamint a funkcionalitás
+ bõvíthetõségét egy
+ integrált csomagkezelõ rendszer
+ segítségével valósítja
+ meg.
+
- A Whistle Interjet egy "hálózati
- készülék", ami router, webszerver,
- e-mail szerver és egyéb funkciókat
- lát el, továbbá webböngészõvel
- konfigurálható. A készülék
- alapja a FreeBSD operációs rendszer,
- és a Whistle a fejlesztéseinek nagy
- részét visszaküldte a FreeBSD projekthez
- (miközben eleget megtartott ahhoz, hogy az
- üzleti versenyben maradhasson).
-
+ -
+
A Whistle Interjet egy ,,hálózati
+ készülék'', amely
+ útválasztó, webszerver, e-mail szerver
+ és egyéb funkciókat lát el,
+ továbbá webböngészõvel
+ konfigurálható. A készülék
+ alapja a &os; operációs rendszer, és a
+ Whistle a fejlesztéseinek nagy részét
+ visszaküldte a &os; Projektnek (miközben eleget
+ megtartott ahhoz, hogy az üzleti versenyben
+ maradhasson).
+
- A DragonflyBSD esetéhez hasonlóan, az OpenBSD sem volt
- önálló projekt, a NetBSD projekt alapjaitól
- indult el, és azóta kialakult a saját
- szemléletmódja.
+ A DragonflyBSD esetéhez hasonlóan, az OpenBSD sem
+ volt önálló projekt, a NetBSD projekt
+ alapjaitól indult el és azóta kialakult a
+ saját szemléletmódja.
- A *BSD egy remek kiszolgáló, de
- rossz desktop rendszer
+ A *BSD rendszerek remek
+ kiszolgálók, de rossz asztali rendszerek
- A *BSD egy remek kiszolgáló, de egy remek desktop
- rendszer is. Sok elvárás a kiszolgálók
- felé (gyors válaszidõ nagy terhelés alatt is,
- stabilitás, erõforrások hatéony
- kihasználása) ugyanúgy elvárás a
- dektop rendszerek esetén is.
+ A *BSD rendszerek remek kiszolgálók, de egyben
+ remek asztali rendszerek is. Sok elvárás a
+ kiszolgálók felé (rövid
+ válaszidõ nagy terhelés alatt is,
+ stabilitás, az erõforrások hatékony
+ kihasználása) ugyanúgy elvárás
+ az asztali rendszerek esetén is.
- A *BSD mûködik ugyanazokkal a desktop szoftverekkel (KDE,
- GNOME, Firefox, ablakkezelõk), mint a Linux, és az irodai
- szoftverek, mint például az OpenOffice csomag is
- remekül mûködik a *BSD rendszerek alatt.
+ A *BSD rendszerek ugyanazokkal az asztali szoftverekkel (KDE,
+ GNOME, Firefox, ablakkezelõk) mûködnek, mint a
+ Linux, és az irodai szoftverek, mint például
+ az OpenOffice csomag is remekül mûködnek
+ alattuk.
- A BSD kódbázis régi,
- elavult és haldokló
+ A *BSD rendszerek
+ forráskódja régi, elavult és
+ haldoklik
- A BSD kódbázis egyes részei több mint 20
- évesek is lehetnek, de ez egyáltalán nem jelenti
- azt, hogy elavult, vagy haldokló. Rengeteg profi
- felhasználó szereti azt a stabilitást, amelyet
- többéves tesztelés eredményezett.
+ Noha a BSD rendszerek forráskódjának egyes
+ részei akár több mint 20 évesek is
+ lehetnek, egyáltalán nem jelenti azt, hogy elavult
+ lenne vagy éppen haldokolna. Rengeteg profi
+ felhasználó szereti azt a stabilitást,
+ amelyet ez a többéves tesztelés hozott
+ magával.
Technológiai fejlesztések továbbra is
- bekerülnek a *BSD rendszerekbe, mint például:
+ bekerülnek a *BSD rendszerekbe, mint
+ például:
- SMP: Symmetric Multi-Processing, több processzorral
- rendelkezõ rendszerek használata.
+ -
+
SMP: Symmetric Multi-Processing, vagyis a több
+ processzorral rendelkezõ rendszerek használata.
+
- SoftUpdates: A BSD fájlrendszert legalább olyan
- gyorssá teszi, mint a Linux fájlrendszer,
- az szinkron írási mûveletek
- engedélyezése - és így az ezzel
- járó kockázat -
- nélkül.
+ -
+
SoftUpdates: A BSD állományrendszert
+ legalább olyan gyorssá teszi mint a Linux
+ által használt állományrendszerek,
+ az aszinkron írási mûveletek
+ engedélyezése — és így az
+ ezzel járó kockázat —
+ nélkül.
+
- VM rendszer: A VM (Virtuális Memória) alrendszer
- folyamatosan fejlõdik. A VM/cache kialakítása
- segít a wcarchive.cdrom.com-hoz hasonló
- kiszolgálóknak a több ezer (konkrétan
- több mint 10.000) egyidejû FTP kapcsolat szakadatlan
- kezelésében.
+ -
+
VM rendszer: A VM (Virtuális Memória)
+ alrendszer folyamatosan fejlõdik. A VM/cache
+ kialakítása segít a wcarchive.cdrom.com
+ szolgáltatásához hasonló
+ kiszolgálóknak a több ezer
+ (konkrétan több mint 10 000) egyidejû
+ FTP kapcsolat kiesésektõl mentes
+ kezelésében.
+
- Architektúra portok: A FreeBSD jelenleg hat fõ
- architektúrát támogat: AMD64, i386,
- Itanium, PC-98, PowerPC és UltraSPARC.
- Jelenleg is folynak fejlesztések további
- architektúrák támogatására.
- Tekintse meg a Támogatott Platformok
- oldalt bõvebb információért.
+ -
+
Különbözõ architektúrák: A
+ &os; jelenleg hét fõ architektúrát
+ támogat: Alpha, AMD64, i386, Itanium, PC-98, PowerPC
+ és UltraSPARC. Jelenleg is folynak fejlesztések
+ további architektúrák
+ támogatására. Bõvebb
+ információért lásd a Támogatott
+ platformok oldalt.
+
- MAC keretrendszer: A FreeBSD támogatja a Mandatory
- Access Controlt, azt a funkciót, amely általában
- drága trusted operációs rendszerekben
- található meg. A FreeBSD kiemelkedõ
- biztonságot nyújt Önnek ingyen! A
- TrustedBSD Projekt
- további trusted operációs rendszer
- kiegészítéseket kínál.
+ -
+
MAC alrendszer: A &os; támogatja a Mandatory Access
+ Controlt, vagyis egy olyan funkciót, amely
+ általában csak drága
+ megbízható (trusted) operációs
+ rendszerekben található meg. A &os; ellenben
+ kiemelkedõ biztonságot nyújt ingyen! A
+ témával kapcsolatban a TrustedBSD Projekt
+ kínál további
+ kiegészítéseket.
- GEOM keretrendszer: A GEOM egy moduláris lemezkezelõ
- keretrendszer, amelynek segítségével
- összefûzhet, tükrözhet, csíkozhat, vagy
- titkosíthat lemezeket. Funkcionalitásban gazdag,
- és biztonságban tartja az adatait.
-
+ -
+
GEOM alrendszer: A GEOM egy moduláris lemezkezelõ
+ rendszer, amelynek segítségével
+ összefûzhetünk, tükrözhetünk,
+ csíkozhatunk vagy titkosíthatunk lemezeket.
+ Funkcionalitásban gazdag, és biztonságban
+ tartja az adatainkat.
+
- A *BSD projektek egymással versengenek
- felhasználók csoportjait egyre jobban megosztva ezzel
+ A *BSD projektek egymással
+ háborúznak, hetente válnak ki újabb
+ felhasználói csoportok
- Ez nem így van. Noha idõnként heves viták
- zajlanak a *BSD rendszerek képviselõi között,
- a projektek továbbra is együtt dolgoznak. A FreeBSD Alpha
- portja kezdetben nagyrészt a NetBSD csapat munkáján
- alapult. A NetBSD és az OpenBSD is a FreeBSD Ports Collectiont
- vette alapul a saját portrendszerének
- kialakításakor. A FreeBSD és a NetBSD is
- átvett biztonsági javításokat, amelyeket
- az OpenBSD-ben fedeztek fel elõször.
+ Ez nem így van. Noha idõnként heves
+ viták zajlanak a *BSD rendszerek képviselõi
+ között, a projektek továbbra is együtt
+ dolgoznak. A &os; Alpha portja kezdetben nagyrészt a
+ NetBSD csapat munkáján alapult. A NetBSD és
+ az OpenBSD is a &os; Portgyûjteményét vette
+ alapul a saját portrendszerének
+ kialakításakor. A &os; és a NetBSD is
+ vesznek át olyan biztonsági
+ javításokat, amelyeket az OpenBSD-ben fedeznek fel
+ elõször.
- A FreeBSD és a NetBSD több mint öt éve
- vált szét, csak az OpenBSD és a DragonflyBSD
- számítanak újabb projektnek.
+ A &os; és a NetBSD projektek több mint tíz
+ éve váltak szét, azóta csak az OpenBSD
+ és a DragonflyBSD számítanak újabb BSD
+ projektnek.
A *BSD projektek más területen is
- együttmûködnek. Például a
- DaemonNews
- havonta frissülõ online magazin is a négy projekt
+ együttmûködnek. Például a DaemonNews havonta
+ frissülõ internetes magazin is a négy projekt
tagjainak közös munkája.
- Nem lehet *BSD rendszereket
- fürtözni (párhuzamos használat)
+ A *BSD rendszereket nem
+ fürtözni (párhuzamos
+ számításokra)
- A következõ (angol nyelvû) URL-ek cáfolják
- ezt;
+ A következõ (angol nyelvû) linkek pontosan ezt
+ cáfolják:
- - http://www.epm.ornl.gov/pvm/
- "The Parallel Virtual Machiné": egy szoftvercsomag, amely
- egyszerûen valósít meg egy fürtöt.
- Ez a forráskód szabadon elérhetõ, és
- nagyobb problémák nélkül elfut
- FreeBSD-n.
+ - http://www.epm.ornl.gov/pvm/
+ The Parallel Virtual Machine: egy olyan szoftvercsomag, amellyel
+ egyszerûen össze tudunk állítani egy
+ fürtöt. Ez a forráskód szabadon
+ elérhetõ, és nagyobb problémák
+ nélkül elfut &os;-n.
-
http://www.scl.ameslab.gov/Projects/old/ClusterCookbook/
- -
- http://people.freebsd.org/~brooks/papers/bsdcon2003/fbsdcluster/
- Brooks Davis leírása egy FreeBSD fürt
- implementációjáról, amely több, mint
- 300 processzort tartalmaz.
+ - http://people.freebsd.org/~brooks/papers/bsdcon2003/fbsdcluster/
+ Brooks Davis leírása egy olyan &os; fürt
+ implementációjáról, amely több,
+ mint 300 processzort tartalmaz.
- -
- http://www.onlamp.com/pub/a/bsd/2004/07/01/freesbie.html
+
- http://www.onlamp.com/pub/a/bsd/2004/07/01/freesbie.html
Webkiszolgáló fürt létrehozása
- FreeSBIE-vel (egy FreeBSD alapú live-CD rendszer).
+ FreeSBIE-vel (egy &os; alapú live-CD rendszerrel).
- -
- http://www.openbsd.org/faq/pf/carp.html
- Az OpenBSD Common Address Redundancy Protocol-ja (CARP), amellyel
+
- http://www.openbsd.org/faq/pf/carp.html
+ Az OpenBSD Közös cím redudancia protokollja
+ (Common Address Redundancy Protocol, CARP), amellyel
redundáns fürtöket hozhatunk létre a
tûzfal szintjén.
- -
- http://www.countersiege.com/doc/pfsync-carp
+
- http://www.countersiege.com/doc/pfsync-carp
Egy jó áttekintés a CARP-ról.
- -
- http://pf4freebsd.love2party.net/carp.html
- Az OpenBSD CARP-jának FreeBSD portja.
+ - http://pf4freebsd.love2party.net/carp.html
+ Az OpenBSD CARP implementációjának &os;
+ portja.
+
-
-
- Ezen kívül a
- freebsd-cluster
- levelezési lista is rendelkezésre áll a FreeBSD
- fürtözésével kapcsolatos kérdések
- megvitatására.
+ Ezeken kívül még a freebsd-cluster
+ levelezési lista is rendelkezésre áll a
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From pgj at FreeBSD.org Wed Jul 2 05:09:36 2008
From: pgj at FreeBSD.org (Gabor Pali)
Date: Wed Jul 2 05:09:39 2008
Subject: PERFORCE change 144459 for review
Message-ID: <200807020509.m6259Zku057024@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144459
Change 144459 by pgj@disznohal on 2008/07/02 05:09:10
Rework in www/hu/community
Affected files ...
.. //depot/projects/docproj_hu/www/hu/community/irc.sgml#5 edit
.. //depot/projects/docproj_hu/www/hu/community/mailinglists.sgml#7 edit
.. //depot/projects/docproj_hu/www/hu/community/newsgroups.sgml#7 edit
.. //depot/projects/docproj_hu/www/hu/community/webresources.sgml#4 edit
Differences ...
==== //depot/projects/docproj_hu/www/hu/community/irc.sgml#5 (text+ko) ====
@@ -17,23 +17,24 @@
&header;
Ugyan több IRC hálózaton létezik
- #freebsd csatorna, de a FreeBSD Projekt nem felügyeli ezeket
- és nem ismeri el az IRC-t, mint támogatási
- formát. Elõfordulhat, hogy nem figyelnek Önre,
- inzultálják, vagy kirúgják, ha
- kérdéseket tesz fel bármilyen IRC
- csatornán, de kicsit több szerencséje lehet, ha
- #freebsdhelp csatornákon próbálkozik, ahol
- létezik ilyen. A &os;-vel foglalkozó IRC
- csatornákat a &os; wikijében
- olvashatjuk. Ha ki akarja próbálni ezeket, vagy
- más IRC csatornákat, teljes mértékben
- a saját felelõsségére teszi, a FreeBSD
- Projekt nem foglalkozik az ezekkel a csatornákkal
- kapcsolatos panaszokkal. Ha többet szeretne errõl
- megtudni, akkor tekintse meg az erre vonatkozó GYIK bejegyzést
+ olvashatjuk. Teljesen a saját
+ felelõsségünkre tegyünk próbát
+ ezeken vagy más IRC csatornákon, a &os; Projekt
+ nem foglalkozik az ezzel kapcsolatos panaszokkal. Ha többet
+ szeretnénk errõl megtudni, akkor tekintsünk meg
+ az erre vonatkozó GYIK bejegyzést
.
&footer;
==== //depot/projects/docproj_hu/www/hu/community/mailinglists.sgml#7 (text+ko) ====
@@ -2,7 +2,7 @@
-
+
]>
@@ -16,29 +16,29 @@
&header;
- A levelezési listák jelentik a FreeBSD
+
A levelezési listák jelentik a &os;
közösség fõ kommunikációs
- csatornáját és rengeteg
- témát érintenek.
+ csatornáját és rengeteg témát
+ érintenek.
Levelezési lista archívumok
- A levelezési listák archívumait
- keresheti
- vagy böngészheti
- a
- www.FreeBSD.org
- honlapon keresztül. A Mailman is biztosít egy
- webes felületet az archívum
- böngészéséhez.
-
+ A www.FreeBSD.org honlapon
+ keresztül kereshetünk
+ vagy böngészhetünk
+ a levelezési listák archívumában.
+ Ehhez a Mailman nyújt webes felületet
+ .
- Angol Levelezési Listák
+ Angol nyelvû levelezési listák
- Az angol nyelvû levelezési listák a FreeBSD
- Kézikönyvben vannak
- felsorolva.
+ Az angol nyelvû levelezési listákat a &os;
+ kézikönyvben soroltuk fel
+ .
Nem angol nyelvû levelezési listák
@@ -46,89 +46,89 @@
létezik:
- Ha létrehoz egy újabb FreeBSD levelezési
- listát, kérjük
- tudassa velünk!
+ Ha létrehoz egy újabb &os; levelezési
+ listát, kérjük tudassa velünk!
&footer;
==== //depot/projects/docproj_hu/www/hu/community/newsgroups.sgml#7 (text+ko) ====
@@ -2,7 +2,7 @@
-
+
]>
@@ -16,20 +16,21 @@
&header;
- Létezik pár FreeBSD-vel foglalkozó
- hírcsoport,
+
Létezik pár &os;-vel foglalkozó hírcsoport,
és sok más egyéb olyan hírcsoport is,
- amelyek érdekesek lehetnek a FreeBSD felhasználói
- számára, de ennek ellenére a levelezési
- listák jelentik a legmegbízhatóbb utat, hogy
- felvegye a kapcsolatot a FreeBSD fejlesztõivel.
- A különféle FreBSD-vel kapcsolatos
- megbeszéléseket comp.unix.bsd.freebsd.misc
- hírcsoportban találja. Fontos bejelentésekhez
- tekintse meg a
- comp.unix.bsd.freebsd.announce
- hírcsoportot.
+ hírcsoportban találjuk. A fontos
+ bejelentéset lásd a comp.unix.bsd.freebsd.announce
+ hírcsoportban.
&footer;
==== //depot/projects/docproj_hu/www/hu/community/webresources.sgml#4 (text+ko) ====
@@ -2,7 +2,7 @@
-
+
]>
@@ -17,53 +17,55 @@
&header;
Ez a weboldal a legjobb információforrás,
- ráadásul rengeteg tükörrel rendelkezik
- világszerte. Próbálja ki a
+ ráadásul rengeteg tükrözéssel
+ rendelkezik világszerte. Próbálkozzunk a
www.országrövidítés.FreeBSD.org
- címet (pl.
- www.de.FreeBSD.org
- Németország, vagy
- www.au.FreeBSD.org
- Ausztrália tükréhez), vagy válasszon egy
- szervert a fõoldal
- legördülõ listájából.
+ címmel (például a www.de.FreeBSD.org a
+ németországi, vagy a www.au.FreeBSD.org az
+ ausztráliai tükrözés), vagy
+ válasszunk egy szervert a fõoldal legördülõ
+ listájából.
- A FreeBSD weboldala több nyelvre le lett fordítva.
- A fordított verziókhoz linkeket a
- fõoldalon
- találhat.
+ A &os; honlapja több nyelven is olvasható. A
+ különbözõ fordítások linkjeit a
+ fõoldalon találhatjuk
+ meg.
- Ezen kívül több nem angol nyelvû
+
Ezenkívül még több nem angol nyelvû
forrás is létezik:
- A FreeBSD jelenlegi állapotáról
- szóló információkért tekintse meg a
- Hírek oldalt.
+ A &os; jelenlegi állapotáról
+ szóló információkat a Hírek oldalon
+ találjuk.
&footer;
From hselasky at FreeBSD.org Wed Jul 2 09:47:18 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Wed Jul 2 09:47:22 2008
Subject: PERFORCE change 144475 for review
Message-ID: <200807020947.m629lHIg004365@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144475
Change 144475 by hselasky@hselasky_laptop001 on 2008/07/02 09:47:12
Fix some LORs. When starting and stopping an USB transfer it is safest
to defer the callback to the callback thread, and not do all callbacks
from the current execution environment. That way the USB callback is
always executed from the callback thread/process: See:
xfer->usb2_root->done_p (struct usb2_process)
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/controller/usb2_controller.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#6 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#9 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.h#4 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/controller/usb2_controller.c#5 (text+ko) ====
@@ -234,9 +234,7 @@
* Free USB Root device, but not any sub-devices, hence they
* are freed by the caller of this function:
*/
- sx_xlock(udev->default_sx + 1);
usb2_detach_device(udev, USB_IFACE_INDEX_ANY, 0);
- sx_unlock(udev->default_sx + 1);
usb2_free_device(udev);
mtx_unlock(&Giant);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#6 (text+ko) ====
@@ -856,6 +856,7 @@
{
struct usb2_interface *iface;
uint8_t i;
+ uint8_t do_unlock;
if (udev == NULL) {
/* nothing to do */
@@ -863,7 +864,13 @@
}
DPRINTF(3, "udev=%p\n", udev);
- sx_assert(udev->default_sx + 1, SA_LOCKED);
+ /* automatic locking */
+ if (sx_xlocked(udev->default_sx + 1)) {
+ do_unlock = 0;
+ } else {
+ do_unlock = 1;
+ sx_xlock(udev->default_sx + 1);
+ }
/*
* First detach the child to give the child's detach routine a
@@ -890,6 +897,10 @@
}
usb2_detach_device_sub(udev, &(iface->subdev), free_subdev);
}
+
+ if (do_unlock) {
+ sx_unlock(udev->default_sx + 1);
+ }
return;
}
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#8 (text+ko) ====
@@ -313,9 +313,7 @@
/* detach any existing devices */
if (child) {
- sx_xlock(child->default_sx + 1);
usb2_detach_device(child, USB_IFACE_INDEX_ANY, 1);
- sx_unlock(child->default_sx + 1);
usb2_free_device(child);
child = NULL;
}
@@ -409,9 +407,7 @@
error:
if (child) {
- sx_xlock(child->default_sx + 1);
usb2_detach_device(child, USB_IFACE_INDEX_ANY, 1);
- sx_unlock(child->default_sx + 1);
usb2_free_device(child);
child = NULL;
}
@@ -806,9 +802,7 @@
* Subdevices are not freed, because the caller of
* uhub_detach() will do that.
*/
- sx_xlock(child->default_sx + 1);
usb2_detach_device(child, USB_IFACE_INDEX_ANY, 0);
- sx_unlock(child->default_sx + 1);
usb2_free_device(child);
child = NULL;
}
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.c#5 (text+ko) ====
@@ -365,7 +365,7 @@
usb2_transfer_start(xfer);
- while (xfer->flags_int.transferring) {
+ while (usb2_transfer_pending(xfer)) {
if ((flags & USB_USE_POLLING) || cold) {
usb2_do_poll(udev->default_xfer, USB_DEFAULT_XFER_MAX);
} else {
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#9 (text+ko) ====
@@ -125,6 +125,7 @@
static void usb2_control_transfer_init(struct usb2_xfer *xfer);
static uint8_t usb2_start_hardware_sub(struct usb2_xfer *xfer);
static void usb2_callback_proc(struct usb2_proc_msg *_pm);
+static void usb2_callback_ss_done_defer(struct usb2_xfer *xfer);
static void usb2_callback_wrapper(struct usb2_xfer_queue *pq);
static void usb2_dma_delay_done_cb(void *arg);
static void usb2_transfer_start_cb(void *arg);
@@ -1164,6 +1165,9 @@
/* the size of the SETUP structure is hardcoded ! */
if (xfer->frlengths[0] != sizeof(struct usb2_device_request)) {
+ DPRINTF(-1, "Wrong framelength %u != %u\n",
+ xfer->frlengths[0], sizeof(struct
+ usb2_device_request));
goto error;
}
/* check USB mode */
@@ -1470,7 +1474,7 @@
}
mtx_lock(xfer->usb2_mtx);
/* call the USB transfer callback */
- usb2_command_wrapper(&(xfer->usb2_root->done_q), xfer);
+ usb2_callback_ss_done_defer(xfer);
mtx_unlock(xfer->usb2_mtx);
return;
}
@@ -1540,6 +1544,46 @@
}
/*------------------------------------------------------------------------*
+ * usb2_transfer_pending
+ *
+ * This function will check if an USB transfer is pending which is a
+ * little bit complicated!
+ * Return values:
+ * 0: Not pending
+ * 1: Pending: The USB transfer will receive a callback in the future.
+ *------------------------------------------------------------------------*/
+uint8_t
+usb2_transfer_pending(struct usb2_xfer *xfer)
+{
+ struct usb2_xfer_root *info;
+ struct usb2_xfer_queue *pq;
+
+ mtx_assert(xfer->priv_mtx, MA_OWNED);
+
+ if (xfer->flags_int.transferring) {
+ /* trivial case */
+ return (1);
+ }
+ mtx_lock(xfer->usb2_mtx);
+ if (xfer->wait_queue) {
+ /* we are waiting on a queue somewhere */
+ mtx_unlock(xfer->usb2_mtx);
+ return (1);
+ }
+ info = xfer->usb2_root;
+ pq = &(info->done_q);
+
+ if (pq->curr == xfer) {
+ /* we are currently scheduled for callback */
+ mtx_unlock(xfer->usb2_mtx);
+ return (1);
+ }
+ /* we are not pending */
+ mtx_unlock(xfer->usb2_mtx);
+ return (0);
+}
+
+/*------------------------------------------------------------------------*
* usb2_transfer_drain
*
* This function will stop the USB transfer and wait for any
@@ -1564,7 +1608,7 @@
usb2_transfer_stop(xfer);
- while (xfer->flags_int.transferring) {
+ while (usb2_transfer_pending(xfer)) {
xfer->flags_int.draining = 1;
/*
* Wait until the current outstanding USB
@@ -1645,6 +1689,43 @@
}
/*------------------------------------------------------------------------*
+ * usb2_callback_ss_done_defer
+ *
+ * This function will defer the start, stop and done callback to the
+ * correct thread.
+ *------------------------------------------------------------------------*/
+static void
+usb2_callback_ss_done_defer(struct usb2_xfer *xfer)
+{
+ struct usb2_xfer_root *info = xfer->usb2_root;
+ struct usb2_xfer_queue *pq = &(info->done_q);
+
+ if (!mtx_owned(xfer->usb2_mtx)) {
+ panic("%s: called unlocked!\n", __FUNCTION__);
+ }
+ if (pq->curr != xfer) {
+ usb2_transfer_enqueue(pq, xfer);
+ }
+ if (!pq->recurse_1) {
+
+ /*
+ * We have to postpone the callback due to the fact we
+ * will have a Lock Order Reversal, LOR, if we try to
+ * proceed !
+ */
+ if (usb2_proc_msignal(&(info->done_p),
+ &(info->done_m[0]), &(info->done_m[1]))) {
+ /* ignore */
+ }
+ } else {
+ /* clear second recurse flag */
+ pq->recurse_2 = 0;
+ }
+ return;
+
+}
+
+/*------------------------------------------------------------------------*
* usb2_callback_wrapper
*
* This is a wrapper for USB callbacks. This wrapper does some
@@ -1663,11 +1744,10 @@
}
if (!mtx_owned(xfer->priv_mtx)) {
/*
- * Cases that end up here:
- *
- * 5) HW interrupt done callback or other source.
- */
-
+ * Cases that end up here:
+ *
+ * 5) HW interrupt done callback or other source.
+ */
DPRINTF(2, "case 5\n");
/*
@@ -1675,7 +1755,6 @@
* will have a Lock Order Reversal, LOR, if we try to
* proceed !
*/
-
if (usb2_proc_msignal(&(info->done_p),
&(info->done_m[0]), &(info->done_m[1]))) {
/* ignore */
@@ -1700,6 +1779,11 @@
/* set correct USB state for callback */
if (!xfer->flags_int.transferring) {
xfer->usb2_state = USB_ST_SETUP;
+ if (!xfer->flags_int.started) {
+ /* we got stopped before we even got started */
+ mtx_lock(xfer->usb2_mtx);
+ goto done;
+ }
} else {
if (usb2_callback_wrapper_sub(xfer)) {
@@ -1905,7 +1989,7 @@
}
/* call the USB transfer callback */
- usb2_command_wrapper(&(xfer->usb2_root->done_q), xfer);
+ usb2_callback_ss_done_defer(xfer);
return;
}
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.h#4 (text+ko) ====
@@ -63,10 +63,8 @@
uint32_t dma_nframes; /* number of page caches to load */
uint32_t dma_currframe; /* currect page cache number */
uint32_t dma_frlength_0; /* length of page cache zero */
-
uint8_t dma_error; /* set if virtual memory could not be
* loaded */
-
uint8_t done_sleep; /* set if done thread is sleeping */
};
@@ -103,6 +101,7 @@
/* function prototypes */
+uint8_t usb2_transfer_pending(struct usb2_xfer *xfer);
uint8_t usb2_transfer_setup_sub_malloc(struct usb2_setup_params *parm, struct usb2_page_search *info, struct usb2_page_cache **ppc, uint32_t size, uint32_t align);
void usb2_command_wrapper(struct usb2_xfer_queue *pq, struct usb2_xfer *xfer);
void usb2_pipe_enter(struct usb2_xfer *xfer);
From trasz at FreeBSD.org Wed Jul 2 10:04:35 2008
From: trasz at FreeBSD.org (Edward Tomasz Napierala)
Date: Wed Jul 2 10:04:38 2008
Subject: PERFORCE change 144476 for review
Message-ID: <200807021004.m62A4YnS006795@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144476
Change 144476 by trasz@trasz_traszkan on 2008/07/02 10:03:54
IFC
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/ObsoleteFiles.inc#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/net/getaddrinfo.3#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libutil/Makefile#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libutil/hexdump.3#1 branch
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libutil/hexdump.c#1 branch
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libutil/libutil.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sbin/dhclient/dhclient.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sbin/sconfig/sconfig.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/amd64/amd64/pmap.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/boot/i386/boot2/boot2.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/compat/pecoff/imgact_pecoff.c#2 delete
.. //depot/projects/soc2008/trasz_nfs4acl/sys/compat/pecoff/imgact_pecoff.h#2 delete
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ce/ceddk.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ce/if_ce.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/cp/cpddk.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/cp/if_cp.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ctau/ctddk.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ctau/if_ct.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/cx/cxddk.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/cx/if_cx.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/rgephy.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/rgephyreg.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mpt/mpt_pci.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mpt/mpt_user.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/re/if_re.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/fs/smbfs/smbfs_node.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/modules/pecoff/Makefile#2 delete
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net/if_bridge.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/nfsserver/nfs_syscalls.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/pci/if_rlreg.h#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/usr.bin/cpio/cpio.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/usr.bin/gzip/unbzip2.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/usr.bin/gzip/znew#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/usr.bin/su/su.1#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/usr.sbin/mountd/exports.5#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/usr.sbin/pmcstat/pmcstat.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/usr.sbin/wpa/wpa_supplicant/Makefile#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/usr.sbin/wpa/wpa_supplicant/wpa_supplicant.conf.5#2 integrate
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/ObsoleteFiles.inc#3 (text+ko) ====
@@ -1,5 +1,5 @@
#
-# $FreeBSD: src/ObsoleteFiles.inc,v 1.143 2008/06/14 10:42:18 ed Exp $
+# $FreeBSD: src/ObsoleteFiles.inc,v 1.144 2008/07/01 21:54:08 danger Exp $
#
# This file lists old files (OLD_FILES), libraries (OLD_LIBS) and
# directories (OLD_DIRS) which should get removed at an update. Recently
@@ -14,6 +14,9 @@
# The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
#
+# 20080701: wpa_supplicant.conf moved to share/examples/etc/
+OLD_FILES+=usr/share/examples/wpa_supplicant/wpa_supplicant.conf
+OLD_DIRS+=usr/share/examples/wpa_supplicant
# 20080614: sgtty removed
OLD_FILES+=usr/include/sys/ttychars.h
OLD_FILES+=usr/include/sys/ttydev.h
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/net/getaddrinfo.3#2 (text+ko) ====
@@ -16,9 +16,9 @@
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
.\" PERFORMANCE OF THIS SOFTWARE.
.\"
-.\" $FreeBSD: src/lib/libc/net/getaddrinfo.3,v 1.33 2007/06/06 19:24:02 remko Exp $
+.\" $FreeBSD: src/lib/libc/net/getaddrinfo.3,v 1.34 2008/07/01 22:59:20 danger Exp $
.\"
-.Dd June 6, 2007
+.Dd July 1, 2008
.Dt GETADDRINFO 3
.Os
.Sh NAME
@@ -237,6 +237,11 @@
.Fa ai_family
equals
.Dv AF_INET6 .
+Note: this flag is currently
+.Em not
+supported, see the
+.Sx BUGS
+section.
.El
.El
.Pp
@@ -485,6 +490,18 @@
.%B "Proceedings of the freenix track: 2000 USENIX annual technical conference"
.%D June 2000
.Re
+.Sh BUGS
+The
+.Nm
+function as implemented in
+.Fx
+currently does not support
+.Dv AI_ALL
+and
+.Dv AI_V4MAPPED
+flags and returns
+.Dv EAI_BADFLAGS
+if one of them is specified.
.Sh STANDARDS
The
.Fn getaddrinfo
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libutil/Makefile#2 (text+ko) ====
@@ -1,5 +1,5 @@
# @(#)Makefile 8.1 (Berkeley) 6/4/93
-# $FreeBSD: src/lib/libutil/Makefile,v 1.67 2008/04/23 00:49:12 scf Exp $
+# $FreeBSD: src/lib/libutil/Makefile,v 1.68 2008/07/01 22:30:57 jhb Exp $
SHLIBDIR?= /lib
@@ -9,9 +9,9 @@
SHLIB_MAJOR= 7
SRCS= _secure_path.c auth.c gr_util.c expand_number.c flopen.c fparseln.c \
- humanize_number.c kld.c login.c login_auth.c login_cap.c login_class.c \
- login_crypt.c login_ok.c login_times.c login_tty.c logout.c \
- logwtmp.c pidfile.c property.c pty.c pw_util.c realhostname.c \
+ hexdump.c humanize_number.c kld.c login.c login_auth.c login_cap.c \
+ login_class.c login_crypt.c login_ok.c login_times.c login_tty.c \
+ logout.c logwtmp.c pidfile.c property.c pty.c pw_util.c realhostname.c \
stub.c trimdomain.c uucplock.c
INCS= libutil.h login_cap.h
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libutil/libutil.h#2 (text+ko) ====
@@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/lib/libutil/libutil.h,v 1.47 2008/04/23 00:49:12 scf Exp $
+ * $FreeBSD: src/lib/libutil/libutil.h,v 1.48 2008/07/01 22:30:57 jhb Exp $
*/
#ifndef _LIBUTIL_H_
@@ -71,6 +71,7 @@
int extattr_namespace_to_string(int _attrnamespace, char **_string);
int extattr_string_to_namespace(const char *_string, int *_attrnamespace);
int flopen(const char *_path, int _flags, ...);
+void hexdump(const void *ptr, int length, const char *hdr, int flags);
void login(struct utmp *_ut);
int login_tty(int _fd);
int logout(const char *_line);
@@ -171,4 +172,11 @@
#define HN_GETSCALE 0x10
#define HN_AUTOSCALE 0x20
+/* hexdump(3) */
+#define HD_COLUMN_MASK 0xff
+#define HD_DELIM_MASK 0xff00
+#define HD_OMIT_COUNT (1 << 16)
+#define HD_OMIT_HEX (1 << 17)
+#define HD_OMIT_CHARS (1 << 18)
+
#endif /* !_LIBUTIL_H_ */
==== //depot/projects/soc2008/trasz_nfs4acl/sbin/dhclient/dhclient.c#2 (text+ko) ====
@@ -54,7 +54,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sbin/dhclient/dhclient.c,v 1.23 2008/03/22 16:24:02 sam Exp $");
+__FBSDID("$FreeBSD: src/sbin/dhclient/dhclient.c,v 1.24 2008/06/30 20:23:49 ed Exp $");
#include "dhcpd.h"
#include "privsep.h"
@@ -2612,6 +2612,7 @@
setproctitle("%s [priv]", ifi->name);
+ setsid();
dup2(nullfd, STDIN_FILENO);
dup2(nullfd, STDOUT_FILENO);
dup2(nullfd, STDERR_FILENO);
==== //depot/projects/soc2008/trasz_nfs4acl/sbin/sconfig/sconfig.c#2 (text+ko) ====
@@ -18,7 +18,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sbin/sconfig/sconfig.c,v 1.5 2008/02/19 07:09:18 ru Exp $");
+__FBSDID("$FreeBSD: src/sbin/sconfig/sconfig.c,v 1.6 2008/06/30 21:18:27 rik Exp $");
#include
#include
@@ -276,6 +276,15 @@
system (buf);
}
+static void
+set_debug_ifconfig (int on)
+{
+ char buf [64];
+ sprintf (buf, "ifconfig %s %sdebug 2>/dev/null", chan_name,
+ on ? "" : "-");
+ system (buf);
+}
+
static char *
format_long (unsigned long val)
{
@@ -724,6 +733,7 @@
int i, mode, loop, nrzi, dpll, invclk, phony, use16, crc4, unfram, ami;
int higain, clk, keepalive, debug, port, dlci, invrclk, invtclk;
int monitor, dir, scrambler, rloop, cablen;
+ int mode_valid;
long baud, timeslots, mtu, rqlen;
for (i=0; i= 0;
+ if (!mode_valid || mode != SERIAL_ASYNC) {
+ if (debug == 0) {
+ set_debug_ifconfig(0);
+ } else {
+ ioctl (fd, SERIAL_SETDEBUG, &debug);
+ set_debug_ifconfig(1);
+ }
+ } else {
+ ioctl (fd, SERIAL_SETDEBUG, &debug);
+ }
} else if (strncasecmp ("loop=", argv[i], 5) == 0) {
loop = (strcasecmp ("on", argv[i] + 5) == 0);
ioctl (fd, SERIAL_SETLOOP, &loop);
==== //depot/projects/soc2008/trasz_nfs4acl/sys/amd64/amd64/pmap.c#4 (text+ko) ====
@@ -77,7 +77,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.623 2008/06/21 19:19:09 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.624 2008/07/02 05:41:23 alc Exp $");
/*
* Manages physical address maps.
@@ -173,7 +173,6 @@
vm_offset_t virtual_avail; /* VA of first avail page (after kernel bss) */
vm_offset_t virtual_end; /* VA of last avail page (end of kernel AS) */
-static int nkpt;
static int ndmpdp;
static vm_paddr_t dmaplimit;
vm_offset_t kernel_vm_end;
@@ -543,7 +542,6 @@
kernel_pmap->pm_root = NULL;
kernel_pmap->pm_active = -1; /* don't allow deactivation */
TAILQ_INIT(&kernel_pmap->pm_pvchunk);
- nkpt = NKPT;
/*
* Reserve some special page table entries/VA space for temporary
@@ -650,7 +648,7 @@
* page table pages.
*/
pd = pmap_pde(kernel_pmap, VM_MIN_KERNEL_ADDRESS);
- for (i = 0; i < nkpt; i++) {
+ for (i = 0; i < NKPT; i++) {
if ((pd[i] & (PG_PS | PG_V)) == (PG_PS | PG_V))
continue;
mpte = PHYS_TO_VM_PAGE(pd[i] & PG_FRAME);
@@ -1708,10 +1706,8 @@
mtx_assert(&kernel_map->system_mtx, MA_OWNED);
if (kernel_vm_end == 0) {
kernel_vm_end = VM_MIN_KERNEL_ADDRESS;
- nkpt = 0;
while ((*pmap_pde(kernel_pmap, kernel_vm_end) & PG_V) != 0) {
kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
- nkpt++;
if (kernel_vm_end - 1 >= kernel_map->max_offset) {
kernel_vm_end = kernel_map->max_offset;
break;
@@ -1725,7 +1721,7 @@
pde = pmap_pde(kernel_pmap, kernel_vm_end);
if (pde == NULL) {
/* We need a new PDP entry */
- nkpg = vm_page_alloc(NULL, nkpt,
+ nkpg = vm_page_alloc(NULL, kernel_vm_end >> PDPSHIFT,
VM_ALLOC_NOOBJ | VM_ALLOC_SYSTEM | VM_ALLOC_WIRED);
if (nkpg == NULL)
panic("pmap_growkernel: no memory to grow kernel");
@@ -1749,9 +1745,6 @@
VM_ALLOC_NOOBJ | VM_ALLOC_SYSTEM | VM_ALLOC_WIRED);
if (nkpg == NULL)
panic("pmap_growkernel: no memory to grow kernel");
-
- nkpt++;
-
pmap_zero_page(nkpg);
paddr = VM_PAGE_TO_PHYS(nkpg);
newpdir = (pd_entry_t) (paddr | PG_V | PG_RW | PG_A | PG_M);
==== //depot/projects/soc2008/trasz_nfs4acl/sys/boot/i386/boot2/boot2.c#2 (text+ko) ====
@@ -14,7 +14,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.86 2008/02/28 17:08:05 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.87 2008/07/01 11:18:51 nyan Exp $");
#include
#include
@@ -472,7 +472,7 @@
dsk.slice = WHOLE_DISK_SLICE;
if (arg[1] == ',') {
dsk.slice = *arg - '0' + 1;
- if (dsk.slice > NDOSPART)
+ if (dsk.slice > NDOSPART + 1)
return -1;
arg += 2;
}
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ce/ceddk.h#2 (text+ko) ====
@@ -13,7 +13,7 @@
* works or modified versions.
*
* $Cronyx: ceddk.h,v 1.2.6.1 2005/11/09 13:01:39 rik Exp $
- * $FreeBSD: src/sys/dev/ce/ceddk.h,v 1.1 2006/01/27 09:02:09 rik Exp $
+ * $FreeBSD: src/sys/dev/ce/ceddk.h,v 1.2 2008/06/30 21:18:27 rik Exp $
*/
#define TAU32_UserContext_Add void *sys;
@@ -72,6 +72,7 @@
TAU32_UserRequest *rx_queue;
TAU32_UserRequest *tx_queue;
unsigned char debug;
+ unsigned char debug_shadow;
void (*transmit) (struct _ce_chan_t*, void*, int);
void (*receive) (struct _ce_chan_t*, unsigned char*, int);
void (*error) (struct _ce_chan_t*, int);
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ce/if_ce.c#2 (text+ko) ====
@@ -16,7 +16,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/ce/if_ce.c,v 1.9 2007/07/27 11:59:56 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ce/if_ce.c,v 1.11 2008/07/01 14:41:03 dds Exp $");
#include
@@ -962,8 +962,8 @@
if (! (ifp->if_flags & IFF_DEBUG))
d->chan->debug = 0;
- else if (! d->chan->debug)
- d->chan->debug = 1;
+ else
+ d->chan->debug = d->chan->debug_shadow;
switch (cmd) {
default: CE_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1333,7 +1333,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1374,7 +1374,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1404,7 +1404,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1424,7 +1424,7 @@
CE_DEBUG2 (d, ("ioctl: setcfg\n"));
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1526,7 +1526,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1562,7 +1562,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1590,7 +1590,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1614,19 +1614,24 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
#endif
if (error)
return error;
+#ifndef NETGRAPH
+ /*
+ * The debug_shadow is always greater than zero for logic
+ * simplicity. For switching debug off the IFF_DEBUG is
+ * responsible.
+ */
+ d->chan->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+ if (d->ifp->if_flags & IFF_DEBUG)
+ d->chan->debug = d->chan->debug_shadow;
+#else
d->chan->debug = *(int*)data;
-#ifndef NETGRAPH
- if (d->chan->debug)
- d->ifp->if_flags |= IFF_DEBUG;
- else
- d->ifp->if_flags &= ~IFF_DEBUG;
#endif
return 0;
@@ -1642,7 +1647,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1668,7 +1673,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1698,7 +1703,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1722,7 +1727,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1750,7 +1755,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1776,7 +1781,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1804,7 +1809,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1832,7 +1837,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1860,7 +1865,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1893,7 +1898,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1920,7 +1925,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1939,7 +1944,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1977,7 +1982,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/cp/cpddk.h#2 (text+ko) ====
@@ -16,7 +16,7 @@
* works or modified versions.
*
* $Cronyx: cpddk.h,v 1.8.4.20 2004/12/06 16:21:06 rik Exp $
- * $FreeBSD: src/sys/dev/cp/cpddk.h,v 1.4 2005/01/06 01:42:32 imp Exp $
+ * $FreeBSD: src/sys/dev/cp/cpddk.h,v 1.5 2008/06/30 21:18:27 rik Exp $
*/
#define NBRD 6 /* the maximum number of installed boards */
#define NCHAN 4 /* the number of channels on the board */
@@ -205,6 +205,7 @@
void *tag [NTBUF]; /* system dependent data per buffer */
void *sys; /* system dependent data per channel */
unsigned char debug; /* debug level, 0..2 */
+ unsigned char debug_shadow; /* debug shadow */
void (*transmit) (struct _cp_chan_t *c, void *tag, int len);
void (*receive) (struct _cp_chan_t *c, unsigned char *data, int len);
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/cp/if_cp.c#2 (text+ko) ====
@@ -22,7 +22,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/cp/if_cp.c,v 1.34 2007/07/27 11:59:56 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cp/if_cp.c,v 1.35 2008/06/30 21:18:27 rik Exp $");
#include
#include
@@ -733,8 +733,8 @@
if (! (ifp->if_flags & IFF_DEBUG))
d->chan->debug = 0;
- else if (! d->chan->debug)
- d->chan->debug = 1;
+ else
+ d->chan->debug = d->chan->debug_shadow;
switch (cmd) {
default: CP_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1349,12 +1349,17 @@
error = priv_check (td, PRIV_DRIVER);
if (error)
return error;
+#ifndef NETGRAPH
+ /*
+ * The debug_shadow is always greater than zero for logic
+ * simplicity. For switching debug off the IFF_DEBUG is
+ * responsible.
+ */
+ d->chan->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+ if (d->ifp->if_flags & IFF_DEBUG)
+ d->chan->debug = d->chan->debug_shadow;
+#else
d->chan->debug = *(int*)data;
-#ifndef NETGRAPH
- if (d->chan->debug)
- d->ifp->if_flags |= IFF_DEBUG;
- else
- d->ifp->if_flags &= ~IFF_DEBUG;
#endif
return 0;
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ctau/ctddk.h#2 (text+ko) ====
@@ -12,7 +12,7 @@
* all derivative works or modified versions.
*
* Cronyx Id: ctddk.h,v 1.1.2.3 2003/12/11 17:33:44 rik Exp $
- * $FreeBSD: src/sys/dev/ctau/ctddk.h,v 1.2 2005/01/06 01:42:33 imp Exp $
+ * $FreeBSD: src/sys/dev/ctau/ctddk.h,v 1.3 2008/06/30 21:18:27 rik Exp $
*/
#define NBRD 3 /* the maximum number of installed boards */
#define NPORT 32 /* the number of i/o ports per board */
@@ -412,6 +412,7 @@
void *attach [NBUF]; /* system dependent data per buffer */
void *sys; /* system dependent data per channel */
int debug;
+ int debug_shadow;
int e1_first_int;
unsigned char *sccrx, *scctx; /* pointers to SCC rx and tx buffers */
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ctau/if_ct.c#2 (text+ko) ====
@@ -22,7 +22,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/ctau/if_ct.c,v 1.35 2007/10/12 06:03:43 kevlo Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ctau/if_ct.c,v 1.36 2008/06/30 21:18:27 rik Exp $");
#include
#include
@@ -949,8 +949,8 @@
if (! (ifp->if_flags & IFF_DEBUG))
d->chan->debug = 0;
- else if (! d->chan->debug)
- d->chan->debug = 1;
+ else
+ d->chan->debug = d->chan->debug_shadow;
switch (cmd) {
default: CT_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1529,12 +1529,17 @@
error = priv_check (td, PRIV_DRIVER);
if (error)
return error;
+#ifndef NETGRAPH
+ /*
+ * The debug_shadow is always greater than zero for logic
+ * simplicity. For switching debug off the IFF_DEBUG is
+ * responsible.
+ */
+ c->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+ if (d->ifp->if_flags & IFF_DEBUG)
+ c->debug = c->debug_shadow;
+#else
c->debug = *(int*)data;
-#ifndef NETGRAPH
- if (d->chan->debug)
- d->ifp->if_flags |= IFF_DEBUG;
- else
- d->ifp->if_flags &= (~IFF_DEBUG);
#endif
return 0;
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/cx/cxddk.h#2 (text+ko) ====
@@ -15,7 +15,7 @@
* all derivative works or modified versions.
*
* Cronyx Id: cxddk.h,v 1.1.2.1 2003/11/12 17:13:41 rik Exp $
- * $FreeBSD: src/sys/dev/cx/cxddk.h,v 1.2 2005/01/06 01:42:34 imp Exp $
+ * $FreeBSD: src/sys/dev/cx/cxddk.h,v 1.3 2008/06/30 21:18:27 rik Exp $
*/
#ifndef port_t
@@ -337,6 +337,7 @@
void *sys;
int debug;
+ int debug_shadow;
void *attach [2];
char *received_data;
int received_len;
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/cx/if_cx.c#2 (text+ko) ====
@@ -23,7 +23,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.58 2007/10/12 06:03:43 kevlo Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.59 2008/06/30 21:18:27 rik Exp $");
#include
@@ -1102,10 +1102,14 @@
if (error)
return error;
+ s = splhigh ();
+ CX_LOCK (bd);
if (! (ifp->if_flags & IFF_DEBUG))
d->chan->debug = 0;
- else if (! d->chan->debug)
- d->chan->debug = 1;
+ else
+ d->chan->debug = d->chan->debug_shadow;
+ CX_UNLOCK (bd);
+ splx (s);
switch (cmd) {
default: CX_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1745,6 +1749,8 @@
cx_enable_receive (c, 0);
cx_enable_transmit (c, 0);
} else if (c->mode == M_ASYNC && *(int*)data == SERIAL_HDLC) {
+ if (d->ifp->if_flags & IFF_DEBUG)
+ c->debug = c->debug_shadow;
cx_set_mode (c, M_HDLC);
cx_enable_receive (c, 1);
cx_enable_transmit (c, 1);
@@ -1913,15 +1919,24 @@
return error;
s = splhigh ();
CX_LOCK (bd);
+#ifndef NETGRAPH
+ if (c->mode == M_ASYNC) {
+ c->debug = *(int*)data;
+ } else {
+ /*
+ * The debug_shadow is always greater than zero for
+ * logic simplicity. For switching debug off the
+ * IFF_DEBUG is responsible (for !M_ASYNC mode).
+ */
+ c->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+ if (d->ifp->if_flags & IFF_DEBUG)
+ c->debug = c->debug_shadow;
+ }
+#else
c->debug = *(int*)data;
+#endif
CX_UNLOCK (bd);
splx (s);
-#ifndef NETGRAPH
- if (d->chan->debug)
- d->ifp->if_flags |= IFF_DEBUG;
- else
- d->ifp->if_flags &= (~IFF_DEBUG);
-#endif
return 0;
}
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/rgephy.c#2 (text+ko) ====
@@ -31,10 +31,10 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/mii/rgephy.c,v 1.19 2008/03/05 01:15:10 yongari Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mii/rgephy.c,v 1.20 2008/07/02 08:10:18 yongari Exp $");
/*
- * Driver for the RealTek 8169S/8110S/8211B internal 10/100/1000 PHY.
+ * Driver for the RealTek 8169S/8110S/8211B/8211C internal 10/100/1000 PHY.
*/
#include
@@ -531,6 +531,18 @@
static void
rgephy_reset(struct mii_softc *sc)
{
+ struct rgephy_softc *rsc;
+ uint16_t ssr;
+
+ rsc = (struct rgephy_softc *)sc;
+ if (rsc->mii_revision == 3) {
+ /* RTL8211C(L) */
+ ssr = PHY_READ(sc, RGEPHY_MII_SSR);
+ if ((ssr & RGEPHY_SSR_ALDPS) != 0) {
+ ssr &= ~RGEPHY_SSR_ALDPS;
+ PHY_WRITE(sc, RGEPHY_MII_SSR, ssr);
+ }
+ }
mii_phy_reset(sc);
DELAY(1000);
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/rgephyreg.h#2 (text+ko) ====
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/mii/rgephyreg.h,v 1.3 2007/10/29 02:17:07 yongari Exp $
+ * $FreeBSD: src/sys/dev/mii/rgephyreg.h,v 1.4 2008/07/02 08:10:18 yongari Exp $
*/
#ifndef _DEV_MII_RGEPHYREG_H_
@@ -137,7 +137,7 @@
#define RGEPHY_EXTSTS_T_FD_CAP 0x2000 /* 1000base-T FD capable */
#define RGEPHY_EXTSTS_T_HD_CAP 0x1000 /* 1000base-T HD capable */
-/* RTL8211B(L) */
+/* RTL8211B(L)/RTL8211C(L) */
#define RGEPHY_MII_SSR 0x11 /* PHY Specific status register */
#define RGEPHY_SSR_S1000 0x8000 /* 1000Mbps */
#define RGEPHY_SSR_S100 0x4000 /* 100Mbps */
@@ -148,6 +148,7 @@
#define RGEPHY_SSR_SPD_DPLX_RESOLVED 0x0800 /* speed/duplex resolved */
#define RGEPHY_SSR_LINK 0x0400 /* link up */
#define RGEPHY_SSR_MDI_XOVER 0x0040 /* MDI crossover */
+#define RGEPHY_SSR_ALDPS 0x0008 /* RTL8211C(L) only */
#define RGEPHY_SSR_JABBER 0x0001 /* Jabber */
#endif /* _DEV_RGEPHY_MIIREG_H_ */
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mpt/mpt_pci.c#2 (text+ko) ====
@@ -99,7 +99,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_pci.c,v 1.52 2008/05/10 01:27:23 delphij Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_pci.c,v 1.53 2008/07/01 19:44:38 jhb Exp $");
#include
#include
@@ -688,7 +688,7 @@
mpt_free_bus_resources(mpt);
mpt_raid_free_mem(mpt);
if (mpt->eh != NULL) {
- EVENTHANDLER_DEREGISTER(shutdown_final, mpt->eh);
+ EVENTHANDLER_DEREGISTER(shutdown_post_sync, mpt->eh);
}
}
return(0);
==== //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mpt/mpt_user.c#2 (text+ko) ====
@@ -31,7 +31,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_user.c,v 1.1 2008/05/06 20:49:52 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_user.c,v 1.2 2008/07/01 19:48:15 jhb Exp $");
#include
#include
@@ -47,6 +47,13 @@
uint16_t action_status;
};
+struct mpt_page_memory {
+ bus_dma_tag_t tag;
+ bus_dmamap_t map;
+ bus_addr_t paddr;
+ void *vaddr;
+};
+
static mpt_probe_handler_t mpt_user_probe;
static mpt_attach_handler_t mpt_user_attach;
static mpt_enable_handler_t mpt_user_enable;
@@ -180,6 +187,56 @@
}
static int
+mpt_alloc_buffer(struct mpt_softc *mpt, struct mpt_page_memory *page_mem,
+ size_t len)
+{
+ struct mpt_map_info mi;
+ int error;
+
+ page_mem->vaddr = NULL;
+
+ /* Limit requests to 16M. */
+ if (len > 16 * 1024 * 1024)
+ return (ENOSPC);
+ error = mpt_dma_tag_create(mpt, mpt->parent_dmat, 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
+ len, 1, len, 0, &page_mem->tag);
+ if (error)
+ return (error);
+ error = bus_dmamem_alloc(page_mem->tag, &page_mem->vaddr,
+ BUS_DMA_NOWAIT, &page_mem->map);
+ if (error) {
+ bus_dma_tag_destroy(page_mem->tag);
+ return (error);
+ }
+ mi.mpt = mpt;
+ error = bus_dmamap_load(page_mem->tag, page_mem->map, page_mem->vaddr,
+ len, mpt_map_rquest, &mi, BUS_DMA_NOWAIT);
+ if (error == 0)
+ error = mi.error;
+ if (error) {
+ bus_dmamem_free(page_mem->tag, page_mem->vaddr, page_mem->map);
+ bus_dma_tag_destroy(page_mem->tag);
+ page_mem->vaddr = NULL;
+ return (error);
+ }
+ page_mem->paddr = mi.phys;
+ return (0);
+}
+
+static void
+mpt_free_buffer(struct mpt_page_memory *page_mem)
+{
+
+ if (page_mem->vaddr == NULL)
+ return;
+ bus_dmamap_unload(page_mem->tag, page_mem->map);
+ bus_dmamem_free(page_mem->tag, page_mem->vaddr, page_mem->map);
+ bus_dma_tag_destroy(page_mem->tag);
+ page_mem->vaddr = NULL;
+}
+
+static int
mpt_user_read_cfg_header(struct mpt_softc *mpt,
struct mpt_cfg_page_req *page_req)
{
@@ -225,7 +282,7 @@
static int
mpt_user_read_cfg_page(struct mpt_softc *mpt, struct mpt_cfg_page_req *page_req,
- void *mpt_page)
+ struct mpt_page_memory *mpt_page)
{
CONFIG_PAGE_HEADER *hdr;
request_t *req;
@@ -238,15 +295,14 @@
return (ENOMEM);
}
- hdr = mpt_page;
+ hdr = mpt_page->vaddr;
params.Action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
params.PageVersion = hdr->PageVersion;
params.PageLength = hdr->PageLength;
params.PageNumber = hdr->PageNumber;
params.PageType = hdr->PageType & MPI_CONFIG_PAGETYPE_MASK;
params.PageAddress = page_req->page_address;
- error = mpt_issue_cfg_req(mpt, req, ¶ms,
- req->req_pbuf + MPT_RQSL(mpt),
+ error = mpt_issue_cfg_req(mpt, req, ¶ms, mpt_page->paddr,
page_req->len, TRUE, 5000);
if (error != 0) {
mpt_prt(mpt, "mpt_user_read_cfg_page timed out\n");
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From trasz at FreeBSD.org Wed Jul 2 10:47:19 2008
From: trasz at FreeBSD.org (Edward Tomasz Napierala)
Date: Wed Jul 2 10:47:22 2008
Subject: PERFORCE change 144477 for review
Message-ID: <200807021047.m62AlICi010865@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144477
Change 144477 by trasz@trasz_traszkan on 2008/07/02 10:46:29
Initial cut of the NFSv4 ACLs implementation, kernel part.
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/sys/conf/files#4 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/subr_acl_nfs4.c#1 add
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/subr_acl_posix1e.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/vfs_acl.c#4 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/sys/acl.h#6 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/sys/vnode.h#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/ufs/ffs/ffs_vfsops.c#4 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/ufs/ufs/ufs_acl.c#5 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/ufs/ufs/ufs_vnops.c#5 edit
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/sys/conf/files#4 (text+ko) ====
@@ -1611,6 +1611,7 @@
kern/stack_protector.c standard \
compile-with "${NORMAL_C:N-fstack-protector*}"
kern/subr_acl_posix1e.c standard
+kern/subr_acl_nfs4.c standard
kern/subr_autoconf.c standard
kern/subr_blist.c standard
kern/subr_bus.c standard
==== //depot/projects/soc2008/trasz_nfs4acl/sys/kern/subr_acl_posix1e.c#2 (text+ko) ====
@@ -427,6 +427,10 @@
printf("acl_posix1e_mode_to_entry: invalid tag (%d)\n", tag);
}
+ acl_entry.ae_acl = NULL;
+ acl_entry.ae_extended = ACL_EXTENDED_ALLOW;
+ acl_entry.ae_flags = 0;
+
return (acl_entry);
}
==== //depot/projects/soc2008/trasz_nfs4acl/sys/kern/vfs_acl.c#4 (text+ko) ====
@@ -66,7 +66,114 @@
static int vacl_aclcheck(struct thread *td, struct vnode *vp,
acl_type_t type, struct acl *aclp);
+int
+acl_copy_oldacl_into_acl(const struct oldacl *source, struct acl *dest)
+{
+ int i;
+
+ if (source->acl_cnt < 0 || source->acl_cnt >= ACL_MAX_ENTRIES)
+ return (-1);
+
+ bzero(dest, sizeof(*dest));
+
+ dest->acl_magic = ACL_MAGIC;
+ dest->acl_cnt = source->acl_cnt;
+
+ for (i = 0; i < dest->acl_cnt; i++) {
+ dest->acl_entry[i].ae_tag = source->acl_entry[i].ae_tag;
+ dest->acl_entry[i].ae_id = source->acl_entry[i].ae_id;
+ dest->acl_entry[i].ae_perm = source->acl_entry[i].ae_perm;
+ dest->acl_entry[i].ae_extended = ACL_EXTENDED_ALLOW;
+ dest->acl_entry[i].ae_flags = 0;
+ }
+
+ return (0);
+}
+
+int
+acl_copy_acl_into_oldacl(const struct acl *source, struct oldacl *dest)
+{
+ int i;
+
+ if (source->acl_cnt < 0 || source->acl_cnt >= ACL_MAX_ENTRIES)
+ return (-1);
+
+ bzero(dest, sizeof(*dest));
+
+ dest->acl_cnt = source->acl_cnt;
+
+ for (i = 0; i < dest->acl_cnt; i++) {
+ dest->acl_entry[i].ae_tag = source->acl_entry[i].ae_tag;
+ dest->acl_entry[i].ae_id = source->acl_entry[i].ae_id;
+ dest->acl_entry[i].ae_perm = source->acl_entry[i].ae_perm;
+ }
+
+ return (0);
+}
+
/*
+ * At one time, "struct ACL" was extended in order to add support for NFSv4
+ * ACLs. Instead of creating compatibility versions of all the ACL-related
+ * syscalls, they were left intact. It's possible to find out what the code
+ * calling these syscalls (libc) expects basing on "type" argument - if it's
+ * either ACL_TYPE_ACCESS_OLD or ACL_TYPE_DEFAULT_OLD (which previously were
+ * known as ACL_TYPE_ACCESS and ACL_TYPE_DEFAULT), then it's the "struct
+ * oldacl". If it's something else, then it's the new "struct acl". In the
+ * latter case, the routines below just copyin/copyout the contents. In the
+ * former case, they copyin the "struct oldacl" and convert it to the new
+ * format.
+ */
+static int
+copyin_acl(void *user_acl, struct acl *kernel_acl, acl_type_t type)
+{
+ int error;
+ struct oldacl old;
+
+ /* Is it the new "struct acl"? */
+ if (type != ACL_TYPE_ACCESS_OLD && type != ACL_TYPE_DEFAULT_OLD)
+ return (copyin(user_acl, kernel_acl, sizeof(struct acl)));
+
+ /* Nope, it's a "struct oldacl". */
+ error = copyin(user_acl, &old, sizeof(struct oldacl));
+ if (error)
+ return (error);
+
+ error = acl_copy_oldacl_into_acl(&old, kernel_acl);
+
+ return (error);
+}
+
+static int
+copyout_acl(struct acl *kernel_acl, void *user_acl, acl_type_t type)
+{
+ int error;
+ struct oldacl old;
+
+ if (type != ACL_TYPE_ACCESS_OLD && type != ACL_TYPE_DEFAULT_OLD)
+ return (copyout(kernel_acl, user_acl, sizeof(struct acl)));
+
+ error = acl_copy_acl_into_oldacl(kernel_acl, &old);
+ if (error)
+ return (error);
+
+ error = copyout(&old, user_acl, sizeof(struct oldacl));
+
+ return (error);
+}
+
+static int
+type_unold(int type)
+{
+ if (type == ACL_TYPE_ACCESS_OLD)
+ return (ACL_TYPE_ACCESS);
+
+ if (type == ACL_TYPE_DEFAULT_OLD)
+ return (ACL_TYPE_DEFAULT);
+
+ return (type);
+}
+
+/*
* These calls wrap the real vnode operations, and are called by the syscall
* code once the syscall has converted the path or file descriptor to a vnode
* (unlocked). The aclp pointer is assumed still to point to userland, so
@@ -85,7 +192,7 @@
struct mount *mp;
int error;
- error = copyin(aclp, &inkernacl, sizeof(struct acl));
+ error = copyin_acl(aclp, &inkernacl, type);
if (error)
return(error);
error = vn_start_write(vp, &mp, V_WAIT | PCATCH);
@@ -98,7 +205,7 @@
if (error != 0)
goto out;
#endif
- error = VOP_SETACL(vp, type, &inkernacl, td->td_ucred, td);
+ error = VOP_SETACL(vp, type_unold(type), &inkernacl, td->td_ucred, td);
#ifdef MAC
out:
#endif
@@ -124,13 +231,14 @@
if (error != 0)
goto out;
#endif
- error = VOP_GETACL(vp, type, &inkernelacl, td->td_ucred, td);
+ error = VOP_GETACL(vp, type_unold(type), &inkernelacl,
+ td->td_ucred, td);
#ifdef MAC
out:
#endif
VOP_UNLOCK(vp, 0);
if (error == 0)
- error = copyout(&inkernelacl, aclp, sizeof(struct acl));
+ error = copyout_acl(&inkernelacl, aclp, type);
return (error);
}
@@ -153,7 +261,7 @@
if (error)
goto out;
#endif
- error = VOP_SETACL(vp, type, 0, td->td_ucred, td);
+ error = VOP_SETACL(vp, type_unold(type), 0, td->td_ucred, td);
#ifdef MAC
out:
#endif
@@ -172,10 +280,11 @@
struct acl inkernelacl;
int error;
- error = copyin(aclp, &inkernelacl, sizeof(struct acl));
+ error = copyin_acl(aclp, &inkernelacl, type);
if (error)
return(error);
- error = VOP_ACLCHECK(vp, type, &inkernelacl, td->td_ucred, td);
+ error = VOP_ACLCHECK(vp, type_unold(type), &inkernelacl,
+ td->td_ucred, td);
return (error);
}
==== //depot/projects/soc2008/trasz_nfs4acl/sys/sys/acl.h#6 (text+ko) ====
@@ -47,23 +47,58 @@
#define POSIX1E_ACL_ACCESS_EXTATTR_NAME "posix1e.acl_access"
#define POSIX1E_ACL_DEFAULT_EXTATTR_NAMESPACE EXTATTR_NAMESPACE_SYSTEM
#define POSIX1E_ACL_DEFAULT_EXTATTR_NAME "posix1e.acl_default"
+#define NFS4_ACL_EXTATTR_NAMESPACE EXTATTR_NAMESPACE_SYSTEM
+#define NFS4_ACL_EXTATTR_NAME "nfs4.acl"
#define ACL_MAX_ENTRIES 32 /* maximum entries in an ACL */
+/*
+ * "struct oldacl" is used in compatibility ACL syscalls and for on-disk
+ * storage of POSIX.1e ACLs.
+ */
+typedef int oldacl_tag_t;
+typedef mode_t oldacl_perm_t;
+
+struct oldacl_entry {
+ oldacl_tag_t ae_tag;
+ uid_t ae_id;
+ oldacl_perm_t ae_perm;
+};
+typedef struct oldacl_entry *oldacl_entry_t;
+
+/* internal ACL structure */
+struct oldacl {
+ int acl_cnt;
+ struct oldacl_entry acl_entry[ACL_MAX_ENTRIES];
+};
+
+/*
+ * Current "struct acl".
+ */
+typedef int acl_tag_t;
+typedef int acl_flag_t;
+typedef int acl_perm_t;
+typedef int acl_extended_t;
typedef int acl_type_t;
-typedef int acl_tag_t;
-typedef mode_t acl_perm_t;
-typedef mode_t *acl_permset_t;
+typedef int *acl_permset_t;
struct acl_entry {
acl_tag_t ae_tag;
uid_t ae_id;
acl_perm_t ae_perm;
+ /* "allow" or "deny". Unused in POSIX ACLs. */
+ acl_extended_t ae_extended;
+ /* Flags control inheritance. Unused in POSIX ACLs. */
+ acl_flag_t ae_flags;
+ struct acl *ae_acl; /* XXX: This is ugly. */
};
typedef struct acl_entry *acl_entry_t;
/* internal ACL structure */
struct acl {
+ int acl_magic;
int acl_cnt;
+ int acl_length;
+ int acl_brand;
struct acl_entry acl_entry[ACL_MAX_ENTRIES];
};
@@ -74,6 +109,15 @@
};
typedef struct acl_t_struct *acl_t;
+#define ACL_MAGIC 0x5452535a
+
+/*
+ * Possible valid values for acl_brand field.
+ */
+#define ACL_BRAND_UNKNOWN 0
+#define ACL_BRAND_POSIX 1
+#define ACL_BRAND_NFS4 2
+
/*
* Possible valid values for ae_tag field.
*/
@@ -85,15 +129,27 @@
#define ACL_MASK 0x00000010
#define ACL_OTHER 0x00000020
#define ACL_OTHER_OBJ ACL_OTHER
+#define ACL_EVERYONE 0x00000040
/*
+ * Possible valid values for ae_extended field.
+ */
+#define ACL_EXTENDED_ALLOW 0x00000100
+#define ACL_EXTENDED_DENY 0x00000200
+#define ACL_EXTENDED_AUDIT 0x00000400
+#define ACL_EXTENDED_ALARM 0x00000800
+
+/*
* Possible valid values for acl_type_t arguments.
*/
-#define ACL_TYPE_ACCESS 0x00000000
-#define ACL_TYPE_DEFAULT 0x00000001
+#define ACL_TYPE_ACCESS_OLD 0x00000000
+#define ACL_TYPE_DEFAULT_OLD 0x00000001
+#define ACL_TYPE_ACCESS 0x00000002
+#define ACL_TYPE_DEFAULT 0x00000003
+#define ACL_TYPE_NFS4 0x00000004
/*
- * Possible flags in ae_perm field.
+ * Possible flags in ae_perm field for POSIX ACLs.
*/
#define ACL_EXECUTE 0x0001
#define ACL_WRITE 0x0002
@@ -103,12 +159,65 @@
#define ACL_POSIX1E_BITS (ACL_EXECUTE | ACL_WRITE | ACL_READ)
/*
+ * Possible flags in ae_perm field for NFSv4 ACLs.
+ * XXX: Change values of these to match rfc3530.
+ */
+#define ACL_READ_DATA 0x00010000
+#define ACL_LIST_DIRECTORY 0x00010000
+#define ACL_WRITE_DATA 0x00020000
+#define ACL_ADD_FILE 0x00020000
+#define ACL_APPEND_DATA 0x00040000
+#define ACL_ADD_SUBDIRECTORY 0x00040000
+#define ACL_READ_NAMED_ATTRS 0x00080000
+#define ACL_READ_EXTATTRIBUTES ACL_READ_NAMED_ATTRS /* Darwin compatibility. */
+#define ACL_WRITE_NAMED_ATTRS 0x00100000
+#define ACL_WRITE_EXTATTRIBUTES ACL_WRITE_NAMED_ATTRS /* Darwin compatibility. */
+#ifdef XXX_conflicting_defines
+#define ACL_EXECUTE 0x00200000
+#define ACL_SEARCH ACL_EXECUTE /* Darwin compatibility. */
+#else
+#define ACL_SEARCH 0x00200000
+#endif
+#define ACL_DELETE_CHILD 0x00400000
+#define ACL_READ_ATTRIBUTES 0x00800000
+#define ACL_WRITE_ATTRIBUTES 0x01000000
+#define ACL_DELETE 0x02000000
+#define ACL_READ_ACL 0x04000000
+#define ACL_READ_SECURITY ACL_READ_ACL /* Darwin compatibility. */
+#define ACL_WRITE_ACL 0x08000000
+#define ACL_WRITE_SECURITY ACL_WRITE_ACL /* Darwin compatibility. */
+#define ACL_WRITE_OWNER 0x10000000
+#define ACL_CHANGE_OWNER ACL_WRITE_OWNER /* Darwin compatibility. */
+#define ACL_SYNCHRONIZE 0x20000000
+
+#define ACL_NFS4_PERM_BITS (ACL_READ_DATA | ACL_WRITE_DATA | ACL_APPEND_DATA | \
+ ACL_READ_NAMED_ATTRS | ACL_WRITE_NAMED_ATTRS | ACL_EXECUTE | ACL_DELETE_CHILD | \
+ ACL_READ_ATTRIBUTES | ACL_WRITE_ATTRIBUTES | ACL_DELETE | ACL_READ_ACL | \
+ ACL_WRITE_ACL | ACL_WRITE_OWNER | ACL_SYNCHRONIZE)
+
+/*
* Possible entry_id values for acl_get_entry()
*/
#define ACL_FIRST_ENTRY 0
#define ACL_NEXT_ENTRY 1
/*
+ * Possible values in ae_flags field; valid only for NFSv4 ACLs.
+ */
+/* #define ACL_FLAG_DEFER_INHERIT - this doesn't seem to be used in Darwin. */
+/* #define ACL_ENTRY_INHERITED - this seems to be used in Darwin, but how does it translate into rfc3530? */
+#define ACL_ENTRY_FILE_INHERIT 0x00000001 /* ACE4_FILE_INHERIT_ACE */
+#define ACL_ENTRY_DIRECTORY_INHERIT 0x00000002 /* ACE4_DIRECTORY_INHERIT_ACE */
+#define ACL_ENTRY_LIMIT_INHERIT 0x00000004 /* ACE4_NO_PROPAGATE_INHERIT_ACE */
+#define ACL_ENTRY_ONLY_INHERIT 0x00000008 /* ACE4_INHERIT_ONLY_ACE */
+#define ACL_FLAG_SUCCESSFUL_ACCESS 0x00000010 /* Valid only for ACL_EXTENDED_ALARM and ACL_EXTENDED_AUDIT. */
+#define ACL_FLAG_FAILED_ACCESS 0x00000020 /* s/a */
+
+#define ACL_FLAGS_BITS (ACL_ENTRY_FILE_INHERIT | ACL_ENTRY_DIRECTORY_INHERIT | \
+ ACL_ENTRY_LIMIT_INHERIT | ACL_ENTRY_ONLY_INHERIT | ACL_FLAG_SUCCESSFUL_ACCESS | \
+ ACL_FLAG_FAILED_ACCESS)
+
+/*
* Undefined value in ae_id field
*/
#define ACL_UNDEFINED_ID ((uid_t)-1)
@@ -118,6 +227,7 @@
extern uma_zone_t acl_zone;
+#endif
/*
* POSIX.1e ACLs are capable of expressing the read, write, and execute bits
* of the POSIX mode field. We provide two masks: one that defines the bits
@@ -127,6 +237,7 @@
#define ACL_OVERRIDE_MASK (S_IRWXU | S_IRWXG | S_IRWXO)
#define ACL_PRESERVE_MASK (~ACL_OVERRIDE_MASK)
+#ifdef _KERNEL
/*
* File system independent code to move back and forth between POSIX mode and
* POSIX.1e ACL representations.
@@ -142,10 +253,19 @@
mode_t acl_posix1e_newfilemode(mode_t cmode,
struct acl *dacl);
+int acl_nfs4_sync_acl_from_mode(struct acl *aclp, mode_t mode, int file_owner_id);
+void acl_nfs4_sync_mode_from_acl(mode_t *mode, const struct acl *aclp);
+int acl_nfs4_is_trivial(const struct acl *aclp);
+int acl_nfs4_compute_inherited_acl(struct acl *child_aclp, const struct acl *parent_aclp,
+ mode_t mode, int file_owner_id, int is_directory);
+int acl_copy_oldacl_into_acl(const struct oldacl *source, struct acl *dest);
+int acl_copy_acl_into_oldacl(const struct acl *source, struct oldacl *dest);
+
/*
* File system independent syntax check for a POSIX.1e ACL.
*/
int acl_posix1e_check(struct acl *acl);
+int acl_nfs4_check(const struct acl *aclp, int is_directory);
#else /* !_KERNEL */
@@ -184,7 +304,9 @@
ssize_t acl_copy_ext(void *_buf_p, acl_t _acl, ssize_t _size);
acl_t acl_copy_int(const void *_buf_p);
int acl_create_entry(acl_t *_acl_p, acl_entry_t *_entry_p);
+int acl_create_entry_at_position_np(acl_t *_acl_p, acl_entry_t *_entry_p, int _index);
int acl_delete_entry(acl_t _acl, acl_entry_t _entry_d);
+int acl_delete_entry_at_position_np(acl_t _acl, int _index);
int acl_delete_fd_np(int _filedes, acl_type_t _type);
int acl_delete_file_np(const char *_path_p, acl_type_t _type);
int acl_delete_link_np(const char *_path_p, acl_type_t _type);
@@ -198,6 +320,8 @@
acl_t acl_get_fd(int _fd);
acl_t acl_get_fd_np(int fd, acl_type_t _type);
acl_t acl_get_file(const char *_path_p, acl_type_t _type);
+int acl_get_flags_np(acl_entry_t _entry_d, acl_flag_t *_flags_p);
+int acl_get_extended_np(acl_entry_t _entry_d, acl_extended_t *_extended_p);
acl_t acl_get_link_np(const char *_path_p, acl_type_t _type);
void *acl_get_qualifier(acl_entry_t _entry_d);
int acl_get_perm_np(acl_permset_t _permset_d, acl_perm_t _perm);
@@ -207,6 +331,8 @@
int acl_set_fd(int _fd, acl_t _acl);
int acl_set_fd_np(int _fd, acl_t _acl, acl_type_t _type);
int acl_set_file(const char *_path_p, acl_type_t _type, acl_t _acl);
+int acl_set_flags_np(acl_entry_t _entry_d, acl_flag_t _flags);
+int acl_set_extended_np(acl_entry_t _entry_d, acl_extended_t _extended);
int acl_set_link_np(const char *_path_p, acl_type_t _type, acl_t _acl);
int acl_set_permset(acl_entry_t _entry_d, acl_permset_t _permset_d);
int acl_set_qualifier(acl_entry_t _entry_d, const void *_tag_qualifier_p);
@@ -217,6 +343,9 @@
int acl_valid_fd_np(int _fd, acl_type_t _type, acl_t _acl);
int acl_valid_file_np(const char *_path_p, acl_type_t _type, acl_t _acl);
int acl_valid_link_np(const char *_path_p, acl_type_t _type, acl_t _acl);
+int acl_is_trivial_np(const acl_t _acl);
+acl_t acl_compute_trivial_np(const acl_t _acl);
+acl_t acl_strip_np(const acl_t _acl, int recalculate_mask);
__END_DECLS
#endif /* !_KERNEL */
==== //depot/projects/soc2008/trasz_nfs4acl/sys/sys/vnode.h#2 (text+ko) ====
@@ -589,6 +589,9 @@
int vaccess_acl_posix1e(enum vtype type, uid_t file_uid,
gid_t file_gid, struct acl *acl, mode_t acc_mode,
struct ucred *cred, int *privused);
+int vaccess_acl_nfs4(enum vtype type, uid_t file_uid,
+ gid_t file_gid, struct acl *acl, mode_t acc_mode,
+ struct ucred *cred, int *privused);
void vattr_null(struct vattr *vap);
int vcount(struct vnode *vp);
void vdrop(struct vnode *);
==== //depot/projects/soc2008/trasz_nfs4acl/sys/ufs/ffs/ffs_vfsops.c#4 (text+ko) ====
@@ -172,10 +172,12 @@
vfs_deleteopt(mp->mnt_opt, "snapshot");
if (vfs_getopt(mp->mnt_optnew, "nfs4acls", NULL, NULL) == 0) {
- printf("WARNING: both acls and nfs4acls specified\n");
+ if (mntorflags & MNT_ACLS) {
+ printf("WARNING: both acls and nfs4acls specified\n");
#if 0
- return (EINVAL);
+ return (EINVAL);
#endif
+ }
mntorflags |= MNT_NFS4ACLS;
}
==== //depot/projects/soc2008/trasz_nfs4acl/sys/ufs/ufs/ufs_acl.c#5 (text+ko) ====
@@ -139,6 +139,52 @@
DIP_SET(ip, i_mode, ip->i_mode);
}
+static int
+ufs_getacl_nfs4(struct vop_getacl_args *ap)
+{
+ int error, len;
+ struct inode *ip = VTOI(ap->a_vp);
+
+ if ((ap->a_vp->v_mount->mnt_flag & MNT_NFS4ACLS) == 0)
+ return (EOPNOTSUPP);
+
+ bzero(ap->a_aclp, sizeof(*ap->a_aclp));
+ len = sizeof(*ap->a_aclp);
+
+ error = vn_extattr_get(ap->a_vp, IO_NODELOCKED,
+ NFS4_ACL_EXTATTR_NAMESPACE,
+ NFS4_ACL_EXTATTR_NAME, &len, (char *) ap->a_aclp,
+ ap->a_td);
+
+ if (error == ENOATTR) {
+ /*
+ * Legitimately no ACL set on object, purely
+ * emulate it through the inode.
+ */
+ error = acl_nfs4_sync_acl_from_mode(ap->a_aclp, ip->i_mode, ip->i_uid);
+
+ return (error);
+ }
+
+ if (error)
+ return (error);
+
+ if (len != sizeof(*ap->a_aclp)) {
+ /*
+ * A short (or long) read, meaning that for
+ * some reason the ACL is corrupted. Return
+ * EPERM since the object DAC protections
+ * are unsafe.
+ */
+ printf("ufs_getacl_nfs4(): Loaded invalid ACL ("
+ "%d bytes)\n", len);
+
+ return (EPERM);
+ }
+
+ return (0);
+}
+
/*
* Retrieve the ACL on a file.
*
@@ -146,18 +192,12 @@
* assemble both into a final ACL product. Right now this is not done
* very efficiently.
*/
-int
-ufs_getacl(ap)
- struct vop_getacl_args /* {
- struct vnode *vp;
- struct acl_type_t type;
- struct acl *aclp;
- struct ucred *cred;
- struct thread *td;
- } */ *ap;
+static int
+ufs_getacl_posix1e(struct vop_getacl_args *ap)
{
struct inode *ip = VTOI(ap->a_vp);
int error, len;
+ struct oldacl old;
/*
* XXX: If ufs_getacl() should work on file systems not supporting
@@ -169,8 +209,8 @@
/*
* Attempt to retrieve the ACL based on the ACL type.
*/
- bzero(ap->a_aclp, sizeof(*ap->a_aclp));
- len = sizeof(*ap->a_aclp);
+ bzero(&old, sizeof(old));
+ len = sizeof(old);
switch(ap->a_type) {
case ACL_TYPE_ACCESS:
/*
@@ -182,7 +222,7 @@
*/
error = vn_extattr_get(ap->a_vp, IO_NODELOCKED,
POSIX1E_ACL_ACCESS_EXTATTR_NAMESPACE,
- POSIX1E_ACL_ACCESS_EXTATTR_NAME, &len, (char *) ap->a_aclp,
+ POSIX1E_ACL_ACCESS_EXTATTR_NAME, &len, (char *) &old,
ap->a_td);
switch (error) {
/* XXX: If ufs_getacl() should work on filesystems without
@@ -194,34 +234,45 @@
* be updated when the ACL is synchronized with
* the inode later.
*/
- ap->a_aclp->acl_cnt = 3;
- ap->a_aclp->acl_entry[0].ae_tag = ACL_USER_OBJ;
- ap->a_aclp->acl_entry[0].ae_id = ACL_UNDEFINED_ID;
- ap->a_aclp->acl_entry[0].ae_perm = ACL_PERM_NONE;
- ap->a_aclp->acl_entry[1].ae_tag = ACL_GROUP_OBJ;
- ap->a_aclp->acl_entry[1].ae_id = ACL_UNDEFINED_ID;
- ap->a_aclp->acl_entry[1].ae_perm = ACL_PERM_NONE;
- ap->a_aclp->acl_entry[2].ae_tag = ACL_OTHER;
- ap->a_aclp->acl_entry[2].ae_id = ACL_UNDEFINED_ID;
- ap->a_aclp->acl_entry[2].ae_perm = ACL_PERM_NONE;
+ old.acl_cnt = 3;
+ old.acl_entry[0].ae_tag = ACL_USER_OBJ;
+ old.acl_entry[0].ae_id = ACL_UNDEFINED_ID;
+ old.acl_entry[0].ae_perm = ACL_PERM_NONE;
+ old.acl_entry[1].ae_tag = ACL_GROUP_OBJ;
+ old.acl_entry[1].ae_id = ACL_UNDEFINED_ID;
+ old.acl_entry[1].ae_perm = ACL_PERM_NONE;
+ old.acl_entry[2].ae_tag = ACL_OTHER;
+ old.acl_entry[2].ae_id = ACL_UNDEFINED_ID;
+ old.acl_entry[2].ae_perm = ACL_PERM_NONE;
+
+ error = acl_copy_oldacl_into_acl(&old, ap->a_aclp);
+ if (error)
+ return (error);
+
ufs_sync_acl_from_inode(ip, ap->a_aclp);
- error = 0;
- break;
+
+ return (0);
case 0:
- if (len != sizeof(*ap->a_aclp)) {
+ if (len != sizeof(old)) {
/*
* A short (or long) read, meaning that for
* some reason the ACL is corrupted. Return
* EPERM since the object DAC protections
* are unsafe.
*/
- printf("ufs_getacl(): Loaded invalid ACL ("
+ printf("ufs_getacl_posix1e(): Loaded invalid ACL ("
"%d bytes)\n", len);
return (EPERM);
}
+
+ error = acl_copy_oldacl_into_acl(&old, ap->a_aclp);
+ if (error)
+ return (error);
+
ufs_sync_acl_from_inode(ip, ap->a_aclp);
- break;
+
+ return (0);
default:
break;
@@ -236,7 +287,7 @@
error = vn_extattr_get(ap->a_vp, IO_NODELOCKED,
POSIX1E_ACL_DEFAULT_EXTATTR_NAMESPACE,
POSIX1E_ACL_DEFAULT_EXTATTR_NAME, &len,
- (char *) ap->a_aclp, ap->a_td);
+ (char *) &old, ap->a_td);
/*
* Unlike ACL_TYPE_ACCESS, there is no relationship between
* the inode contents and the ACL, and it is therefore
@@ -248,13 +299,13 @@
/* XXX: If ufs_getacl() should work on filesystems without
* the EA configured, add case EOPNOTSUPP here. */
case ENOATTR:
- bzero(ap->a_aclp, sizeof(*ap->a_aclp));
- ap->a_aclp->acl_cnt = 0;
+ bzero(&old, sizeof(old));
+ old.acl_cnt = 0;
error = 0;
break;
case 0:
- if (len != sizeof(*ap->a_aclp)) {
+ if (len != sizeof(old)) {
/*
* A short (or long) read, meaning that for
* some reason the ACL is corrupted. Return
@@ -276,9 +327,98 @@
error = EINVAL;
}
+ if (error)
+ return (error);
+
+ error = acl_copy_oldacl_into_acl(&old, ap->a_aclp);
+
return (error);
}
+int
+ufs_getacl(ap)
+ struct vop_getacl_args /* {
+ struct vnode *vp;
+ acl_type_t type;
+ struct acl *aclp;
+ struct ucred *cred;
+ struct thread *td;
+ } */ *ap;
+{
+ if (ap->a_type == ACL_TYPE_NFS4)
+ return (ufs_getacl_nfs4(ap));
+
+ return (ufs_getacl_posix1e(ap));
+}
+
+static int
+ufs_setacl_nfs4(struct vop_setacl_args *ap)
+{
+ int error;
+ mode_t mode;
+ struct inode *ip = VTOI(ap->a_vp);
+
+ if ((ap->a_vp->v_mount->mnt_flag & MNT_NFS4ACLS) == 0)
+ return (EOPNOTSUPP);
+
+ if (ap->a_vp->v_mount->mnt_flag & MNT_RDONLY)
+ return (EROFS);
+
+ if (ap->a_aclp == NULL)
+ return (EINVAL);
+
+ error = VOP_ACLCHECK(ap->a_vp, ap->a_type, ap->a_aclp, ap->a_cred, ap->a_td);
+ if (error)
+ return (error);
+
+ /*
+ * Authorize the ACL operation.
+ */
+ if (ip->i_flags & (IMMUTABLE | APPEND))
+ return (EPERM);
+
+ /*
+ * Must hold VADMIN (be file owner) or have appropriate privilege.
+ */
+ if ((error = VOP_ACCESS(ap->a_vp, VADMIN, ap->a_cred, ap->a_td)))
+ return (error);
+
+ if (acl_nfs4_is_trivial(ap->a_aclp)) {
+ error = vn_extattr_rm(ap->a_vp, IO_NODELOCKED,
+ NFS4_ACL_EXTATTR_NAMESPACE,
+ NFS4_ACL_EXTATTR_NAME, ap->a_td);
+
+ } else {
+ error = vn_extattr_set(ap->a_vp, IO_NODELOCKED,
+ NFS4_ACL_EXTATTR_NAMESPACE,
+ NFS4_ACL_EXTATTR_NAME, sizeof(*ap->a_aclp),
+ (char *) ap->a_aclp, ap->a_td);
+ }
+
+ /*
+ * Map lack of attribute definition in UFS_EXTATTR into lack of
+ * support for ACLs on the filesystem.
+ */
+ if (error == ENOATTR)
+ return (EOPNOTSUPP);
+
+ if (error)
+ return (error);
+
+ mode = ip->i_mode;
+
+ acl_nfs4_sync_mode_from_acl(&mode, ap->a_aclp);
+
+ ip->i_mode &= ACL_PRESERVE_MASK;
+ ip->i_mode |= mode;
+ DIP_SET(ip, i_mode, ip->i_mode);
+ ip->i_flag |= IN_CHANGE;
+
+ VN_KNOTE_UNLOCKED(ap->a_vp, NOTE_ATTRIB);
+
+ return (0);
+}
+
/*
* Set the ACL on a file.
*
@@ -288,18 +428,12 @@
* a fair number of different access checks may be required to go ahead
* with the operation at all.
*/
-int
-ufs_setacl(ap)
- struct vop_setacl_args /* {
- struct vnode *vp;
- acl_type_t type;
- struct acl *aclp;
- struct ucred *cred;
- struct proc *p;
- } */ *ap;
+static int
+ufs_setacl_posix1e(struct vop_setacl_args *ap)
{
struct inode *ip = VTOI(ap->a_vp);
int error;
+ struct oldacl old;
if ((ap->a_vp->v_mount->mnt_flag & MNT_ACLS) == 0)
return (EOPNOTSUPP);
@@ -344,12 +478,16 @@
if ((error = VOP_ACCESS(ap->a_vp, VADMIN, ap->a_cred, ap->a_td)))
return (error);
+ error = acl_copy_acl_into_oldacl(ap->a_aclp, &old);
+ if (error)
+ return (error);
+
switch(ap->a_type) {
case ACL_TYPE_ACCESS:
error = vn_extattr_set(ap->a_vp, IO_NODELOCKED,
POSIX1E_ACL_ACCESS_EXTATTR_NAMESPACE,
- POSIX1E_ACL_ACCESS_EXTATTR_NAME, sizeof(*ap->a_aclp),
- (char *) ap->a_aclp, ap->a_td);
+ POSIX1E_ACL_ACCESS_EXTATTR_NAME, sizeof(old),
+ (char *) &old, ap->a_td);
break;
case ACL_TYPE_DEFAULT:
@@ -373,7 +511,7 @@
error = vn_extattr_set(ap->a_vp, IO_NODELOCKED,
POSIX1E_ACL_DEFAULT_EXTATTR_NAMESPACE,
POSIX1E_ACL_DEFAULT_EXTATTR_NAME,
- sizeof(*ap->a_aclp), (char *) ap->a_aclp, ap->a_td);
+ sizeof(old), (char *) &old, ap->a_td);
break;
default:
@@ -401,12 +539,9 @@
return (0);
}
-/*
- * Check the validity of an ACL for a file.
- */
int
-ufs_aclcheck(ap)
- struct vop_aclcheck_args /* {
+ufs_setacl(ap)
+ struct vop_setacl_args /* {
struct vnode *vp;
acl_type_t type;
struct acl *aclp;
@@ -414,7 +549,29 @@
struct thread *td;
} */ *ap;
{
+ if (ap->a_type == ACL_TYPE_NFS4)
+ return (ufs_setacl_nfs4(ap));
+
+ return (ufs_setacl_posix1e(ap));
+}
+
+static int
+ufs_aclcheck_nfs4(struct vop_aclcheck_args *ap)
+{
+ int is_directory = 0;
+
+ if ((ap->a_vp->v_mount->mnt_flag & MNT_NFS4ACLS) == 0)
+ return (EOPNOTSUPP);
+
+ if (ap->a_vp->v_type == VDIR)
+ is_directory = 1;
+ return (acl_nfs4_check(ap->a_aclp, is_directory));
+}
+
+static int
+ufs_aclcheck_posix1e(struct vop_aclcheck_args *ap)
+{
if ((ap->a_vp->v_mount->mnt_flag & MNT_ACLS) == 0)
return (EOPNOTSUPP);
@@ -438,4 +595,23 @@
return (acl_posix1e_check(ap->a_aclp));
}
+/*
+ * Check the validity of an ACL for a file.
+ */
+int
+ufs_aclcheck(ap)
+ struct vop_aclcheck_args /* {
+ struct vnode *vp;
+ acl_type_t type;
+ struct acl *aclp;
+ struct ucred *cred;
+ struct thread *td;
+ } */ *ap;
+{
+ if (ap->a_type == ACL_TYPE_NFS4)
+ return (ufs_aclcheck_nfs4(ap));
+
+ return (ufs_aclcheck_posix1e(ap));
+}
+
#endif /* !UFS_ACL */
==== //depot/projects/soc2008/trasz_nfs4acl/sys/ufs/ufs/ufs_vnops.c#5 (text+ko) ====
@@ -312,6 +312,7 @@
int error;
#ifdef UFS_ACL
struct acl *acl;
+ acl_type_t type;
#endif
/*
@@ -337,9 +338,14 @@
return (EPERM);
#ifdef UFS_ACL
- if ((vp->v_mount->mnt_flag & MNT_ACLS) != 0) {
+ if ((vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) != 0) {
+ if (vp->v_mount->mnt_flag & MNT_NFS4ACLS)
+ type = ACL_TYPE_NFS4;
+ else
+ type = ACL_TYPE_ACCESS;
+
acl = uma_zalloc(acl_zone, M_WAITOK);
- error = VOP_GETACL(vp, ACL_TYPE_ACCESS, acl, ap->a_cred,
+ error = VOP_GETACL(vp, type, acl, ap->a_cred,
ap->a_td);
switch (error) {
case EOPNOTSUPP:
@@ -347,8 +353,13 @@
ip->i_gid, ap->a_mode, ap->a_cred, NULL);
break;
case 0:
- error = vaccess_acl_posix1e(vp->v_type, ip->i_uid,
- ip->i_gid, acl, ap->a_mode, ap->a_cred, NULL);
+ if (type == ACL_TYPE_NFS4) {
+ error = vaccess_acl_nfs4(vp->v_type, ip->i_uid,
+ ip->i_gid, acl, ap->a_mode, ap->a_cred, NULL);
+ } else {
+ error = vaccess_acl_posix1e(vp->v_type, ip->i_uid,
+ ip->i_gid, acl, ap->a_mode, ap->a_cred, NULL);
+ }
break;
default:
printf(
@@ -631,6 +642,37 @@
return (error);
}
+#ifdef UFS_ACL
+static int
+ufs_update_nfs4_acl_after_mode_change(struct vnode *vp, int mode,
+ int file_owner_id, struct ucred *cred, struct thread *td)
+{
+ int error;
+ struct acl *aclp;
+
+ aclp = uma_zalloc(acl_zone, M_WAITOK);
+
+ error = VOP_GETACL(vp, ACL_TYPE_NFS4, aclp, cred, td);
+ /*
+ * We cannot get EOPNOTSUPP here, as the filesystem claims
+ * to support ACLs.
+ */
+ if (error)
+ goto out;
+
+ error = acl_nfs4_sync_acl_from_mode(aclp, mode, file_owner_id);
+ if (error)
+ goto out;
+
+ error = VOP_SETACL(vp, ACL_TYPE_NFS4, aclp, cred, td);
+
+out:
+ uma_zfree(acl_zone, aclp);
+
+ return (error);
+}
+#endif /* UFS_ACL */
+
/*
* Change the mode on a file.
* Inode must be locked before calling.
@@ -670,7 +712,11 @@
ip->i_mode |= (mode & ALLPERMS);
DIP_SET(ip, i_mode, ip->i_mode);
ip->i_flag |= IN_CHANGE;
- return (0);
+#ifdef UFS_ACL
+ if ((vp->v_mount->mnt_flag & MNT_NFS4ACLS) != 0)
+ error = ufs_update_nfs4_acl_after_mode_change(vp, mode, ip->i_uid, cred, td);
+#endif
+ return (error);
}
/*
@@ -1355,6 +1401,38 @@
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From trasz at FreeBSD.org Wed Jul 2 11:03:40 2008
From: trasz at FreeBSD.org (Edward Tomasz Napierala)
Date: Wed Jul 2 11:03:43 2008
Subject: PERFORCE change 144478 for review
Message-ID: <200807021103.m62B3d0O013866@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144478
Change 144478 by trasz@trasz_traszkan on 2008/07/02 11:02:45
NFSv4 ACLs, libc part.
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Makefile.inc#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Symbol.map#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_branding.c#1 add
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_calc_mask.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_copy.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_delete.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_delete_entry.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_entry.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_flags_nfs4.c#1 add
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_flags_nfs4.h#1 add
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_from_text.c#3 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_from_text_nfs4.c#1 add
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_get.c#3 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_init.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_perm.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_set.c#3 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_strip.c#1 add
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_support.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_support.h#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_to_text.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_to_text_nfs4.c#1 add
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_valid.c#2 edit
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Makefile.inc#2 (text+ko) ====
@@ -7,14 +7,20 @@
acl_delete.c \
acl_delete_entry.c \
acl_entry.c \
+ acl_flags_nfs4.c \
acl_free.c \
acl_from_text.c \
+ acl_from_text_nfs4.c \
acl_get.c \
acl_init.c \
acl_perm.c \
acl_set.c \
acl_support.c \
+ acl_branding.c \
+ acl_strip.c \
acl_to_text.c \
+ acl_to_text_nfs4.c \
+ acl_strip.c \
acl_valid.c \
extattr.c \
mac.c \
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Symbol.map#2 (text) ====
@@ -13,12 +13,16 @@
acl_delete_link_np;
acl_delete_fd_np;
acl_delete_entry;
+ acl_delete_entry_at_position_np;
acl_create_entry;
+ acl_create_entry_at_position_np;
acl_get_entry;
acl_free;
acl_from_text;
acl_get_file;
acl_get_link_np;
+ acl_get_extended_np;
+ acl_get_flags_np;
acl_get_fd;
acl_get_fd_np;
acl_get_perm_np;
@@ -30,6 +34,8 @@
acl_add_perm;
acl_clear_perms;
acl_delete_perm;
+ acl_set_extended_np;
+ acl_set_flags_np;
acl_set_file;
acl_set_link_np;
acl_set_fd;
@@ -42,6 +48,8 @@
acl_valid_file_np;
acl_valid_link_np;
acl_valid_fd_np;
+ acl_is_trivial_np;
+ acl_strip_np;
extattr_namespace_to_string;
extattr_string_to_namespace;
mac_reload;
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_calc_mask.c#2 (text+ko) ====
@@ -35,6 +35,8 @@
#include
#include
+#include "acl_support.h"
+
/*
* acl_calc_mask() (23.4.2): calculate and set the permissions
* associated with the ACL_MASK ACL entry. If the ACL already
@@ -48,6 +50,11 @@
acl_t acl_new;
int i, mask_mode, mask_num;
+ if (!_acl_must_be_posix(*acl_p)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
/*
* (23.4.2.4) requires acl_p to point to a pointer to a valid ACL.
* Since one of the primary reasons to use this function would be
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_copy.c#2 (text+ko) ====
@@ -35,6 +35,8 @@
#include
#include
+#include "acl_support.h"
+
/*
* acl_copy_entry() (23.4.4): copy the contents of ACL entry src_d to
* ACL entry dest_d
@@ -48,9 +50,25 @@
return (-1);
}
- dest_d->ae_tag = src_d->ae_tag;
- dest_d->ae_id = src_d->ae_id;
+ if (_entry_is_posix(src_d)) {
+ if (!_entry_must_be_posix(dest_d)) {
+ errno = EINVAL;
+ return (-1);
+ }
+ }
+
+ if (_entry_is_nfs4(src_d)) {
+ if (!_entry_must_be_nfs4(dest_d)) {
+ errno = EINVAL;
+ return (-1);
+ }
+ }
+
+ dest_d->ae_tag = src_d->ae_tag;
+ dest_d->ae_id = src_d->ae_id;
dest_d->ae_perm = src_d->ae_perm;
+ dest_d->ae_extended = src_d->ae_extended;
+ dest_d->ae_flags = src_d->ae_flags;
return (0);
}
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_delete.c#2 (text+ko) ====
@@ -38,6 +38,8 @@
#include "un-namespace.h"
#include
+#include "acl_support.h"
+
int
acl_delete_def_file(const char *path_p)
{
@@ -56,6 +58,8 @@
acl_delete_file_np(const char *path_p, acl_type_t type)
{
+ type = _acl_type_unold(type);
+
return (__acl_delete_file(path_p, type));
}
@@ -63,6 +67,8 @@
acl_delete_link_np(const char *path_p, acl_type_t type)
{
+ type = _acl_type_unold(type);
+
return (__acl_delete_link(path_p, type));
}
@@ -71,5 +77,7 @@
acl_delete_fd_np(int filedes, acl_type_t type)
{
+ type = _acl_type_unold(type);
+
return (___acl_delete_fd(filedes, type));
}
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_delete_entry.c#2 (text+ko) ====
@@ -33,6 +33,40 @@
#include "un-namespace.h"
#include
#include
+#include
+
+#include "acl_support.h"
+
+static int
+_entry_matches(const acl_entry_t a, const acl_entry_t b)
+{
+ /*
+ * There is a semantical difference here between NFSv4 and POSIX
+ * draft ACLs. In POSIX, there may be only one entry for the particular
+ * user or group. In NFSv4 ACL, there may be any number of them. We're
+ * trying to be more specific here in that case.
+ *
+ * XXX: The proper way would be to remove them by entry number.
+ */
+ if (_entry_is_nfs4(a)) {
+ if (a->ae_tag != b->ae_tag || a->ae_extended != b->ae_extended)
+ return (0);
+
+ /* If ae_ids matter, compare them as well. */
+ if (a->ae_tag == ACL_USER || a->ae_tag == ACL_GROUP) {
+ if (a->ae_id != b->ae_id)
+ return (0);
+ }
+
+ return (1);
+
+ } else {
+ if ((a->ae_tag == b->ae_tag) && (a->ae_id == b->ae_id))
+ return (1);
+ }
+
+ return (0);
+}
/*
* acl_delete_entry() (23.4.9): remove the ACL entry indicated by entry_d
@@ -42,7 +76,7 @@
acl_delete_entry(acl_t acl, acl_entry_t entry_d)
{
struct acl *acl_int;
- int i;
+ int i, found = 0;
if (acl == NULL || entry_d == NULL) {
errno = EINVAL;
@@ -51,15 +85,18 @@
acl_int = &acl->ats_acl;
+ if (_entry_is_nfs4(entry_d) != _acl_is_nfs4(acl)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
if ((acl->ats_acl.acl_cnt < 1) ||
(acl->ats_acl.acl_cnt > ACL_MAX_ENTRIES)) {
errno = EINVAL;
return (-1);
}
for (i = 0; i < acl->ats_acl.acl_cnt; i++) {
- /* if this is our entry... */
- if ((acl->ats_acl.acl_entry[i].ae_tag == entry_d->ae_tag) &&
- (acl->ats_acl.acl_entry[i].ae_id == entry_d->ae_id)) {
+ if (_entry_matches(&(acl->ats_acl.acl_entry[i]), entry_d)) {
/* ...shift the remaining entries... */
for (; i < acl->ats_acl.acl_cnt - 1; ++i)
acl->ats_acl.acl_entry[i] =
@@ -68,12 +105,57 @@
acl->ats_acl.acl_cnt--;
bzero(&acl->ats_acl.acl_entry[i],
sizeof(struct acl_entry));
+ /* XXX: We need this because of the bzero above. */
+ _acl_fixup_entry_pointers(acl);
acl->ats_cur_entry = 0;
- return (0);
+
+ /* Continue with the loop to remove all maching entries. */
+ found = 1;
}
}
+ if (found)
+ return (0);
errno = EINVAL;
return (-1);
}
+
+int
+acl_delete_entry_at_position_np(acl_t acl, int offset)
+{
+ struct acl *acl_int;
+ int i;
+
+ if (acl == NULL) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ acl_int = &acl->ats_acl;
+
+ if (offset < 0 || offset >= acl_int->acl_cnt) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ if ((acl->ats_acl.acl_cnt < 1) ||
+ (acl->ats_acl.acl_cnt > ACL_MAX_ENTRIES)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ /* ...shift the remaining entries... */
+ for (i = offset; i < acl->ats_acl.acl_cnt - 1; ++i)
+ acl->ats_acl.acl_entry[i] =
+ acl->ats_acl.acl_entry[i+1];
+ /* ...drop the count and zero the unused entry... */
+ acl->ats_acl.acl_cnt--;
+ bzero(&acl->ats_acl.acl_entry[i],
+ sizeof(struct acl_entry));
+ /* XXX: We need this because of the bzero above. */
+ _acl_fixup_entry_pointers(acl);
+ acl->ats_cur_entry = 0;
+
+ return (0);
+}
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_entry.c#2 (text+ko) ====
@@ -51,7 +51,8 @@
acl_int = &(*acl_p)->ats_acl;
- if ((acl_int->acl_cnt >= ACL_MAX_ENTRIES) || (acl_int->acl_cnt < 0)) {
+ /* XXX: There was a bug here. */
+ if ((acl_int->acl_cnt + 1 >= ACL_MAX_ENTRIES) || (acl_int->acl_cnt < 0)) {
errno = EINVAL;
return (-1);
}
@@ -61,6 +62,50 @@
(**entry_p).ae_tag = ACL_UNDEFINED_TAG;
(**entry_p).ae_id = ACL_UNDEFINED_ID;
(**entry_p).ae_perm = ACL_PERM_NONE;
+ (**entry_p).ae_acl = acl_int;
+ (**entry_p).ae_flags= 0;
+
+ (*acl_p)->ats_cur_entry = 0;
+
+ return (0);
+}
+
+int
+acl_create_entry_at_position_np(acl_t *acl_p, acl_entry_t *entry_p, int offset)
+{
+ int i;
+ struct acl *acl_int;
+
+ if (acl_p == NULL) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ acl_int = &(*acl_p)->ats_acl;
+
+ if ((acl_int->acl_cnt + 1 >= ACL_MAX_ENTRIES) || (acl_int->acl_cnt < 0)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ if (offset < 0 || offset >= acl_int->acl_cnt) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ /* Make room for the new entry. */
+ for (i = acl_int->acl_cnt; i > offset; i--)
+ acl_int->acl_entry[i] = acl_int->acl_entry[i - 1];
+
+ acl_int->acl_cnt++;
+
+ *entry_p = &acl_int->acl_entry[offset];
+
+ (**entry_p).ae_tag = ACL_UNDEFINED_TAG;
+ (**entry_p).ae_id = ACL_UNDEFINED_ID;
+ (**entry_p).ae_perm = ACL_PERM_NONE;
+ (**entry_p).ae_acl = acl_int;
+ (**entry_p).ae_flags= 0;
(*acl_p)->ats_cur_entry = 0;
@@ -90,6 +135,7 @@
if (acl->ats_cur_entry >= acl->ats_acl.acl_cnt)
return 0;
*entry_p = &acl_int->acl_entry[acl->ats_cur_entry++];
+ (*entry_p)->ae_acl = acl_int;
return (1);
}
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_from_text.c#3 (text+ko) ====
@@ -40,46 +40,16 @@
#include
#include
#include
+#include
#include "acl_support.h"
static int _posix1e_acl_name_to_id(acl_tag_t tag, char *name, uid_t *id);
static acl_tag_t acl_string_to_tag(char *tag, char *qualifier);
-static char *string_skip_whitespace(char *string);
-static void string_trim_trailing_whitespace(char *string);
-static char *
-string_skip_whitespace(char *string)
-{
-
- while (*string && ((*string == ' ') || (*string == '\t'))) {
- string++;
- }
- return (string);
-}
-
-static void
-string_trim_trailing_whitespace(char *string)
-{
- char *end;
+int _nfs4_acl_entry_from_text(acl_t aclp, char *entry);
+int _text_could_be_nfs4_acl(const char *entry);
- if (*string == '\0')
- return;
-
- end = string + strlen(string) - 1;
-
- while (end != string) {
- if ((*end == ' ') || (*end == '\t')) {
- *end = '\0';
- end--;
- } else {
- return;
- }
- }
-
- return;
-}
-
static acl_tag_t
acl_string_to_tag(char *tag, char *qualifier)
{
@@ -118,6 +88,8 @@
uid_t id;
int error;
+ assert(_acl_is_posix(aclp));
+
/* Split into three ':' delimited fields. */
tag = strsep(&entry, ":");
if (tag == NULL) {
@@ -194,6 +166,25 @@
return (0);
}
+static int
+_text_is_nfs4_entry(const char *entry)
+{
+ int count = 0;
+
+ assert(strlen(entry) > 0);
+
+ while (*entry != '\0') {
+ if (*entry == ':' || *entry == '@')
+ count++;
+ entry++;
+ }
+
+ if (count <= 2)
+ return (0);
+
+ return (1);
+}
+
/*
* acl_from_text -- Convert a string into an ACL.
* Postpone most validity checking until the end and call acl_valid() to do
@@ -211,7 +202,7 @@
if (mybuf_p == NULL)
return(NULL);
- acl = acl_init(3);
+ acl = acl_init(3); /* XXX: WTF, 3? */
if (acl == NULL) {
free(mybuf_p);
return(NULL);
@@ -226,7 +217,21 @@
/* Inner loop: delimit at ',' boundaries. */
while ((entry = strsep(¬comment, ","))) {
- error = _posix1e_acl_entry_from_text(acl, entry);
+
+ /* Skip empty lines. */
+ if (strlen(string_skip_whitespace(entry)) == 0)
+ continue;
+
+ if (_acl_is_unknown(acl) && _text_is_nfs4_entry(entry))
+ _acl_must_be_nfs4(acl);
+ else
+ _acl_must_be_posix(acl);
+
+ if (_acl_is_nfs4(acl))
+ error = _nfs4_acl_entry_from_text(acl, entry);
+ else
+ error = _posix1e_acl_entry_from_text(acl, entry);
+
if (error)
goto error_label;
}
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_get.c#3 (text+ko) ====
@@ -49,6 +49,9 @@
#include
#include
#include
+#include
+
+#include "acl_support.h"
acl_t
acl_get_file(const char *path_p, acl_type_t type)
@@ -60,12 +63,17 @@
if (aclp == NULL)
return (NULL);
+ type = _acl_type_unold(type);
+
error = __acl_get_file(path_p, type, &aclp->ats_acl);
if (error) {
acl_free(aclp);
return (NULL);
}
+ _acl_fixup_entry_pointers(aclp);
+ _acl_brand_from_type(aclp, type);
+
return (aclp);
}
@@ -79,18 +87,26 @@
if (aclp == NULL)
return (NULL);
+ type = _acl_type_unold(type);
+
error = __acl_get_link(path_p, type, &aclp->ats_acl);
if (error) {
acl_free(aclp);
return (NULL);
}
+ _acl_fixup_entry_pointers(aclp);
+ _acl_brand_from_type(aclp, type);
+
return (aclp);
}
acl_t
acl_get_fd(int fd)
{
+ if (fpathconf(fd, _PC_EXTENDED_SECURITY_NP))
+ return (acl_get_fd_np(fd, ACL_TYPE_NFS4));
+
return (acl_get_fd_np(fd, ACL_TYPE_ACCESS));
}
@@ -104,15 +120,23 @@
if (aclp == NULL)
return (NULL);
+ type = _acl_type_unold(type);
+
error = ___acl_get_fd(fd, type, &aclp->ats_acl);
if (error) {
acl_free(aclp);
return (NULL);
}
+ _acl_fixup_entry_pointers(aclp);
+ _acl_brand_from_type(aclp, type);
+
return (aclp);
}
+/*
+ * XXX: Possible binary compatibility problem; acl_perm_t definition changed.
+ */
int
acl_get_perm_np(acl_permset_t permset_d, acl_perm_t perm)
{
@@ -200,3 +224,40 @@
return (0);
}
+
+int
+acl_get_extended_np(acl_entry_t entry_d, acl_extended_t *extended_p)
+{
+ if (entry_d == NULL || extended_p == NULL) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ if (!_entry_is_nfs4(entry_d)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ *extended_p = entry_d->ae_extended;
+
+ return (0);
+}
+
+int
+acl_get_flags_np(acl_entry_t entry_d, acl_flag_t *flags_p)
+{
+ if (entry_d == NULL || flags_p == NULL) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ if (!_entry_is_nfs4(entry_d)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ *flags_p = entry_d->ae_flags;
+
+ return (0);
+}
+
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_init.c#2 (text+ko) ====
@@ -39,6 +39,8 @@
#include
#include
+#include "acl_support.h"
+
acl_t
acl_init(int count)
{
@@ -57,6 +59,11 @@
if (acl != NULL)
bzero(acl, sizeof(struct acl_t_struct));
+ acl->ats_acl.acl_brand = ACL_BRAND_UNKNOWN;
+ acl->ats_acl.acl_magic = ACL_MAGIC;
+
+ _acl_fixup_entry_pointers(acl);
+
return (acl);
}
@@ -72,5 +79,7 @@
acl_new->ats_cur_entry = 0;
}
+ _acl_fixup_entry_pointers(acl_new);
+
return (acl_new);
}
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_perm.c#2 (text+ko) ====
@@ -39,6 +39,9 @@
* acl_add_perm() (23.4.1): add the permission contained in perm to the
* permission set permset_d
*/
+/*
+ * XXX: Possible binary compatibility problem; acl_perm_t definition changed.
+ */
int
acl_add_perm(acl_permset_t permset_d, acl_perm_t perm)
{
@@ -79,6 +82,9 @@
* acl_delete_perm() (23.4.10): remove the permission in perm from the
* permission set permset_d
*/
+/*
+ * XXX: Possible binary compatibility problem; acl_perm_t definition changed.
+ */
int
acl_delete_perm(acl_permset_t permset_d, acl_perm_t perm)
{
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_set.c#3 (text+ko) ====
@@ -40,6 +40,7 @@
#include
#include
#include
+#include
#include "acl_support.h"
@@ -58,6 +59,15 @@
errno = EINVAL;
return (-1);
}
+
+ /* This is for old binaries using new libc. */
+ type = _acl_type_unold(type);
+
+ if (_acl_type_not_valid_for_acl(acl, type)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
if (_posix1e_acl(acl, type)) {
error = _posix1e_acl_sort(acl);
if (error) {
@@ -80,6 +90,14 @@
errno = EINVAL;
return (-1);
}
+
+ type = _acl_type_unold(type);
+
+ if (_acl_type_not_valid_for_acl(acl, type)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
if (_posix1e_acl(acl, type)) {
error = _posix1e_acl_sort(acl);
if (error) {
@@ -96,6 +114,9 @@
int
acl_set_fd(int fd, acl_t acl)
{
+ if (fpathconf(fd, _PC_EXTENDED_SECURITY_NP))
+ return (acl_set_fd_np(fd, acl, ACL_TYPE_NFS4));
+
return (acl_set_fd_np(fd, acl, ACL_TYPE_ACCESS));
}
@@ -104,6 +125,18 @@
{
int error;
+ if (acl == NULL) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ type = _acl_type_unold(type);
+
+ if (_acl_type_not_valid_for_acl(acl, type)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
if (_posix1e_acl(acl, type)) {
error = _posix1e_acl_sort(acl);
if (error) {
@@ -130,6 +163,19 @@
return (-1);
}
+ if ((*permset_d & ACL_POSIX1E_BITS) != *permset_d) {
+
+ if ((*permset_d & ACL_NFS4_PERM_BITS) != *permset_d) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ if (!_entry_must_be_nfs4(entry_d)) {
+ errno = EINVAL;
+ return (-1);
+ }
+ }
+
entry_d->ae_perm = *permset_d;
return (0);
@@ -173,6 +219,15 @@
return (-1);
}
+ if ((tag_type == ACL_OTHER || tag_type == ACL_MASK) &&
+ !_entry_must_be_posix(entry_d)) {
+ errno = EINVAL;
+ return (-1);
+ } else if (tag_type == ACL_EVERYONE && !_entry_must_be_nfs4(entry_d)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
switch(tag_type) {
case ACL_USER_OBJ:
case ACL_USER:
@@ -180,6 +235,7 @@
case ACL_GROUP:
case ACL_MASK:
case ACL_OTHER:
+ case ACL_EVERYONE:
entry_d->ae_tag = tag_type;
return (0);
}
@@ -187,3 +243,53 @@
errno = EINVAL;
return (-1);
}
+
+int
+acl_set_extended_np(acl_entry_t entry_d, acl_extended_t extended)
+{
+ if (entry_d == NULL) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ if (!_entry_must_be_nfs4(entry_d)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ switch (extended) {
+ case ACL_EXTENDED_ALLOW:
+ case ACL_EXTENDED_DENY:
+ case ACL_EXTENDED_AUDIT:
+ case ACL_EXTENDED_ALARM:
+
+ entry_d->ae_extended = extended;
+ return (0);
+ }
+
+ errno = EINVAL;
+ return (-1);
+}
+
+int
+acl_set_flags_np(acl_entry_t entry_d, acl_flag_t flags)
+{
+ if (entry_d == NULL) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ if ((flags & ACL_FLAGS_BITS) != flags) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ if (!_entry_must_be_nfs4(entry_d)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ entry_d->ae_flags = flags;
+ return (0);
+}
+
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_support.c#2 (text+ko) ====
@@ -40,6 +40,8 @@
#include
#include
#include
+#include
+#include
#include "acl_support.h"
@@ -49,6 +51,51 @@
#define ACL_STRING_PERM_NONE '-'
/*
+ * Convert "old" type - ACL_TYPE_{ACCESS,DEFAULT}_OLD - into its "new"
+ * counterpart. It's neccessary for the old (pre-NFS4 ACLs) binaries
+ * to work with new libc and kernel. Fixing "type" for old binaries with
+ * old libc and new kernel is being done by kern/vfs_acl.c:type_unold().
+ */
+int
+_acl_type_unold(acl_type_t type)
+{
+ if (type == ACL_TYPE_ACCESS_OLD)
+ return (ACL_TYPE_ACCESS);
+
+ if (type == ACL_TYPE_DEFAULT_OLD)
+ return (ACL_TYPE_DEFAULT);
+
+ return (type);
+}
+
+/*
+ * Return 0, if both ACLs are identical.
+ */
+int
+_acl_differs(const acl_t a, const acl_t b)
+{
+ int i;
+ struct acl_entry *entrya, *entryb;
+
+ if (a->ats_acl.acl_cnt != b->ats_acl.acl_cnt)
+ return (1);
+
+ for (i = 0; i < b->ats_acl.acl_cnt; i++) {
+ entrya = &(a->ats_acl.acl_entry[i]);
+ entryb = &(b->ats_acl.acl_entry[i]);
+
+ if (entrya->ae_tag != entryb->ae_tag ||
+ entrya->ae_id != entryb->ae_id ||
+ entrya->ae_perm != entryb->ae_perm ||
+ entrya->ae_extended != entryb->ae_extended ||
+ entrya->ae_flags != entryb->ae_flags)
+ return (1);
+ }
+
+ return (0);
+}
+
+/*
* _posix1e_acl_entry_compare -- compare two acl_entry structures to
* determine the order they should appear in. Used by _posix1e_acl_sort to
* sort ACL entries into the kernel-desired order -- i.e., the order useful
@@ -59,6 +106,9 @@
static int
_posix1e_acl_entry_compare(struct acl_entry *a, struct acl_entry *b)
{
+ assert(_entry_is_posix(a));
+ assert(_entry_is_posix(b));
+
/*
* First, sort between tags -- conveniently defined in the correct
* order for verification.
@@ -101,6 +151,9 @@
acl_int = &acl->ats_acl;
+ /* XXX: */
+ assert(_entry_is_posix(&(acl->ats_acl.acl_entry[3])));
+
qsort(&acl_int->acl_entry[0], acl_int->acl_cnt,
sizeof(struct acl_entry), (compare) _posix1e_acl_entry_compare);
@@ -115,6 +168,8 @@
int
_posix1e_acl(acl_t acl, acl_type_t type)
{
+ if (!_acl_is_posix(acl))
+ return (0);
return ((type == ACL_TYPE_ACCESS) || (type == ACL_TYPE_DEFAULT));
}
@@ -382,3 +437,37 @@
return (0);
}
+
+char *
+string_skip_whitespace(char *string)
+{
+
+ while (*string && ((*string == ' ') || (*string == '\t'))) {
+ string++;
+ }
+ return (string);
+}
+
+void
+string_trim_trailing_whitespace(char *string)
+{
+ char *end;
+
+ if (*string == '\0')
+ return;
+
+ end = string + strlen(string) - 1;
+
+ while (end != string) {
+ if ((*end == ' ') || (*end == '\t')) {
+ *end = '\0';
+ end--;
+ } else {
+ return;
+ }
+ }
+
+ return;
+}
+
+
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_support.h#2 (text+ko) ====
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From trasz at FreeBSD.org Wed Jul 2 11:04:41 2008
From: trasz at FreeBSD.org (Edward Tomasz Napierala)
Date: Wed Jul 2 11:04:43 2008
Subject: PERFORCE change 144479 for review
Message-ID: <200807021104.m62B4eqU013942@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144479
Change 144479 by trasz@trasz_traszkan on 2008/07/02 11:04:20
Add support for the new ACLs to getfacl(1).
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/bin/getfacl/getfacl.c#5 edit
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/bin/getfacl/getfacl.c#5 (text+ko) ====
@@ -196,6 +196,9 @@
else
more_than_one++;
+ if (pathconf(path, _PC_EXTENDED_SECURITY_NP))
+ type = ACL_TYPE_NFS4;
+
if (!qflag)
printf("# file: %s\n# owner: %s\n# group: %s\n", path,
getuname(sb.st_uid), getgname(sb.st_gid));
@@ -210,7 +213,7 @@
return(-1);
}
errno = 0;
- if (type != ACL_TYPE_ACCESS)
+ if (type != ACL_TYPE_ACCESS && type != ACL_TYPE_NFS4)
return(0);
acl = acl_from_stat(sb);
if (!acl) {
From trasz at FreeBSD.org Wed Jul 2 11:09:46 2008
From: trasz at FreeBSD.org (Edward Tomasz Napierala)
Date: Wed Jul 2 11:09:48 2008
Subject: PERFORCE change 144480 for review
Message-ID: <200807021109.m62B9jHc014393@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144480
Change 144480 by trasz@trasz_traszkan on 2008/07/02 11:09:31
Add support for the new ACLs to ls(1).
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/bin/ls/print.c#2 edit
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/bin/ls/print.c#2 (text+ko) ====
@@ -616,9 +616,8 @@
aclmode(char *buf, const FTSENT *p, int *haveacls)
{
char name[MAXPATHLEN + 1];
- int entries, ret;
+ int type = ACL_TYPE_ACCESS, ret;
acl_t facl;
- acl_entry_t ae;
/*
* Add a + after the standard rwxrwxrwx mode if the file has an
@@ -638,29 +637,34 @@
*haveacls = 1;
return;
}
- if ((ret = pathconf(name, _PC_ACL_EXTENDED)) <= 0) {
- if (ret < 0 && errno != EINVAL)
- warn("%s", name);
- else
- *haveacls = 0;
+
+ *haveacls = 0;
+
+ ret = pathconf(name, _PC_ACL_EXTENDED);
+ if (ret > 0) {
+ type = ACL_TYPE_ACCESS;
+ *haveacls = 1;
+ } else if (ret < 0 && errno != EINVAL) {
+ warn("%s", name);
+ return;
+ }
+
+ ret = pathconf(name, _PC_EXTENDED_SECURITY_NP);
+ if (ret > 0) {
+ type = ACL_TYPE_NFS4;
+ *haveacls = 1;
+ } else if (ret < 0 && errno != EINVAL) {
+ warn("%s", name);
return;
}
- *haveacls = 1;
- if ((facl = acl_get_file(name, ACL_TYPE_ACCESS)) != NULL) {
- if (acl_get_entry(facl, ACL_FIRST_ENTRY, &ae) == 1) {
- entries = 1;
- while (acl_get_entry(facl, ACL_NEXT_ENTRY, &ae) == 1)
- if (++entries > 3)
- break;
- /*
- * POSIX.1e requires that ACLs of type ACL_TYPE_ACCESS
- * must have at least three entries (owner, group,
- * and other). So anything with more than 3 ACLs looks
- * interesting to us.
- */
- if (entries > 3)
- buf[10] = '+';
- }
+
+ if (*haveacls == 0)
+ return;
+
+ if ((facl = acl_get_file(name, type)) != NULL) {
+ if (!acl_is_trivial_np(facl))
+ buf[10] = '+';
+
acl_free(facl);
} else
warn("%s", name);
From trasz at FreeBSD.org Wed Jul 2 11:16:54 2008
From: trasz at FreeBSD.org (Edward Tomasz Napierala)
Date: Wed Jul 2 11:16:56 2008
Subject: PERFORCE change 144481 for review
Message-ID: <200807021116.m62BGra9015011@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144481
Change 144481 by trasz@trasz_traszkan on 2008/07/02 11:16:14
Add support for the new ACLs to setfacl(1).
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/bin/setfacl/merge.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/bin/setfacl/remove.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/bin/setfacl/setfacl.c#3 edit
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/bin/setfacl/merge.c#2 (text+ko) ====
@@ -42,6 +42,8 @@
merge_user_group(acl_entry_t *entry, acl_entry_t *entry_new)
{
acl_permset_t permset;
+ acl_extended_t extended;
+ acl_flag_t flags;
int have_entry;
uid_t *id, *id_new;
@@ -59,6 +61,18 @@
err(1, "acl_get_permset() failed");
if (acl_set_permset(*entry_new, permset) == -1)
err(1, "acl_set_permset() failed");
+
+ if (acl_type == ACL_TYPE_NFS4) {
+ if (acl_get_extended_np(*entry, &extended))
+ err(1, "acl_get_extended_np() failed");
+ if (acl_set_extended_np(*entry_new, extended))
+ err(1, "acl_set_extended_np() failed");
+ if (acl_get_flags_np(*entry, &flags))
+ err(1, "acl_get_flags_np() failed");
+ if (acl_set_flags_np(*entry_new, flags))
+ err(1, "acl_set_flags_np() failed");
+ }
+
have_entry = 1;
}
acl_free(id);
@@ -77,9 +91,11 @@
acl_permset_t permset;
acl_t acl_new;
acl_tag_t tag, tag_new;
+ acl_extended_t extended, extended_new;
+ acl_flag_t flags;
int entry_id, entry_id_new, have_entry;
- if (acl_type == ACL_TYPE_ACCESS)
+ if (acl_type == ACL_TYPE_ACCESS || acl_type == ACL_TYPE_NFS4)
acl_new = acl_dup(prev_acl[ACCESS_ACL]);
else
acl_new = acl_dup(prev_acl[DEFAULT_ACL]);
@@ -111,6 +127,19 @@
if (tag != tag_new)
continue;
+ /*
+ * For NFS4, in addition to "tag" and "id" we also
+ * compare "extended".
+ */
+ if (acl_type == ACL_TYPE_NFS4) {
+ if (acl_get_extended_np(entry, &extended))
+ err(1, "acl_get_extended_np() failed");
+ if (acl_get_extended_np(entry_new, &extended_new))
+ err(1, "acl_get_extended_np() failed");
+ if (extended != extended_new)
+ continue;
+ }
+
switch(tag) {
case ACL_USER:
case ACL_GROUP:
@@ -123,10 +152,22 @@
case ACL_GROUP_OBJ:
case ACL_OTHER:
case ACL_MASK:
+ case ACL_EVERYONE:
if (acl_get_permset(entry, &permset) == -1)
err(1, "acl_get_permset() failed");
if (acl_set_permset(entry_new, permset) == -1)
err(1, "acl_set_permset() failed");
+
+ if (acl_type == ACL_TYPE_NFS4) {
+ if (acl_get_extended_np(entry, &extended))
+ err(1, "acl_get_extended_np() failed");
+ if (acl_set_extended_np(entry_new, extended))
+ err(1, "acl_set_extended_np() failed");
+ if (acl_get_flags_np(entry, &flags))
+ err(1, "acl_get_flags_np() failed");
+ if (acl_set_flags_np(entry_new, flags))
+ err(1, "acl_set_flags_np() failed");
+ }
have_entry = 1;
break;
default:
@@ -138,16 +179,29 @@
/* if this entry has not been found, it must be new */
if (have_entry == 0) {
- if (acl_create_entry(&acl_new, &entry_new) == -1) {
- acl_free(acl_new);
- return (-1);
+
+ /*
+ * NFS4 ACL entries must be prepended to the ACL.
+ * Appending them at the end makes no sense, since
+ * in most cases they wouldn't even get evaluated.
+ */
+ if (acl_type == ACL_TYPE_NFS4) {
+ if (acl_create_entry_at_position_np(&acl_new, &entry_new, 0) == -1) {
+ acl_free(acl_new);
+ return (-1);
+ }
+ } else {
+ if (acl_create_entry(&acl_new, &entry_new) == -1) {
+ acl_free(acl_new);
+ return (-1);
+ }
}
if (acl_copy_entry(entry_new, entry) == -1)
err(1, "acl_copy_entry() failed");
}
}
- if (acl_type == ACL_TYPE_ACCESS) {
+ if (acl_type == ACL_TYPE_ACCESS || acl_type == ACL_TYPE_NFS4) {
acl_free(prev_acl[ACCESS_ACL]);
prev_acl[ACCESS_ACL] = acl_new;
} else {
==== //depot/projects/soc2008/trasz_nfs4acl/bin/setfacl/remove.c#2 (text+ko) ====
@@ -50,7 +50,7 @@
carried_error = 0;
- if (acl_type == ACL_TYPE_ACCESS)
+ if (acl_type == ACL_TYPE_ACCESS || acl_type == ACL_TYPE_NFS4)
acl_new = acl_dup(prev_acl[ACCESS_ACL]);
else
acl_new = acl_dup(prev_acl[DEFAULT_ACL]);
@@ -73,7 +73,7 @@
}
}
- if (acl_type == ACL_TYPE_ACCESS) {
+ if (acl_type == ACL_TYPE_ACCESS || acl_type == ACL_TYPE_NFS4) {
acl_free(prev_acl[ACCESS_ACL]);
prev_acl[ACCESS_ACL] = acl_new;
} else {
@@ -113,64 +113,17 @@
remove_ext(acl_t *prev_acl)
{
acl_t acl_new, acl_old;
- acl_entry_t entry, entry_new;
- acl_permset_t perm;
- acl_tag_t tag;
- int entry_id, have_mask_entry;
- if (acl_type == ACL_TYPE_ACCESS)
- acl_old = acl_dup(prev_acl[ACCESS_ACL]);
+ if (acl_type == ACL_TYPE_ACCESS || acl_type == ACL_TYPE_NFS4)
+ acl_old = prev_acl[ACCESS_ACL];
else
- acl_old = acl_dup(prev_acl[DEFAULT_ACL]);
- if (acl_old == NULL)
- err(1, "acl_dup() failed");
+ acl_old = prev_acl[DEFAULT_ACL];
- have_mask_entry = 0;
- acl_new = acl_init(ACL_MAX_ENTRIES);
+ acl_new = acl_strip_np(acl_old, !n_flag);
if (acl_new == NULL)
- err(1, "acl_init() failed");
- tag = ACL_UNDEFINED_TAG;
+ err(1, "acl_strip_np() failed");
- /* only save the default user/group/other entries */
- entry_id = ACL_FIRST_ENTRY;
- while (acl_get_entry(acl_old, entry_id, &entry) == 1) {
- entry_id = ACL_NEXT_ENTRY;
-
- if (acl_get_tag_type(entry, &tag) == -1)
- err(1, "acl_get_tag_type() failed");
-
- switch(tag) {
- case ACL_USER_OBJ:
- case ACL_GROUP_OBJ:
- case ACL_OTHER:
- if (acl_get_tag_type(entry, &tag) == -1)
- err(1, "acl_get_tag_type() failed");
- if (acl_get_permset(entry, &perm) == -1)
- err(1, "acl_get_permset() failed");
- if (acl_create_entry(&acl_new, &entry_new) == -1)
- err(1, "acl_create_entry() failed");
- if (acl_set_tag_type(entry_new, tag) == -1)
- err(1, "acl_set_tag_type() failed");
- if (acl_set_permset(entry_new, perm) == -1)
- err(1, "acl_get_permset() failed");
- if (acl_copy_entry(entry_new, entry) == -1)
- err(1, "acl_copy_entry() failed");
- break;
- case ACL_MASK:
- have_mask_entry = 1;
- break;
- default:
- break;
- }
- }
- if (have_mask_entry && n_flag == 0) {
- if (acl_calc_mask(&acl_new) == -1)
- err(1, "acl_calc_mask() failed");
- } else {
- have_mask = 1;
- }
-
- if (acl_type == ACL_TYPE_ACCESS) {
+ if (acl_type == ACL_TYPE_ACCESS || acl_type == ACL_TYPE_NFS4) {
acl_free(prev_acl[ACCESS_ACL]);
prev_acl[ACCESS_ACL] = acl_new;
} else {
==== //depot/projects/soc2008/trasz_nfs4acl/bin/setfacl/setfacl.c#3 (text+ko) ====
@@ -64,20 +64,26 @@
{
acl_t *acl;
struct stat sb;
+ int type;
if (stat(filename, &sb) == -1) {
warn("stat() of %s failed", filename);
return (NULL);
}
+ if (pathconf(filename, _PC_EXTENDED_SECURITY_NP))
+ type = ACL_TYPE_NFS4;
+ else
+ type = ACL_TYPE_ACCESS;
+
acl = zmalloc(sizeof(acl_t) * 2);
if (h_flag)
- acl[ACCESS_ACL] = acl_get_link_np(filename, ACL_TYPE_ACCESS);
+ acl[ACCESS_ACL] = acl_get_link_np(filename, type);
else
- acl[ACCESS_ACL] = acl_get_file(filename, ACL_TYPE_ACCESS);
+ acl[ACCESS_ACL] = acl_get_file(filename, type);
if (acl[ACCESS_ACL] == NULL)
err(1, "acl_get_file() failed");
- if (S_ISDIR(sb.st_mode)) {
+ if (S_ISDIR(sb.st_mode) && type != ACL_TYPE_NFS4) {
if (h_flag)
acl[DEFAULT_ACL] = acl_get_link_np(filename,
ACL_TYPE_DEFAULT);
@@ -210,6 +216,11 @@
local_error = 0;
+ if (acl_type != ACL_TYPE_DEFAULT && pathconf(file->filename, _PC_EXTENDED_SECURITY_NP))
+ acl_type = ACL_TYPE_NFS4;
+ else
+ acl_type = ACL_TYPE_ACCESS;
+
/* cycle through each option */
TAILQ_FOREACH(entry, &entrylist, next) {
if (local_error)
@@ -245,11 +256,14 @@
continue;
}
- if (acl_type == ACL_TYPE_ACCESS)
+ if (acl_type == ACL_TYPE_ACCESS || acl_type == ACL_TYPE_NFS4)
final_acl = acl[ACCESS_ACL];
else
final_acl = acl[DEFAULT_ACL];
+ if (acl_type == ACL_TYPE_NFS4)
+ need_mask = 0;
+
if (need_mask && (set_acl_mask(&final_acl) == -1)) {
warnx("failed to set ACL mask on %s", file->filename);
carried_error++;
From trasz at FreeBSD.org Wed Jul 2 12:12:50 2008
From: trasz at FreeBSD.org (Edward Tomasz Napierala)
Date: Wed Jul 2 12:12:52 2008
Subject: PERFORCE change 144482 for review
Message-ID: <200807021212.m62CCnWW021201@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144482
Change 144482 by trasz@trasz_traszkan on 2008/07/02 12:12:47
Keep the list sorted.
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Makefile.inc#3 edit
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Makefile.inc#3 (text+ko) ====
@@ -2,7 +2,8 @@
.PATH: ${.CURDIR}/posix1e
-SRCS+= acl_calc_mask.c \
+SRCS+= acl_branding.c \
+ acl_calc_mask.c \
acl_copy.c \
acl_delete.c \
acl_delete_entry.c \
@@ -15,12 +16,10 @@
acl_init.c \
acl_perm.c \
acl_set.c \
+ acl_strip.c \
acl_support.c \
- acl_branding.c \
- acl_strip.c \
acl_to_text.c \
acl_to_text_nfs4.c \
- acl_strip.c \
acl_valid.c \
extattr.c \
mac.c \
From gabor at FreeBSD.org Wed Jul 2 14:30:08 2008
From: gabor at FreeBSD.org (Gabor Kovesdan)
Date: Wed Jul 2 14:30:17 2008
Subject: PERFORCE change 144485 for review
Message-ID: <200807021430.m62EU7xG044262@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144485
Change 144485 by gabor@gabor_server on 2008/07/02 14:29:53
- Fix handling of binary files
- The fixed routine supports multibyte characters
Affected files ...
.. //depot/projects/soc2008/gabor_textproc/diff/diffreg.c#4 edit
Differences ...
==== //depot/projects/soc2008/gabor_textproc/diff/diffreg.c#4 (text+ko) ====
@@ -86,6 +86,8 @@
#include
#include
#include
+#include
+#include
#include "diff.h"
#include "pathnames.h"
@@ -1280,17 +1282,22 @@
static int
asciifile(FILE *f)
{
- char buf[BUFSIZ];
- int i, cnt;
+ wint_t ch = L'\0';
+ size_t i;
if (aflag || f == NULL)
return (1);
rewind(f);
- cnt = fread(buf, 1, sizeof(buf), f);
- for (i = 0; i < cnt; i++)
- if (!isprint(buf[i]) && !isspace(buf[i]))
+ for (i = 0; i <= BUFSIZ; i++) {
+ if ((ch = fgetwc(f)) == WEOF) {
+ if (errno == EILSEQ)
+ return (0);
+ break;
+ }
+ if (!iswspace(ch) && iswcntrl(ch))
return (0);
+ }
return (1);
}
From gabor at FreeBSD.org Wed Jul 2 14:48:26 2008
From: gabor at FreeBSD.org (Gabor Kovesdan)
Date: Wed Jul 2 14:48:31 2008
Subject: PERFORCE change 144486 for review
Message-ID: <200807021448.m62EmPUk046059@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144486
Change 144486 by gabor@gabor_server on 2008/07/02 14:47:44
- Reset errno before calling fgetwc
Affected files ...
.. //depot/projects/soc2008/gabor_textproc/diff/diffreg.c#5 edit
Differences ...
==== //depot/projects/soc2008/gabor_textproc/diff/diffreg.c#5 (text+ko) ====
@@ -1289,6 +1289,7 @@
return (1);
rewind(f);
+ errno = 0;
for (i = 0; i <= BUFSIZ; i++) {
if ((ch = fgetwc(f)) == WEOF) {
if (errno == EILSEQ)
From gabor at FreeBSD.org Wed Jul 2 14:49:28 2008
From: gabor at FreeBSD.org (Gabor Kovesdan)
Date: Wed Jul 2 14:49:32 2008
Subject: PERFORCE change 144487 for review
Message-ID: <200807021449.m62EnRf4046127@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144487
Change 144487 by gabor@gabor_server on 2008/07/02 14:48:36
- Reset errno before calling fgetwc
Affected files ...
.. //depot/projects/soc2008/gabor_textproc/grep/file.c#13 edit
Differences ...
==== //depot/projects/soc2008/gabor_textproc/grep/file.c#13 (text+ko) ====
@@ -66,6 +66,7 @@
if (fseek(f->f, 0L, SEEK_SET) == -1)
return (0);
+ errno = 0;
for (i = 0; i <= BUFSIZ; i++) {
if ((ch = fgetwc(f->f)) == WEOF) {
if (errno == EILSEQ)
From gabor at FreeBSD.org Wed Jul 2 14:53:32 2008
From: gabor at FreeBSD.org (Gabor Kovesdan)
Date: Wed Jul 2 14:53:38 2008
Subject: PERFORCE change 144488 for review
Message-ID: <200807021453.m62ErVFN046506@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144488
Change 144488 by gabor@gabor_server on 2008/07/02 14:52:50
- Remove false comment
Affected files ...
.. //depot/projects/soc2008/gabor_textproc/diff/diff.c#5 edit
Differences ...
==== //depot/projects/soc2008/gabor_textproc/diff/diff.c#5 (text+ko) ====
@@ -76,7 +76,6 @@
/* XXX: UNIMPLEMENTED
{ "ignore-blank-lines", no_argument, NULL, 'B' }, */
{ "ignore-space-change", no_argument, NULL, 'b' },
-/* XXX: -c is incompatible with GNU version */
{ "context", optional_argument, NULL, 'C' },
{ "ifdef", required_argument, NULL, 'D' },
{ "minimal", no_argument, NULL, 'd' },
@@ -100,7 +99,6 @@
{ "report-identical-files", no_argument, NULL, 's' },
{ "initial-tab", no_argument, NULL, 'T' },
{ "expand-tabs", no_argument, NULL, 't' },
-/* XXX: -u is incompatible with GNU version */
{ "unified", optional_argument, NULL, 'U' },
{ "version", no_argument, NULL, 'v' },
/* XXX: UNIMPLEMENTED
From trasz at FreeBSD.org Wed Jul 2 14:53:32 2008
From: trasz at FreeBSD.org (Edward Tomasz Napierala)
Date: Wed Jul 2 14:53:38 2008
Subject: PERFORCE change 144489 for review
Message-ID: <200807021453.m62ErV0t046511@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144489
Change 144489 by trasz@trasz_traszkan on 2008/07/02 14:53:26
Clarify comments.
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/subr_acl_nfs4.c#2 edit
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/sys/kern/subr_acl_nfs4.c#2 (text+ko) ====
@@ -265,7 +265,7 @@
aclp->acl_magic = ACL_MAGIC;
/*
- * NFSv4 Minor Version 1
+ * NFSv4 Minor Version 1, draft-ietf-nfsv4-minorversion1-03.txt
*
* 3.16.6.3. Applying a Mode to an Existing ACL
*/
@@ -605,7 +605,7 @@
const struct acl_entry *entry;
/*
- * NFSv4 Minor Version 1
+ * NFSv4 Minor Version 1, draft-ietf-nfsv4-minorversion1-03.txt
*
* 3.16.6.1. Recomputing mode upon SETATTR of ACL
*/
@@ -740,7 +740,7 @@
KASSERT(child_aclp->acl_cnt == 0, "child_aclp->acl_cnt == 0");
/*
- * NFSv4 Minor Version 1
+ * NFSv4 Minor Version 1, draft-ietf-nfsv4-minorversion1-03.txt
*
* 3.16.6.2. Applying the mode given to CREATE or OPEN
* to an inherited ACL
From gabor at FreeBSD.org Wed Jul 2 14:59:38 2008
From: gabor at FreeBSD.org (Gabor Kovesdan)
Date: Wed Jul 2 14:59:40 2008
Subject: PERFORCE change 144490 for review
Message-ID: <200807021459.m62ExbNZ047040@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144490
Change 144490 by gabor@gabor_server on 2008/07/02 14:59:18
- -Add --help
Affected files ...
.. //depot/projects/soc2008/gabor_textproc/diff/diff.c#6 edit
Differences ...
==== //depot/projects/soc2008/gabor_textproc/diff/diff.c#6 (text+ko) ====
@@ -53,6 +53,10 @@
struct excludes *excludes_list;
regex_t ignore_re;
+enum {
+ HELP_OPT = CHAR_MAX + 1
+};
+
#define OPTIONS "0123456789abC:cdD:efhI:iL:lnNPpqrS:sTtU:uvwX:x:"
static struct option longopts[] = {
/* XXX: UNIMPLEMENTED
@@ -70,8 +74,8 @@
{ "from-file", required_argument, NULL, OPT_FFILE },
{ "to-file", required_argument, NULL, OPT_TOFILE },
{ "horizon-lines", required_argument, NULL, OPT_HLINES },
- { "speed-large-files", no_argument, NULL, OPT_LFILES },
- { "help", no_argument, NULL, OPT_HELP }, */
+ { "speed-large-files", no_argument, NULL, OPT_LFILES }, */
+ { "help", no_argument, NULL, HELP_OPT },
{ "text", no_argument, NULL, 'a' },
/* XXX: UNIMPLEMENTED
{ "ignore-blank-lines", no_argument, NULL, 'B' }, */
@@ -243,6 +247,7 @@
case 'x':
push_excludes(optarg);
break;
+ case HELP_OPT:
default:
usage();
break;
From gabor at FreeBSD.org Wed Jul 2 15:10:49 2008
From: gabor at FreeBSD.org (Gabor Kovesdan)
Date: Wed Jul 2 15:10:51 2008
Subject: PERFORCE change 144491 for review
Message-ID: <200807021510.m62FAn3S049049@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144491
Change 144491 by gabor@gabor_server on 2008/07/02 15:10:37
- Add --normal
Affected files ...
.. //depot/projects/soc2008/gabor_textproc/diff/diff.c#7 edit
Differences ...
==== //depot/projects/soc2008/gabor_textproc/diff/diff.c#7 (text+ko) ====
@@ -54,7 +54,8 @@
regex_t ignore_re;
enum {
- HELP_OPT = CHAR_MAX + 1
+ HELP_OPT = CHAR_MAX + 1,
+ NORMAL_OPT
};
#define OPTIONS "0123456789abC:cdD:efhI:iL:lnNPpqrS:sTtU:uvwX:x:"
@@ -62,8 +63,9 @@
/* XXX: UNIMPLEMENTED
{ "ignore-file-name-case", no_argument, NULL, OPT_IGN_FN_CASE },
{ "no-ignore-file-name-case", no_argument, NULL, OPT_NIGN_FN_CASE },
- { "strip-trailing-cr", no_argument, NULL, OPT_STRIPCR },
- { "normal", no_argument, NULL, OPT_NORMAL },
+ { "strip-trailing-cr", no_argument, NULL, OPT_STRIPCR }, */
+ { "normal", no_argument, NULL, NORMAL_OPT },
+/* XXX: UNIMPLEMENTED
{ "left-column", no_argument, NULL, OPT_LEFTC },
{ "suppress-common-lines", no_argument, NULL, OT_SUPCL },
{ "GTYPE-group-format", required_argument, NULL, OPT_GTYPE },
@@ -247,6 +249,9 @@
case 'x':
push_excludes(optarg);
break;
+ case NORMAL_OPT:
+ /* compatibility, this is the default */
+ break;
case HELP_OPT:
default:
usage();
From andenore at FreeBSD.org Wed Jul 2 17:41:57 2008
From: andenore at FreeBSD.org (Anders Nore)
Date: Wed Jul 2 17:42:00 2008
Subject: PERFORCE change 144499 for review
Message-ID: <200807021741.m62HfuWN074750@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144499
Change 144499 by andenore@andenore_laptop on 2008/07/02 17:41:54
A lot of small fixes and merging. I think everything works with what
I've done so far.
Affected files ...
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/CHANGES#5 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/Makefile#3 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/Makefile.inc#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/add/main.c#4 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/add/perform.c#4 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/add/pkg_add.1#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/convert/main.c#3 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/create/create.h#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/create/main.c#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/create/perform.c#4 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/create/pkg_create.1#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/delete/main.c#4 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/delete/perform.c#4 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/delete/pkg_delete.1#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/info/Makefile#5 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/info/info.h#2 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/info/main.c#6 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/info/perform.c#5 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/info/pkg_info.1#3 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/lib/database.c#6 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/lib/file.c#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/lib/lib.h#7 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/lib/match.c#5 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/lib/plist.c#4 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/lib/url.c#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/updating/main.c#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/updating/pkg_updating.1#2 integrate
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/version/main.c#5 edit
.. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/version/pkg_version.1#2 integrate
Differences ...
==== //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/CHANGES#5 (text+ko) ====
@@ -4,6 +4,7 @@
Converter:
- Added convert program that indexes information to PKG_DBCACHE_FILE
+ - Added some features to lookup keys and print them (or print whole db)
Info:
- Improved performance for -W option using the dbcache
@@ -20,7 +21,7 @@
- Deindexes information according to the delete
Lib:
- - Changed methods in match.c to use cache if available
+ - Changed methods in match.c to use cache if available (matchallbyorigin, ispkginstalled)
- Added global variable 'database' of type DB* (the database object)
- Added database helper functions
- Added function to cache a Packagelist (cache_plist())
==== //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/Makefile#3 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/usr.sbin/pkg_install/Makefile,v 1.22 2008/04/09 15:08:31 flz Exp $
+# $FreeBSD: src/usr.sbin/pkg_install/Makefile,v 1.25 2008/06/16 09:15:27 flz Exp $
.include
@@ -6,18 +6,15 @@
.include
-CP= /bin/cp
-RM= /bin/rm
-TAR= /usr/bin/tar
-
-DATE!= date +%Y%m%d
+DATE!= grep PKG_INSTALL_VERSION ${.CURDIR}/lib/lib.h | sed 's|.*[ ]||'
distfile: clean
@(cd ${.CURDIR}/..; \
- ${CP} -r pkg_install pkg_install-${DATE}; \
- ${TAR} -czf pkg_install/pkg_install-${DATE}.tar.gz \
+ cp -r pkg_install pkg_install-${DATE}; \
+ tar -czf pkg_install/pkg_install-${DATE}.tar.gz \
--exclude .#* --exclude *~ --exclude CVS \
- --exclude pkg_install-*.tar.gz pkg_install-${DATE}; \
- ${RM} -rf pkg_install-${DATE})
+ --exclude .svn --exclude pkg_install-*.tar.gz \
+ pkg_install-${DATE}; \
+ rm -rf pkg_install-${DATE})
==== //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/Makefile.inc#2 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/usr.sbin/pkg_install/Makefile.inc,v 1.14 2006/03/17 18:54:42 ru Exp $
+# $FreeBSD: src/usr.sbin/pkg_install/Makefile.inc,v 1.16 2008/05/03 23:17:37 pav Exp $
.include
@@ -11,4 +11,4 @@
.endif
# Inherit BINDIR from one level up.
-.include "../Makefile.inc"
+#.include "../Makefile.inc"
==== //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/add/main.c#4 (text+ko) ====
@@ -19,16 +19,16 @@
*/
#include
-__FBSDID("$FreeBSD: src/usr.sbin/pkg_install/add/main.c,v 1.76 2008/02/26 14:35:01 kensmith Exp $");
+__FBSDID("$FreeBSD: src/usr.sbin/pkg_install/add/main.c,v 1.78 2008/06/16 23:41:11 flz Exp $");
-#include
#include
#include
+#include
+#include
+
#include "lib.h"
#include "add.h"
-static char Options[] = "hviIRfFnrp:P:SMt:C:K";
-
char *Prefix = NULL;
Boolean PrefixRecursive = FALSE;
char *Chroot = NULL;
@@ -95,246 +95,257 @@
static void usage(void);
+static char opts[] = "hviIRfFnrp:P:SMt:C:K";
+static struct option longopts[] = {
+ { "chroot", required_argument, NULL, 'C' },
+ { "dry-run", no_argument, NULL, 'n' },
+ { "force", no_argument, NULL, 'f' },
+ { "help", no_argument, NULL, 'h' },
+ { "keep", no_argument, NULL, 'K' },
+ { "master", no_argument, NULL, 'M' },
+ { "no-deps", no_argument, NULL, 'i' },
+ { "no-record", no_argument, NULL, 'R' },
+ { "no-script", no_argument, NULL, 'I' },
+ { "prefix", required_argument, NULL, 'p' },
+ { "remote", no_argument, NULL, 'r' },
+ { "template", required_argument, NULL, 't' },
+ { "slave", no_argument, NULL, 'S' },
+ { "verbose", no_argument, NULL, 'v' },
+ { NULL, 0, NULL, 0 }
+};
+
int
main(int argc, char **argv)
{
- int ch, error;
- char **start;
- char *cp, *packagesite = NULL, *remotepkg = NULL, *ptr;
- static char temppackageroot[MAXPATHLEN];
- static char pkgaddpath[MAXPATHLEN];
+ int ch, error;
+ char **start;
+ char *cp, *packagesite = NULL, *remotepkg = NULL, *ptr;
+ static char temppackageroot[MAXPATHLEN];
+ static char pkgaddpath[MAXPATHLEN];
+
+ if (*argv[0] != '/' && strchr(argv[0], '/') != NULL)
+ PkgAddCmd = realpath(argv[0], pkgaddpath);
+ else
+ PkgAddCmd = argv[0];
+
+ openDatabase(O_CREAT | O_RDWR);
+ atexit(closeDatabase);
+
+ start = argv;
+ while ((ch = getopt_long(argc, argv, opts, longopts, NULL)) != -1) {
+ switch(ch) {
+ case 'v':
+ Verbose++;
+ break;
+
+ case 'p':
+ Prefix = optarg;
+ PrefixRecursive = FALSE;
+ break;
+
+ case 'P':
+ Prefix = optarg;
+ PrefixRecursive = TRUE;
+ break;
+
+ case 'I':
+ NoInstall = TRUE;
+ break;
+
+ case 'R':
+ NoRecord = TRUE;
+ break;
+
+ case 'f':
+ Force = TRUE;
+ break;
+
+ case 'F':
+ FailOnAlreadyInstalled = FALSE;
+ break;
+
+ case 'K':
+ KeepPackage = TRUE;
+ break;
+
+ case 'n':
+ Fake = TRUE;
+ break;
+
+ case 'r':
+ Remote = TRUE;
+ break;
+
+ case 't':
+ if (strlcpy(FirstPen, optarg, sizeof(FirstPen)) >= sizeof(FirstPen))
+ errx(1, "-t Argument too long.");
+ break;
+
+ case 'S':
+ AddMode = SLAVE;
+ break;
+
+ case 'M':
+ AddMode = MASTER;
+ break;
- if (*argv[0] != '/' && strchr(argv[0], '/') != NULL)
- PkgAddCmd = realpath(argv[0], pkgaddpath);
- else
- PkgAddCmd = argv[0];
+ case 'C':
+ Chroot = optarg;
+ break;
- if(cacheExists()) {
- printf("add.main(): cacheExists()\n");
- openDatabase();
- }
+ case 'i':
+ IgnoreDeps = TRUE;
+ break;
- start = argv;
- while ((ch = getopt(argc, argv, Options)) != -1) {
- switch(ch) {
- case 'v':
- Verbose++;
- break;
-
- case 'p':
- Prefix = optarg;
- PrefixRecursive = FALSE;
- break;
-
- case 'P':
- Prefix = optarg;
- PrefixRecursive = TRUE;
- break;
-
- case 'I':
- NoInstall = TRUE;
- break;
-
- case 'R':
- NoRecord = TRUE;
- break;
-
- case 'f':
- Force = TRUE;
- break;
-
- case 'F':
- FailOnAlreadyInstalled = FALSE;
- break;
-
- case 'K':
- KeepPackage = TRUE;
- break;
-
- case 'n':
- Fake = TRUE;
- break;
-
- case 'r':
- Remote = TRUE;
- break;
-
- case 't':
- if (strlcpy(FirstPen, optarg, sizeof(FirstPen)) >= sizeof(FirstPen))
- errx(1, "-t Argument too long.");
- break;
-
- case 'S':
- AddMode = SLAVE;
- break;
-
- case 'M':
- AddMode = MASTER;
- break;
-
- case 'C':
- Chroot = optarg;
- break;
- case 'i':
- IgnoreDeps = TRUE;
- break;
-
- case 'h':
- case '?':
- default:
- usage();
- break;
- }
+ case 'h':
+ default:
+ usage();
+ break;
}
- argc -= optind;
- argv += optind;
+ }
+ argc -= optind;
+ argv += optind;
- if (AddMode != SLAVE) {
- pkgs = (char **)malloc((argc+1) * sizeof(char *));
- for (ch = 0; ch <= argc; pkgs[ch++] = NULL) ;
+ if (AddMode != SLAVE) {
+ pkgs = (char **)malloc((argc+1) * sizeof(char *));
+ for (ch = 0; ch <= argc; pkgs[ch++] = NULL) ;
- /* Get all the remaining package names, if any */
- for (ch = 0; *argv; ch++, argv++) {
- char temp[MAXPATHLEN];
- if (Remote) {
- if ((packagesite = getpackagesite()) == NULL)
- errx(1, "package name too long");
- if (strlcpy(temppackageroot, packagesite,
- sizeof(temppackageroot)) >= sizeof(temppackageroot))
- errx(1, "package name too long");
- if (strlcat(temppackageroot, *argv, sizeof(temppackageroot))
- >= sizeof(temppackageroot))
- errx(1, "package name too long");
- remotepkg = temppackageroot;
- if (!((ptr = strrchr(remotepkg, '.')) && ptr[1] == 't' &&
- (ptr[2] == 'b' || ptr[2] == 'g') && ptr[3] == 'z' &&
- !ptr[4]))
- if (strlcat(remotepkg,
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 500039
- ".tbz",
-#else
- ".tgz",
-#endif
- sizeof(temppackageroot)) >= sizeof(temppackageroot))
- errx(1, "package name too long");
+ /* Get all the remaining package names, if any */
+ for (ch = 0; *argv; ch++, argv++) {
+ char temp[MAXPATHLEN];
+ if (Remote) {
+ if ((packagesite = getpackagesite()) == NULL)
+ errx(1, "package name too long");
+ if (strlcpy(temppackageroot, packagesite,
+ sizeof(temppackageroot)) >= sizeof(temppackageroot))
+ errx(1, "package name too long");
+ if (strlcat(temppackageroot, *argv, sizeof(temppackageroot))
+ >= sizeof(temppackageroot))
+ errx(1, "package name too long");
+ remotepkg = temppackageroot;
+ if (!((ptr = strrchr(remotepkg, '.')) && ptr[1] == 't' &&
+ (ptr[2] == 'b' || ptr[2] == 'g') && ptr[3] == 'z' &&
+ !ptr[4]))
+ if (strlcat(remotepkg, ".tbz",
+ sizeof(temppackageroot)) >= sizeof(temppackageroot))
+ errx(1, "package name too long");
}
- if (!strcmp(*argv, "-")) /* stdin? */
- pkgs[ch] = (char *)"-";
- else if (isURL(*argv)) { /* preserve URLs */
- if (strlcpy(temp, *argv, sizeof(temp)) >= sizeof(temp))
- errx(1, "package name too long");
- pkgs[ch] = strdup(temp);
- }
- else if ((Remote) && isURL(remotepkg)) {
- if (strlcpy(temp, remotepkg, sizeof(temp)) >= sizeof(temp))
- errx(1, "package name too long");
- pkgs[ch] = strdup(temp);
- } else { /* expand all pathnames to fullnames */
- if (fexists(*argv)) /* refers to a file directly */
- pkgs[ch] = strdup(realpath(*argv, temp));
- else { /* look for the file in the expected places */
- if (!(cp = fileFindByPath(NULL, *argv))) {
- /* let pkg_do() fail later, so that error is reported */
- if (strlcpy(temp, *argv, sizeof(temp)) >= sizeof(temp))
- errx(1, "package name too long");
- pkgs[ch] = strdup(temp);
- } else {
- if (strlcpy(temp, cp, sizeof(temp)) >= sizeof(temp))
- errx(1, "package name too long");
- pkgs[ch] = strdup(temp);
- }
- }
- }
- if (packagesite != NULL)
- packagesite[0] = '\0';
+ if (!strcmp(*argv, "-")) /* stdin? */
+ pkgs[ch] = (char *)"-";
+ else if (isURL(*argv)) { /* preserve URLs */
+ if (strlcpy(temp, *argv, sizeof(temp)) >= sizeof(temp))
+ errx(1, "package name too long");
+ pkgs[ch] = strdup(temp);
+ }
+ else if ((Remote) && isURL(remotepkg)) {
+ if (strlcpy(temp, remotepkg, sizeof(temp)) >= sizeof(temp))
+ errx(1, "package name too long");
+ pkgs[ch] = strdup(temp);
+ } else { /* expand all pathnames to fullnames */
+ if (fexists(*argv)) /* refers to a file directly */
+ pkgs[ch] = strdup(realpath(*argv, temp));
+ else { /* look for the file in the expected places */
+ if (!(cp = fileFindByPath(NULL, *argv))) {
+ /* let pkg_do() fail later, so that error is reported */
+ if (strlcpy(temp, *argv, sizeof(temp)) >= sizeof(temp))
+ errx(1, "package name too long");
+ pkgs[ch] = strdup(temp);
+ } else {
+ if (strlcpy(temp, cp, sizeof(temp)) >= sizeof(temp))
+ errx(1, "package name too long");
+ pkgs[ch] = strdup(temp);
+ }
}
+ }
+ if (packagesite != NULL)
+ packagesite[0] = '\0';
}
-
- /* If no packages, yelp */
- else if (!ch) {
- warnx("missing package name(s)");
- usage();
- }
- else if (ch > 1 && AddMode == MASTER) {
- warnx("only one package name may be specified with master mode");
- usage();
- }
-
- /* Perform chroot if requested */
- if (Chroot != NULL) {
- if (chroot(Chroot))
- errx(1, "chroot to %s failed", Chroot);
- }
- /* Make sure the sub-execs we invoke get found */
- setenv("PATH",
- "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin",
- 1);
+ }
+ /* If no packages, yelp */
+ else if (!ch) {
+ warnx("missing package name(s)");
+ usage();
+ }
+ else if (ch > 1 && AddMode == MASTER) {
+ warnx("only one package name may be specified with master mode");
+ usage();
+ }
+ /* Perform chroot if requested */
+ if (Chroot != NULL) {
+ if (chroot(Chroot))
+ errx(1, "chroot to %s failed", Chroot);
+ }
+ /* Make sure the sub-execs we invoke get found */
+ setenv("PATH",
+ "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin",
+ 1);
- /* Set a reasonable umask */
- umask(022);
+ /* Set a reasonable umask */
+ umask(022);
- if ((error = pkg_perform(pkgs)) != 0) {
- if (Verbose)
- warnx("%d package addition(s) failed", error);
- return error;
- }
- else
- return 0;
+ if ((error = pkg_perform(pkgs)) != 0) {
+ if (Verbose)
+ warnx("%d package addition(s) failed", error);
+ return error;
+ }
+ else
+ return 0;
}
static char *
getpackagesite(void)
{
- int reldate, i;
- static char sitepath[MAXPATHLEN];
- struct utsname u;
+ int reldate, i;
+ static char sitepath[MAXPATHLEN];
+ struct utsname u;
+
+ if (getenv("PACKAGESITE")) {
+ if (strlcpy(sitepath, getenv("PACKAGESITE"), sizeof(sitepath))
+ >= sizeof(sitepath))
+ return NULL;
+ return sitepath;
+ }
+
+ if (getenv("PACKAGEROOT")) {
+ if (strlcpy(sitepath, getenv("PACKAGEROOT"), sizeof(sitepath))
+ >= sizeof(sitepath))
+ return NULL;
+ } else {
+ if (strlcat(sitepath, "ftp://ftp.freebsd.org", sizeof(sitepath))
+ >= sizeof(sitepath))
+ return NULL;
+ }
- if (getenv("PACKAGESITE")) {
- if (strlcpy(sitepath, getenv("PACKAGESITE"), sizeof(sitepath))
- >= sizeof(sitepath))
- return NULL;
- return sitepath;
- }
+ if (strlcat(sitepath, "/pub/FreeBSD/ports/", sizeof(sitepath))
+ >= sizeof(sitepath))
+ return NULL;
- if (getenv("PACKAGEROOT")) {
- if (strlcpy(sitepath, getenv("PACKAGEROOT"), sizeof(sitepath))
- >= sizeof(sitepath))
- return NULL;
- } else {
- if (strlcat(sitepath, "ftp://ftp.freebsd.org", sizeof(sitepath))
- >= sizeof(sitepath))
- return NULL;
- }
+ uname(&u);
+ if (strlcat(sitepath, u.machine, sizeof(sitepath)) >= sizeof(sitepath))
+ return NULL;
- if (strlcat(sitepath, "/pub/FreeBSD/ports/", sizeof(sitepath))
+ reldate = getosreldate();
+ for(i = 0; releases[i].directory != NULL; i++) {
+ if (reldate >= releases[i].lowver && reldate <= releases[i].hiver) {
+ if (strlcat(sitepath, releases[i].directory, sizeof(sitepath))
>= sizeof(sitepath))
- return NULL;
-
- uname(&u);
- if (strlcat(sitepath, u.machine, sizeof(sitepath)) >= sizeof(sitepath))
return NULL;
+ break;
+ }
+ }
- reldate = getosreldate();
- for(i = 0; releases[i].directory != NULL; i++) {
- if (reldate >= releases[i].lowver && reldate <= releases[i].hiver) {
- if (strlcat(sitepath, releases[i].directory, sizeof(sitepath))
- >= sizeof(sitepath))
- return NULL;
- break;
- }
- }
+ if (strlcat(sitepath, "/Latest/", sizeof(sitepath)) >= sizeof(sitepath))
+ return NULL;
- if (strlcat(sitepath, "/Latest/", sizeof(sitepath)) >= sizeof(sitepath))
- return NULL;
+ return sitepath;
- return sitepath;
}
static void
usage()
{
- fprintf(stderr, "%s\n%s\n",
+ fprintf(stderr, "%s\n%s\n",
"usage: pkg_add [-viInfFrRMSK] [-t template] [-p prefix] [-P prefix] [-C chrootdir]",
" pkg-name [pkg-name ...]");
- exit(1);
+ exit(1);
}
==== //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/add/perform.c#4 (text+ko) ====
@@ -19,7 +19,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/usr.sbin/pkg_install/add/perform.c,v 1.83 2008/04/11 08:26:06 pav Exp $");
+__FBSDID("$FreeBSD: src/usr.sbin/pkg_install/add/perform.c,v 1.86 2008/06/16 23:41:11 flz Exp $");
#include
#include
@@ -29,6 +29,7 @@
#include
#include
#include
+#include
static int pkg_do(char *);
static int sanity_check(char *);
@@ -38,18 +39,18 @@
int
pkg_perform(char **pkgs)
{
- int i, err_cnt = 0;
+ int i, err_cnt = 0;
- signal(SIGINT, cleanup);
- signal(SIGHUP, cleanup);
+ signal(SIGINT, cleanup);
+ signal(SIGHUP, cleanup);
- if (AddMode == SLAVE)
- err_cnt = pkg_do(NULL);
- else {
- for (i = 0; pkgs[i]; i++)
- err_cnt += pkg_do(pkgs[i]);
- }
- return err_cnt;
+ if (AddMode == SLAVE)
+ err_cnt = pkg_do(NULL);
+ else {
+ for (i = 0; pkgs[i]; i++)
+ err_cnt += pkg_do(pkgs[i]);
+ }
+ return err_cnt;
}
static Package Plist;
@@ -63,678 +64,643 @@
static int
pkg_do(char *pkg)
{
- char pkg_fullname[FILENAME_MAX];
- char playpen[FILENAME_MAX];
- char extract_contents[FILENAME_MAX];
- char *where_to, *extract;
- FILE *cfile;
- int code;
- PackingList p;
- struct stat sb;
- int inPlace, conflictsfound, errcode;
- /* support for separate pre/post install scripts */
- int new_m = 0;
- char pre_script[FILENAME_MAX] = INSTALL_FNAME;
- char post_script[FILENAME_MAX];
- char pre_arg[FILENAME_MAX], post_arg[FILENAME_MAX];
- char *conflict[2];
- char **matched;
+ char pkg_fullname[FILENAME_MAX];
+ char playpen[FILENAME_MAX];
+ char extract_contents[FILENAME_MAX];
+ char *where_to, *extract;
+ FILE *cfile;
+ int code;
+ PackingList p;
+ struct stat sb;
+ int inPlace, conflictsfound, errcode;
+ /* support for separate pre/post install scripts */
+ int new_m = 0;
+ char pre_script[FILENAME_MAX] = INSTALL_FNAME;
+ char post_script[FILENAME_MAX];
+ char pre_arg[FILENAME_MAX], post_arg[FILENAME_MAX];
+ char *conflict[2];
+ char **matched;
- conflictsfound = 0;
- code = 0;
- zapLogDir = 0;
- LogDir[0] = '\0';
- strcpy(playpen, FirstPen);
- inPlace = 0;
+ conflictsfound = 0;
+ code = 0;
+ zapLogDir = 0;
+ LogDir[0] = '\0';
+ strcpy(playpen, FirstPen);
+ inPlace = 0;
- /* Are we coming in for a second pass, everything already extracted? */
- if (!pkg) {
- fgets(playpen, FILENAME_MAX, stdin);
- playpen[strlen(playpen) - 1] = '\0'; /* pesky newline! */
- if (chdir(playpen) == FAIL) {
- warnx("pkg_add in SLAVE mode can't chdir to %s", playpen);
- return 1;
- }
- read_plist(&Plist, stdin);
- where_to = playpen;
+ /* Are we coming in for a second pass, everything already extracted? */
+ if (!pkg) {
+ fgets(playpen, FILENAME_MAX, stdin);
+ playpen[strlen(playpen) - 1] = '\0'; /* pesky newline! */
+ if (chdir(playpen) == FAIL) {
+ warnx("pkg_add in SLAVE mode can't chdir to %s", playpen);
+ return 1;
+ }
+ read_plist(&Plist, stdin);
+ where_to = playpen;
+ }
+ /* Nope - do it now */
+ else {
+ /* Is it an ftp://foo.bar.baz/file.t[bg]z specification? */
+ if (isURL(pkg)) {
+ if (!(Home = fileGetURL(NULL, pkg, KeepPackage))) {
+ warnx("unable to fetch '%s' by URL", pkg);
+ return 1;
+ }
+ where_to = Home;
+ strcpy(pkg_fullname, pkg);
+ cfile = fopen(CONTENTS_FNAME, "r");
+ if (!cfile) {
+ warnx(
+ "unable to open table of contents file '%s' - not a package?",
+ CONTENTS_FNAME);
+ goto bomb;
+ }
+ read_plist(&Plist, cfile);
+ fclose(cfile);
}
- /* Nope - do it now */
else {
- /* Is it an ftp://foo.bar.baz/file.t[bg]z specification? */
- if (isURL(pkg)) {
- if (!(Home = fileGetURL(NULL, pkg, KeepPackage))) {
- warnx("unable to fetch '%s' by URL", pkg);
- return 1;
- }
- where_to = Home;
- strcpy(pkg_fullname, pkg);
- cfile = fopen(CONTENTS_FNAME, "r");
- if (!cfile) {
- warnx(
- "unable to open table of contents file '%s' - not a package?",
- CONTENTS_FNAME);
-
- goto bomb;
- }
- read_plist(&Plist, cfile);
- fclose(cfile);
+ strcpy(pkg_fullname, pkg); /*
+ * Copy for sanity's sake,
+ * could remove pkg_fullname
+ */
+ if (strcmp(pkg, "-")) {
+ if (stat(pkg_fullname, &sb) == FAIL) {
+ warnx("can't stat package file '%s'", pkg_fullname);
+ goto bomb;
}
- else {
- strcpy(pkg_fullname, pkg); /*
- * Copy for sanity's sake,
- * could remove pkg_fullname
- */
- if (strcmp(pkg, "-")) {
- if (stat(pkg_fullname, &sb) == FAIL) {
- warnx("can't stat package file '%s'", pkg_fullname);
- goto bomb;
- }
- sprintf(extract_contents, "--fast-read %s", CONTENTS_FNAME);
- extract = extract_contents;
- }
- else {
- extract = NULL;
- sb.st_size = 100000; /* Make up a plausible average size */
- }
-
- Home = make_playpen(playpen, sb.st_size * 4);
- if (!Home)
- errx(1, "unable to make playpen for %lld bytes", (long long)sb.st_size * 4);
-
- where_to = Home;
- /* Since we can call ourselves recursively, keep notes on where we came from */
- if (!getenv("_TOP"))
- setenv("_TOP", Home, 1);
-
- if (unpack(pkg_fullname, extract)) {
- warnx(
- "unable to extract table of contents file from '%s' - not a package?",
+ sprintf(extract_contents, "--fast-read %s", CONTENTS_FNAME);
+ extract = extract_contents;
+ }
+ else {
+ extract = NULL;
+ sb.st_size = 100000; /* Make up a plausible average size */
+ }
+ Home = make_playpen(playpen, sb.st_size * 4);
+ if (!Home)
+ errx(1, "unable to make playpen for %lld bytes", (long long)sb.st_size * 4);
+ where_to = Home;
+ /* Since we can call ourselves recursively, keep notes on where we came from */
+ if (!getenv("_TOP"))
+ setenv("_TOP", Home, 1);
+ if (unpack(pkg_fullname, extract)) {
+ warnx(
+ "unable to extract table of contents file from '%s' - not a package?",
pkg_fullname);
- goto bomb;
- }
-
- cfile = fopen(CONTENTS_FNAME, "r");
- if (!cfile) {
- warnx(
- "unable to open table of contents file '%s' - not a package?",
- CONTENTS_FNAME);
- goto bomb;
- }
- read_plist(&Plist, cfile);
- fclose(cfile);
+ goto bomb;
+ }
+ cfile = fopen(CONTENTS_FNAME, "r");
+ if (!cfile) {
+ warnx(
+ "unable to open table of contents file '%s' - not a package?",
+ CONTENTS_FNAME);
+ goto bomb;
+ }
+ read_plist(&Plist, cfile);
+ fclose(cfile);
- /* Extract directly rather than moving? Oh goodie! */
- if (find_plist_option(&Plist, "extract-in-place")) {
- if (Verbose)
- printf("Doing in-place extraction for %s\n", pkg_fullname);
-
- p = find_plist(&Plist, PLIST_CWD);
- if (p) {
- if (!isdir(p->name) && !Fake) {
- if (Verbose)
- printf("Desired prefix of %s does not exist, creating..\n", p->name);
- vsystem("/bin/mkdir -p %s", p->name);
- if (chdir(p->name) == -1) {
- warn("unable to change directory to '%s'", p->name);
- goto bomb;
- }
- }
- where_to = p->name;
- inPlace = 1;
- }
- else {
- warnx(
- "no prefix specified in '%s' - this is a bad package!",
- pkg_fullname);
- goto bomb;
- }
+ /* Extract directly rather than moving? Oh goodie! */
+ if (find_plist_option(&Plist, "extract-in-place")) {
+ if (Verbose)
+ printf("Doing in-place extraction for %s\n", pkg_fullname);
+ p = find_plist(&Plist, PLIST_CWD);
+ if (p) {
+ if (!isdir(p->name) && !Fake) {
+ if (Verbose)
+ printf("Desired prefix of %s does not exist, creating..\n", p->name);
+ vsystem("/bin/mkdir -p %s", p->name);
+ if (chdir(p->name) == -1) {
+ warn("unable to change directory to '%s'", p->name);
+ goto bomb;
}
+ }
+ where_to = p->name;
+ inPlace = 1;
+ }
+ else {
+ warnx(
+ "no prefix specified in '%s' - this is a bad package!",
+ pkg_fullname);
+ goto bomb;
+ }
+ }
- /*
- * Apply a crude heuristic to see how much space the package will
- * take up once it's unpacked. I've noticed that most packages
- * compress an average of 75%, so multiply by 4 for good measure.
- */
+ /*
+ * Apply a crude heuristic to see how much space the package will
+ * take up once it's unpacked. I've noticed that most packages
+ * compress an average of 75%, so multiply by 4 for good measure.
+ */
- if (!extract && !inPlace && min_free(playpen) < sb.st_size * 4) {
- warnx("projected size of %lld exceeds available free space.\n"
- "Please set your PKG_TMPDIR variable to point to a location with more\n"
- "free space and try again", (long long)sb.st_size * 4);
- warnx("not extracting %s\ninto %s, sorry!",
- pkg_fullname, where_to);
- goto bomb;
+ if (!extract && !inPlace && min_free(playpen) < sb.st_size * 4) {
+ warnx("projected size of %lld exceeds available free space.\n"
+"Please set your PKG_TMPDIR variable to point to a location with more\n"
+ "free space and try again", (long long)sb.st_size * 4);
+ warnx("not extracting %s\ninto %s, sorry!",
+ pkg_fullname, where_to);
+ goto bomb;
}
/* If this is a direct extract and we didn't want it, stop now */
- if (inPlace && Fake)
- goto success;
+ if (inPlace && Fake)
+ goto success;
- /* Finally unpack the whole mess. If extract is null we
- already + did so so don't bother doing it again. */
- if (extract && unpack(pkg_fullname, NULL)) {
- warnx("unable to extract '%s'!", pkg_fullname);
- goto bomb;
- }
+ /* Finally unpack the whole mess. If extract is null we
+ already + did so so don't bother doing it again. */
+ if (extract && unpack(pkg_fullname, NULL)) {
+ warnx("unable to extract '%s'!", pkg_fullname);
+ goto bomb;
+ }
}
- /* Check for sanity and dependencies */
- if (sanity_check(pkg))
- goto bomb;
-
- /* If we're running in MASTER mode, just output the plist and return */
- if (AddMode == MASTER) {
- printf("%s\n", where_playpen());
- write_plist(&Plist, stdout);
- return 0;
- }
+ /* Check for sanity and dependencies */
+ if (sanity_check(pkg))
+ goto bomb;
+
+ /* If we're running in MASTER mode, just output the plist and return */
+ if (AddMode == MASTER) {
+ printf("%s\n", where_playpen());
+ write_plist(&Plist, stdout);
+ return 0;
}
+ }
/*
* If we have a prefix, delete the first one we see and add this
* one in place of it.
*/
- if (Prefix) {
- delete_plist(&Plist, FALSE, PLIST_CWD, NULL);
- add_plist_top(&Plist, PLIST_CWD, Prefix);
- }
+ if (Prefix) {
+ delete_plist(&Plist, FALSE, PLIST_CWD, NULL);
+ add_plist_top(&Plist, PLIST_CWD, Prefix);
+ }
- setenv(PKG_PREFIX_VNAME, (p = find_plist(&Plist, PLIST_CWD)) ? p->name : ".", 1);
- /* Protect against old packages with bogus @name and origin fields */
- if (Plist.name == NULL)
- Plist.name = "anonymous";
-
- if (Plist.origin == NULL)
- Plist.origin = "anonymous/anonymous";
+ setenv(PKG_PREFIX_VNAME, (p = find_plist(&Plist, PLIST_CWD)) ? p->name : ".", 1);
+ /* Protect against old packages with bogus @name and origin fields */
+ if (Plist.name == NULL)
+ Plist.name = "anonymous";
+ if (Plist.origin == NULL)
+ Plist.origin = "anonymous/anonymous";
- /*
- * See if we're already registered either with the same name (the same
- * version) or some other version with the same origin.
- */
- if ((isinstalledpkg(Plist.name) > 0 ||
+ /*
+ * See if we're already registered either with the same name (the same
+ * version) or some other version with the same origin.
+ */
+ if ((isinstalledpkg(Plist.name) > 0 ||
matchbyorigin(Plist.origin, NULL) != NULL) && !Force) {
- warnx("package '%s' or its older version already installed%s",
- Plist.name, FailOnAlreadyInstalled ? "" : " (ignored)");
- code = FailOnAlreadyInstalled != FALSE;
- goto success; /* close enough for government work */
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From hselasky at FreeBSD.org Wed Jul 2 19:06:48 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Wed Jul 2 19:06:52 2008
Subject: PERFORCE change 144502 for review
Message-ID: <200807021906.m62J6l3H083820@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144502
Change 144502 by hselasky@hselasky_laptop001 on 2008/07/02 19:05:48
Renaming symbols and fixing the device ID tables
is complete for the new USB serial module.
Some minor stuff has been fixed in "ulpt" driver.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.h#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/uark2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/ubsa2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/ubser2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/uchcom2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/ucycom2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/ufoma2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/uftdi2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/ugensa2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/uipaq2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/ulpt2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/umct2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/umodem2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/umoscom2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/uplcom2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/usb2_serial.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/usb2_serial.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/uvisor2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/serial/uvscom2.c#2 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#8 (text+ko) ====
@@ -1511,10 +1511,18 @@
usb2_fifo_opened(struct usb2_fifo *f)
{
uint8_t temp;
+ uint8_t do_unlock;
- mtx_lock(f->priv_mtx);
+ if (mtx_owned(f->priv_mtx)) {
+ do_unlock = 0;
+ } else {
+ do_unlock = 1;
+ mtx_lock(f->priv_mtx);
+ }
temp = f->curr_file ? 1 : 0;
- mtx_unlock(f->priv_mtx);
+ if (do_unlock) {
+ mtx_unlock(f->priv_mtx);
+ }
return (temp);
}
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.h#4 (text+ko) ====
@@ -94,6 +94,7 @@
uint8_t iface_index; /* set to the interface we belong to */
uint8_t fifo_index; /* set to the FIFO index in "struct
* usb2_device" */
+ uint8_t fifo_zlp; /* zero length packet count */
uint8_t refcount;
#define USB_FIFO_REF_MAX 0xFF
};
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.c#4 (text+ko) ====
@@ -97,7 +97,7 @@
static int ugen_debug = 0;
SYSCTL_NODE(_hw_usb2, OID_AUTO, ugen, CTLFLAG_RW, 0, "USB generic");
-SYSCTL_INT(_hw_usb2_ugen, OID_AUTO, ugen, CTLFLAG_RW, &ugen_debug,
+SYSCTL_INT(_hw_usb2_ugen, OID_AUTO, debug, CTLFLAG_RW, &ugen_debug,
0, "Debug level");
#endif
@@ -164,6 +164,7 @@
}
f->timeout = USB_NO_TIMEOUT;
f->flag_short = 0;
+ f->fifo_zlp = 0;
mtx_unlock(f->priv_mtx);
return (0);
@@ -372,6 +373,21 @@
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
+ if (xfer->actlen == 0) {
+ if (f->fifo_zlp != 4) {
+ f->fifo_zlp++;
+ } else {
+ /*
+ * Throttle a little bit we have multiple ZLPs
+ * in a row!
+ */
+ xfer->interval = 64; /* ms */
+ }
+ } else {
+ /* clear throttle */
+ xfer->interval = 0;
+ f->fifo_zlp = 0;
+ }
usb2_fifo_put_data(f, xfer->frbuffers, 0,
xfer->actlen, 1);
@@ -390,6 +406,7 @@
default: /* Error */
if (xfer->error != USB_ERR_CANCELLED) {
f->flag_stall = 1;
+ f->fifo_zlp = 0;
usb2_transfer_start(f->xfer[1]);
}
break;
==== //depot/projects/usb/src/sys/dev/usb2/serial/uark2.c#2 (text+ko) ====
@@ -23,23 +23,24 @@
* be called from within the config thread function !
*/
-#include
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
-#include
-#include
-#include
+#define USB_DEBUG_VAR usb2_debug
-#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
-#include "usbdevs.h"
+#include
-#define DPRINTF(...) do { } while (0)
-
#define UARK_BUF_SIZE 1024 /* bytes */
#define UARK_N_TRANSFER 4 /* units */
@@ -64,11 +65,11 @@
#define UARK_IFACE_INDEX 0
struct uark_softc {
- struct ucom_super_softc sc_super_ucom;
- struct ucom_softc sc_ucom;
+ struct usb2_com_super_softc sc_super_ucom;
+ struct usb2_com_softc sc_ucom;
- struct usbd_xfer *sc_xfer[UARK_N_TRANSFER];
- struct usbd_device *sc_udev;
+ struct usb2_xfer *sc_xfer[UARK_N_TRANSFER];
+ struct usb2_device *sc_udev;
uint8_t sc_flags;
#define UARK_FLAG_BULK_READ_STALL 0x01
@@ -83,23 +84,23 @@
static device_attach_t uark_attach;
static device_detach_t uark_detach;
-static usbd_callback_t uark_bulk_write_callback;
-static usbd_callback_t uark_bulk_write_clear_stall_callback;
-static usbd_callback_t uark_bulk_read_callback;
-static usbd_callback_t uark_bulk_read_clear_stall_callback;
+static usb2_callback_t uark_bulk_write_callback;
+static usb2_callback_t uark_bulk_write_clear_stall_callback;
+static usb2_callback_t uark_bulk_read_callback;
+static usb2_callback_t uark_bulk_read_clear_stall_callback;
-static void uark_start_read(struct ucom_softc *ucom);
-static void uark_stop_read(struct ucom_softc *ucom);
-static void uark_start_write(struct ucom_softc *ucom);
-static void uark_stop_write(struct ucom_softc *ucom);
+static void uark_start_read(struct usb2_com_softc *ucom);
+static void uark_stop_read(struct usb2_com_softc *ucom);
+static void uark_start_write(struct usb2_com_softc *ucom);
+static void uark_stop_write(struct usb2_com_softc *ucom);
-static int uark_pre_param(struct ucom_softc *ucom, struct termios *t);
-static void uark_cfg_param(struct ucom_softc *ucom, struct termios *t);
-static void uark_cfg_get_status(struct ucom_softc *ucom, uint8_t *lsr, uint8_t *msr);
-static void uark_cfg_set_break(struct ucom_softc *ucom, uint8_t onoff);
+static int uark_pre_param(struct usb2_com_softc *ucom, struct termios *t);
+static void uark_cfg_param(struct usb2_com_softc *ucom, struct termios *t);
+static void uark_cfg_get_status(struct usb2_com_softc *ucom, uint8_t *lsr, uint8_t *msr);
+static void uark_cfg_set_break(struct usb2_com_softc *ucom, uint8_t onoff);
static void uark_cfg_write(struct uark_softc *sc, uint16_t index, uint16_t value);
-static const struct usbd_config
+static const struct usb2_config
uark_xfer_config[UARK_N_TRANSFER] = {
[0] = {
@@ -124,7 +125,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.flags = {},
.mh.callback = &uark_bulk_write_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
@@ -135,7 +136,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.flags = {},
.mh.callback = &uark_bulk_read_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
@@ -143,15 +144,15 @@
},
};
-static const struct ucom_callback uark_callback = {
- .ucom_cfg_get_status = &uark_cfg_get_status,
- .ucom_cfg_set_break = &uark_cfg_set_break,
- .ucom_cfg_param = &uark_cfg_param,
- .ucom_pre_param = &uark_pre_param,
- .ucom_start_read = &uark_start_read,
- .ucom_stop_read = &uark_stop_read,
- .ucom_start_write = &uark_start_write,
- .ucom_stop_write = &uark_stop_write,
+static const struct usb2_com_callback uark_callback = {
+ .usb2_com_cfg_get_status = &uark_cfg_get_status,
+ .usb2_com_cfg_set_break = &uark_cfg_set_break,
+ .usb2_com_cfg_param = &uark_cfg_param,
+ .usb2_com_pre_param = &uark_pre_param,
+ .usb2_com_start_read = &uark_start_read,
+ .usb2_com_stop_read = &uark_stop_read,
+ .usb2_com_start_write = &uark_start_write,
+ .usb2_com_stop_write = &uark_stop_write,
};
static device_method_t uark_methods[] = {
@@ -170,35 +171,35 @@
.size = sizeof(struct uark_softc),
};
-DRIVER_MODULE(uark, uhub, uark_driver, uark_devclass, usbd_driver_load, 0);
-MODULE_DEPEND(uark, usb, 1, 1, 1);
+DRIVER_MODULE(uark, ushub, uark_driver, uark_devclass, NULL, 0);
+MODULE_DEPEND(uark, usb2_core, 1, 1, 1);
MODULE_DEPEND(uark, ucom, UCOM_MINVER, UCOM_PREFVER, UCOM_MAXVER);
-static const struct usb_devno uark_devs[] = {
- {USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116},
+static const struct usb2_device_id uark_devs[] = {
+ {USB_VPI(USB_VENDOR_ARKMICRO, USB_PRODUCT_ARKMICRO_ARK3116, 0)},
};
-#define uark_lookup(v, p) usb_lookup(uark_devs, v, p)
-
static int
uark_probe(device_t dev)
{
- struct usb_attach_arg *uaa = device_get_ivars(dev);
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
- if (uaa->usb_mode != USB_MODE_HOST) {
- return (UMATCH_NONE);
+ if (uaa->usb2_mode != USB_MODE_HOST) {
+ return (ENXIO);
+ }
+ if (uaa->info.bConfigIndex != 0) {
+ return (ENXIO);
}
- if (uaa->iface) {
- return (UMATCH_NONE);
+ if (uaa->info.bIfaceIndex != UARK_IFACE_INDEX) {
+ return (ENXIO);
}
- return (uark_lookup(uaa->vendor, uaa->product) ?
- UMATCH_VENDOR_PRODUCT : UMATCH_NONE);
+ return (usb2_lookup_id_by_uaa(uark_devs, sizeof(uark_devs), uaa));
}
static int
uark_attach(device_t dev)
{
- struct usb_attach_arg *uaa = device_get_ivars(dev);
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
struct uark_softc *sc = device_get_softc(dev);
int32_t error;
uint8_t iface_index;
@@ -206,19 +207,12 @@
if (sc == NULL) {
return (ENOMEM);
}
- usbd_set_device_desc(dev);
+ device_set_usb2_desc(dev);
sc->sc_udev = uaa->device;
- /* Move the device into the configured state */
- error = usbd_set_config_index(uaa->device, UARK_CONFIG_INDEX, 1);
- if (error) {
- device_printf(dev, "failed to set configuration, err=%s\n",
- usbd_errstr(error));
- goto detach;
- }
iface_index = UARK_IFACE_INDEX;
- error = usbd_transfer_setup
+ error = usb2_transfer_setup
(uaa->device, &iface_index, sc->sc_xfer,
uark_xfer_config, UARK_N_TRANSFER, sc, &Giant);
@@ -231,10 +225,10 @@
sc->sc_flags |= (UARK_FLAG_BULK_WRITE_STALL |
UARK_FLAG_BULK_READ_STALL);
- error = ucom_attach(&(sc->sc_super_ucom), &(sc->sc_ucom), 1, sc,
+ error = usb2_com_attach(&(sc->sc_super_ucom), &(sc->sc_ucom), 1, sc,
&uark_callback, &Giant);
if (error) {
- DPRINTF(sc, 0, "ucom_attach failed\n");
+ DPRINTF(0, "usb2_com_attach failed\n");
goto detach;
}
return (0); /* success */
@@ -249,37 +243,37 @@
{
struct uark_softc *sc = device_get_softc(dev);
- ucom_detach(&(sc->sc_super_ucom), &(sc->sc_ucom), 1);
+ usb2_com_detach(&(sc->sc_super_ucom), &(sc->sc_ucom), 1);
- usbd_transfer_unsetup(sc->sc_xfer, UARK_N_TRANSFER);
+ usb2_transfer_unsetup(sc->sc_xfer, UARK_N_TRANSFER);
return (0);
}
static void
-uark_bulk_write_callback(struct usbd_xfer *xfer)
+uark_bulk_write_callback(struct usb2_xfer *xfer)
{
struct uark_softc *sc = xfer->priv_sc;
uint32_t actlen;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_SETUP:
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_SETUP:
+ case USB_ST_TRANSFERRED:
if (sc->sc_flags & UARK_FLAG_BULK_WRITE_STALL) {
- usbd_transfer_start(sc->sc_xfer[2]);
+ usb2_transfer_start(sc->sc_xfer[2]);
return;
}
- if (ucom_get_data(&(sc->sc_ucom), xfer->frbuffers, 0,
+ if (usb2_com_get_data(&(sc->sc_ucom), xfer->frbuffers, 0,
UARK_BUF_SIZE, &actlen)) {
xfer->frlengths[0] = actlen;
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
}
return;
default: /* Error */
- if (xfer->error != USBD_ERR_CANCELLED) {
+ if (xfer->error != USB_ERR_CANCELLED) {
sc->sc_flags |= UARK_FLAG_BULK_WRITE_STALL;
- usbd_transfer_start(sc->sc_xfer[2]);
+ usb2_transfer_start(sc->sc_xfer[2]);
}
return;
@@ -287,42 +281,42 @@
}
static void
-uark_bulk_write_clear_stall_callback(struct usbd_xfer *xfer)
+uark_bulk_write_clear_stall_callback(struct usb2_xfer *xfer)
{
struct uark_softc *sc = xfer->priv_sc;
- struct usbd_xfer *xfer_other = sc->sc_xfer[0];
+ struct usb2_xfer *xfer_other = sc->sc_xfer[0];
- if (usbd_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF(sc, 0, "stall cleared\n");
+ if (usb2_clear_stall_callback(xfer, xfer_other)) {
+ DPRINTF(0, "stall cleared\n");
sc->sc_flags &= ~UARK_FLAG_BULK_WRITE_STALL;
- usbd_transfer_start(xfer_other);
+ usb2_transfer_start(xfer_other);
}
return;
}
static void
-uark_bulk_read_callback(struct usbd_xfer *xfer)
+uark_bulk_read_callback(struct usb2_xfer *xfer)
{
struct uark_softc *sc = xfer->priv_sc;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
- ucom_put_data(&(sc->sc_ucom), xfer->frbuffers, 0,
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
+ usb2_com_put_data(&(sc->sc_ucom), xfer->frbuffers, 0,
xfer->actlen);
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
if (sc->sc_flags & UARK_FLAG_BULK_READ_STALL) {
- usbd_transfer_start(sc->sc_xfer[3]);
+ usb2_transfer_start(sc->sc_xfer[3]);
} else {
xfer->frlengths[0] = xfer->max_data_length;
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
}
return;
default: /* Error */
- if (xfer->error != USBD_ERR_CANCELLED) {
+ if (xfer->error != USB_ERR_CANCELLED) {
sc->sc_flags |= UARK_FLAG_BULK_READ_STALL;
- usbd_transfer_start(sc->sc_xfer[3]);
+ usb2_transfer_start(sc->sc_xfer[3]);
}
return;
@@ -330,59 +324,59 @@
}
static void
-uark_bulk_read_clear_stall_callback(struct usbd_xfer *xfer)
+uark_bulk_read_clear_stall_callback(struct usb2_xfer *xfer)
{
struct uark_softc *sc = xfer->priv_sc;
- struct usbd_xfer *xfer_other = sc->sc_xfer[1];
+ struct usb2_xfer *xfer_other = sc->sc_xfer[1];
- if (usbd_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF(sc, 0, "stall cleared\n");
+ if (usb2_clear_stall_callback(xfer, xfer_other)) {
+ DPRINTF(0, "stall cleared\n");
sc->sc_flags &= ~UARK_FLAG_BULK_READ_STALL;
- usbd_transfer_start(xfer_other);
+ usb2_transfer_start(xfer_other);
}
return;
}
static void
-uark_start_read(struct ucom_softc *ucom)
+uark_start_read(struct usb2_com_softc *ucom)
{
struct uark_softc *sc = ucom->sc_parent;
- usbd_transfer_start(sc->sc_xfer[1]);
+ usb2_transfer_start(sc->sc_xfer[1]);
return;
}
static void
-uark_stop_read(struct ucom_softc *ucom)
+uark_stop_read(struct usb2_com_softc *ucom)
{
struct uark_softc *sc = ucom->sc_parent;
- usbd_transfer_stop(sc->sc_xfer[3]);
- usbd_transfer_stop(sc->sc_xfer[1]);
+ usb2_transfer_stop(sc->sc_xfer[3]);
+ usb2_transfer_stop(sc->sc_xfer[1]);
return;
}
static void
-uark_start_write(struct ucom_softc *ucom)
+uark_start_write(struct usb2_com_softc *ucom)
{
struct uark_softc *sc = ucom->sc_parent;
- usbd_transfer_start(sc->sc_xfer[0]);
+ usb2_transfer_start(sc->sc_xfer[0]);
return;
}
static void
-uark_stop_write(struct ucom_softc *ucom)
+uark_stop_write(struct usb2_com_softc *ucom)
{
struct uark_softc *sc = ucom->sc_parent;
- usbd_transfer_stop(sc->sc_xfer[2]);
- usbd_transfer_stop(sc->sc_xfer[0]);
+ usb2_transfer_stop(sc->sc_xfer[2]);
+ usb2_transfer_stop(sc->sc_xfer[0]);
return;
}
static int
-uark_pre_param(struct ucom_softc *ucom, struct termios *t)
+uark_pre_param(struct usb2_com_softc *ucom, struct termios *t)
{
if ((t->c_ospeed < 300) || (t->c_ospeed > 115200))
return (EINVAL);
@@ -390,7 +384,7 @@
}
static void
-uark_cfg_param(struct ucom_softc *ucom, struct termios *t)
+uark_cfg_param(struct usb2_com_softc *ucom, struct termios *t)
{
struct uark_softc *sc = ucom->sc_parent;
uint32_t speed = t->c_ospeed;
@@ -441,7 +435,7 @@
}
static void
-uark_cfg_get_status(struct ucom_softc *ucom, uint8_t *lsr, uint8_t *msr)
+uark_cfg_get_status(struct usb2_com_softc *ucom, uint8_t *lsr, uint8_t *msr)
{
struct uark_softc *sc = ucom->sc_parent;
@@ -451,11 +445,11 @@
}
static void
-uark_cfg_set_break(struct ucom_softc *ucom, uint8_t onoff)
+uark_cfg_set_break(struct usb2_com_softc *ucom, uint8_t onoff)
{
struct uark_softc *sc = ucom->sc_parent;
- DPRINTF(sc, 0, "onoff=%d\n", onoff);
+ DPRINTF(0, "onoff=%d\n", onoff);
uark_cfg_write(sc, 4, onoff ? 0x01 : 0x00);
return;
@@ -464,10 +458,10 @@
static void
uark_cfg_write(struct uark_softc *sc, uint16_t index, uint16_t value)
{
- usb_device_request_t req;
- usbd_status_t err;
+ struct usb2_device_request req;
+ usb2_error_t err;
- if (ucom_cfg_is_gone(&(sc->sc_ucom))) {
+ if (usb2_com_cfg_is_gone(&(sc->sc_ucom))) {
return;
}
req.bmRequestType = UARK_WRITE;
@@ -476,12 +470,12 @@
USETW(req.wIndex, index);
USETW(req.wLength, 0);
- err = usbd_do_request_flags
+ err = usb2_do_request_flags
(sc->sc_udev, &Giant, &req, NULL, 0, NULL, 1000);
if (err) {
- DPRINTF(sc, -1, "device request failed, err=%s "
- "(ignored)\n", usbd_errstr(err));
+ DPRINTF(-1, "device request failed, err=%s "
+ "(ignored)\n", usb2_errstr(err));
}
return;
}
==== //depot/projects/usb/src/sys/dev/usb2/serial/ubsa2.c#2 (text+ko) ====
@@ -62,34 +62,31 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
-#include
-#include
-#include
-#include
-#include
+#define USB_DEBUG_VAR ubsa_debug
-#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
-#include "usbdevs.h"
+#include
#ifdef USB_DEBUG
-#define DPRINTF(n,fmt,...) \
- do { if (ubsa_debug > (n)) { \
- printf("%s: " fmt, __FUNCTION__,## __VA_ARGS__); } } while (0)
-
static int ubsa_debug = 0;
-SYSCTL_NODE(_hw_usb, OID_AUTO, ubsa, CTLFLAG_RW, 0, "USB ubsa");
-SYSCTL_INT(_hw_usb_ubsa, OID_AUTO, debug, CTLFLAG_RW,
+SYSCTL_NODE(_hw_usb2, OID_AUTO, ubsa, CTLFLAG_RW, 0, "USB ubsa");
+SYSCTL_INT(_hw_usb2_ubsa, OID_AUTO, debug, CTLFLAG_RW,
&ubsa_debug, 0, "ubsa debug level");
-#else
-#define DPRINTF(...) do { } while (0)
#endif
#define UBSA_N_TRANSFER 6 /* units */
@@ -146,11 +143,11 @@
#define UBSA_MSR_DCTS 0x01 /* CTS has changed state */
struct ubsa_softc {
- struct ucom_super_softc sc_super_ucom;
- struct ucom_softc sc_ucom;
+ struct usb2_com_super_softc sc_super_ucom;
+ struct usb2_com_softc sc_ucom;
- struct usbd_xfer *sc_xfer[UBSA_N_TRANSFER];
- struct usbd_device *sc_udev;
+ struct usb2_xfer *sc_xfer[UBSA_N_TRANSFER];
+ struct usb2_device *sc_udev;
uint16_t sc_flag;
#define UBSA_FLAG_WRITE_STALL 0x0001
@@ -167,26 +164,26 @@
static device_attach_t ubsa_attach;
static device_detach_t ubsa_detach;
-static usbd_callback_t ubsa_write_callback;
-static usbd_callback_t ubsa_write_clear_stall_callback;
-static usbd_callback_t ubsa_read_callback;
-static usbd_callback_t ubsa_read_clear_stall_callback;
-static usbd_callback_t ubsa_intr_callback;
-static usbd_callback_t ubsa_intr_clear_stall_callback;
+static usb2_callback_t ubsa_write_callback;
+static usb2_callback_t ubsa_write_clear_stall_callback;
+static usb2_callback_t ubsa_read_callback;
+static usb2_callback_t ubsa_read_clear_stall_callback;
+static usb2_callback_t ubsa_intr_callback;
+static usb2_callback_t ubsa_intr_clear_stall_callback;
static void ubsa_cfg_request(struct ubsa_softc *sc, uint8_t index, uint16_t value);
-static void ubsa_cfg_set_dtr(struct ucom_softc *ucom, uint8_t onoff);
-static void ubsa_cfg_set_rts(struct ucom_softc *ucom, uint8_t onoff);
-static void ubsa_cfg_set_break(struct ucom_softc *ucom, uint8_t onoff);
-static int ubsa_pre_param(struct ucom_softc *ucom, struct termios *t);
-static void ubsa_cfg_param(struct ucom_softc *ucom, struct termios *t);
-static void ubsa_start_read(struct ucom_softc *ucom);
-static void ubsa_stop_read(struct ucom_softc *ucom);
-static void ubsa_start_write(struct ucom_softc *ucom);
-static void ubsa_stop_write(struct ucom_softc *ucom);
-static void ubsa_cfg_get_status(struct ucom_softc *ucom, uint8_t *lsr, uint8_t *msr);
+static void ubsa_cfg_set_dtr(struct usb2_com_softc *ucom, uint8_t onoff);
+static void ubsa_cfg_set_rts(struct usb2_com_softc *ucom, uint8_t onoff);
+static void ubsa_cfg_set_break(struct usb2_com_softc *ucom, uint8_t onoff);
+static int ubsa_pre_param(struct usb2_com_softc *ucom, struct termios *t);
+static void ubsa_cfg_param(struct usb2_com_softc *ucom, struct termios *t);
+static void ubsa_start_read(struct usb2_com_softc *ucom);
+static void ubsa_stop_read(struct usb2_com_softc *ucom);
+static void ubsa_start_write(struct usb2_com_softc *ucom);
+static void ubsa_stop_write(struct usb2_com_softc *ucom);
+static void ubsa_cfg_get_status(struct usb2_com_softc *ucom, uint8_t *lsr, uint8_t *msr);
-static const struct usbd_config ubsa_config[UBSA_N_TRANSFER] = {
+static const struct usb2_config ubsa_config[UBSA_N_TRANSFER] = {
[0] = {
.type = UE_BULK,
@@ -210,7 +207,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.callback = &ubsa_write_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
.mh.interval = 50, /* 50ms */
@@ -220,7 +217,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.callback = &ubsa_read_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
.mh.interval = 50, /* 50ms */
@@ -239,69 +236,63 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.callback = &ubsa_intr_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
.mh.interval = 50, /* 50ms */
},
};
-static const struct ucom_callback ubsa_callback = {
- .ucom_cfg_get_status = &ubsa_cfg_get_status,
- .ucom_cfg_set_dtr = &ubsa_cfg_set_dtr,
- .ucom_cfg_set_rts = &ubsa_cfg_set_rts,
- .ucom_cfg_set_break = &ubsa_cfg_set_break,
- .ucom_cfg_param = &ubsa_cfg_param,
- .ucom_pre_param = &ubsa_pre_param,
- .ucom_start_read = &ubsa_start_read,
- .ucom_stop_read = &ubsa_stop_read,
- .ucom_start_write = &ubsa_start_write,
- .ucom_stop_write = &ubsa_stop_write,
+static const struct usb2_com_callback ubsa_callback = {
+ .usb2_com_cfg_get_status = &ubsa_cfg_get_status,
+ .usb2_com_cfg_set_dtr = &ubsa_cfg_set_dtr,
+ .usb2_com_cfg_set_rts = &ubsa_cfg_set_rts,
+ .usb2_com_cfg_set_break = &ubsa_cfg_set_break,
+ .usb2_com_cfg_param = &ubsa_cfg_param,
+ .usb2_com_pre_param = &ubsa_pre_param,
+ .usb2_com_start_read = &ubsa_start_read,
+ .usb2_com_stop_read = &ubsa_stop_read,
+ .usb2_com_start_write = &ubsa_start_write,
+ .usb2_com_stop_write = &ubsa_stop_write,
};
-struct ubsa_product {
- uint16_t vendor;
- uint16_t product;
-};
-
-static const struct ubsa_product ubsa_products[] = {
+static const struct usb2_device_id ubsa_devs[] = {
/* AnyData ADU-500A */
- {USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_500A},
+ {USB_VPI(USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_500A, 0)},
/* AnyData ADU-E100A/H */
- {USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_E100X},
+ {USB_VPI(USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_E100X, 0)},
/* Axesstel MV100H */
- {USB_VENDOR_AXESSTEL, USB_PRODUCT_AXESSTEL_DATAMODEM},
+ {USB_VPI(USB_VENDOR_AXESSTEL, USB_PRODUCT_AXESSTEL_DATAMODEM, 0)},
/* BELKIN F5U103 */
- {USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U103},
+ {USB_VPI(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U103, 0)},
/* BELKIN F5U120 */
- {USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U120},
+ {USB_VPI(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U120, 0)},
/* GoHubs GO-COM232 */
- {USB_VENDOR_ETEK, USB_PRODUCT_ETEK_1COM},
+ {USB_VPI(USB_VENDOR_ETEK, USB_PRODUCT_ETEK_1COM, 0)},
/* GoHubs GO-COM232 */
- {USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232},
+ {USB_VPI(USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232, 0)},
/* Peracom */
- {USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1},
+ {USB_VPI(USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1, 0)},
/* Novatel Wireless Merlin cards */
- {USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U740},
+ {USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U740, 0)},
/* Dell version of the above */
- {USB_VENDOR_DELL, USB_PRODUCT_DELL_U740},
+ {USB_VPI(USB_VENDOR_DELL, USB_PRODUCT_DELL_U740, 0)},
/* Novatel Wireless Merlin v740 */
- {USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V740},
+ {USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V740, 0)},
/* Option Vodafone MC3G */
- {USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G},
+ {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G, 0)},
/* Option GlobeTrotter 3G */
- {USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3G},
+ {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3G, 0)},
/* Option GlobeTrotter 3G+ */
- {USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS},
+ {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS, 0)},
/* Option GlobeTrotter Max 3.6 */
- {USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAX36},
+ {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAX36, 0)},
/* Option GlobeTrotter 3G QUAD */
- {USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD},
+ {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD, 0)},
/* Huawei Mobile */
- {USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE},
+ {USB_VPI(USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE, 0)},
/* Qualcomm, Inc. ZTE CDMA */
- {USB_VENDOR_QUALCOMMINC, USB_PRODUCT_QUALCOMMINC_CDMA_MSM},
- {0, 0}
+ {USB_VPI(USB_VENDOR_QUALCOMMINC, USB_PRODUCT_QUALCOMMINC_CDMA_MSM, 0)},
};
static device_method_t ubsa_methods[] = {
@@ -319,39 +310,32 @@
.size = sizeof(struct ubsa_softc),
};
-DRIVER_MODULE(ubsa, uhub, ubsa_driver, ubsa_devclass, usbd_driver_load, 0);
-MODULE_DEPEND(ubsa, usb, 1, 1, 1);
+DRIVER_MODULE(ubsa, ushub, ubsa_driver, ubsa_devclass, NULL, 0);
+MODULE_DEPEND(ubsa, usb2_core, 1, 1, 1);
MODULE_DEPEND(ubsa, ucom, UCOM_MINVER, UCOM_PREFVER, UCOM_MAXVER);
static int
ubsa_probe(device_t dev)
{
- struct usb_attach_arg *uaa = device_get_ivars(dev);
- const struct ubsa_product *up = ubsa_products;
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
- if (uaa->usb_mode != USB_MODE_HOST) {
- return (UMATCH_NONE);
+ if (uaa->usb2_mode != USB_MODE_HOST) {
+ return (ENXIO);
}
- if (uaa->iface) {
- return (UMATCH_NONE);
+ if (uaa->info.bConfigIndex != UBSA_CONFIG_INDEX) {
+ return (ENXIO);
}
- while (up->vendor) {
- if ((up->vendor == uaa->vendor) &&
- (up->product == uaa->product)) {
- return (UMATCH_VENDOR_PRODUCT);
- }
- up++;
+ if (uaa->info.bIfaceIndex != UBSA_IFACE_INDEX) {
+ return (ENXIO);
}
- return (UMATCH_NONE);
+ return (usb2_lookup_id_by_uaa(ubsa_devs, sizeof(ubsa_devs), uaa));
}
static int
ubsa_attach(device_t dev)
{
- struct usb_attach_arg *uaa = device_get_ivars(dev);
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
struct ubsa_softc *sc = device_get_softc(dev);
- struct usbd_interface *iface;
- usb_interface_descriptor_t *id;
int error;
DPRINTF(0, "sc=%p\n", sc);
@@ -359,35 +343,13 @@
if (sc == NULL) {
return (ENOMEM);
}
- usbd_set_device_desc(dev);
+ device_set_usb2_desc(dev);
sc->sc_udev = uaa->device;
-
- /* configure the device */
-
- error = usbd_set_config_index(uaa->device, UBSA_CONFIG_INDEX, 1);
-
- if (error) {
- DPRINTF(0, "failed to set configuration, error=%s\n",
- usbd_errstr(error));
- goto detach;
- }
- iface = usbd_get_iface(uaa->device, UBSA_IFACE_INDEX);
-
- if (iface == NULL) {
- DPRINTF(0, "no interface\n");
- goto detach;
- }
- id = usbd_get_interface_descriptor(iface);
-
- if (id == NULL) {
- DPRINTF(0, "no interface descriptor\n");
- goto detach;
- }
- sc->sc_iface_no = id->bInterfaceNumber;
+ sc->sc_iface_no = uaa->info.bIfaceNum;
sc->sc_iface_index = UBSA_IFACE_INDEX;
- error = usbd_transfer_setup(uaa->device, &(sc->sc_iface_index),
+ error = usb2_transfer_setup(uaa->device, &(sc->sc_iface_index),
sc->sc_xfer, ubsa_config, UBSA_N_TRANSFER, sc, &Giant);
if (error) {
@@ -398,10 +360,10 @@
sc->sc_flag |= (UBSA_FLAG_WRITE_STALL |
UBSA_FLAG_READ_STALL);
- error = ucom_attach(&(sc->sc_super_ucom), &(sc->sc_ucom), 1, sc,
+ error = usb2_com_attach(&(sc->sc_super_ucom), &(sc->sc_ucom), 1, sc,
&ubsa_callback, &Giant);
if (error) {
- DPRINTF(0, "ucom_attach failed\n");
+ DPRINTF(0, "usb2_com_attach failed\n");
goto detach;
}
return (0);
@@ -418,9 +380,9 @@
DPRINTF(0, "sc=%p\n", sc);
- ucom_detach(&(sc->sc_super_ucom), &(sc->sc_ucom), 1);
+ usb2_com_detach(&(sc->sc_super_ucom), &(sc->sc_ucom), 1);
- usbd_transfer_unsetup(sc->sc_xfer, UBSA_N_TRANSFER);
+ usb2_transfer_unsetup(sc->sc_xfer, UBSA_N_TRANSFER);
return (0);
}
@@ -428,10 +390,10 @@
static void
ubsa_cfg_request(struct ubsa_softc *sc, uint8_t index, uint16_t value)
{
- usb_device_request_t req;
- usbd_status_t err;
+ struct usb2_device_request req;
+ usb2_error_t err;
- if (ucom_cfg_is_gone(&(sc->sc_ucom))) {
+ if (usb2_com_cfg_is_gone(&(sc->sc_ucom))) {
return;
}
req.bmRequestType = UT_WRITE_VENDOR_DEVICE;
@@ -441,18 +403,18 @@
req.wIndex[1] = 0;
USETW(req.wLength, 0);
- err = usbd_do_request_flags
+ err = usb2_do_request_flags
(sc->sc_udev, &Giant, &req, NULL, 0, NULL, 1000);
if (err) {
DPRINTF(-1, "device request failed, err=%s "
- "(ignored)\n", usbd_errstr(err));
+ "(ignored)\n", usb2_errstr(err));
}
return;
}
static void
-ubsa_cfg_set_dtr(struct ucom_softc *ucom, uint8_t onoff)
+ubsa_cfg_set_dtr(struct usb2_com_softc *ucom, uint8_t onoff)
{
struct ubsa_softc *sc = ucom->sc_parent;
@@ -463,7 +425,7 @@
}
static void
-ubsa_cfg_set_rts(struct ucom_softc *ucom, uint8_t onoff)
+ubsa_cfg_set_rts(struct usb2_com_softc *ucom, uint8_t onoff)
{
struct ubsa_softc *sc = ucom->sc_parent;
@@ -474,7 +436,7 @@
}
static void
-ubsa_cfg_set_break(struct ucom_softc *ucom, uint8_t onoff)
+ubsa_cfg_set_break(struct usb2_com_softc *ucom, uint8_t onoff)
{
struct ubsa_softc *sc = ucom->sc_parent;
@@ -485,7 +447,7 @@
}
static int
-ubsa_pre_param(struct ucom_softc *ucom, struct termios *t)
+ubsa_pre_param(struct usb2_com_softc *ucom, struct termios *t)
{
struct ubsa_softc *sc = ucom->sc_parent;
@@ -512,7 +474,7 @@
}
static void
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From hselasky at FreeBSD.org Wed Jul 2 21:48:37 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Wed Jul 2 21:48:39 2008
Subject: PERFORCE change 144510 for review
Message-ID: <200807022148.m62LmavX008916@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144510
Change 144510 by hselasky@hselasky_laptop001 on 2008/07/02 21:48:14
New USB bluetooth module finished.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/bluetooth/TODO.TXT#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/bluetooth/ng_ubt2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/bluetooth/ng_ubt2_var.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/bluetooth/ubtbcmfw2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#9 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#7 edit
.. //depot/projects/usb/src/sys/modules/usb2/bluetooth/Makefile#2 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/bluetooth/TODO.TXT#2 (text+ko) ====
==== //depot/projects/usb/src/sys/dev/usb2/bluetooth/ng_ubt2.c#2 (text+ko) ====
@@ -31,29 +31,32 @@
* $FreeBSD: src/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c,v 1.33 2007/06/23 04:34:38 imp Exp $
*/
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
+
+#define USB_DEBUG_VAR usb2_debug
+
+#include
+#include
+#include
+#include
+#include
+#include
+
#include
-#include
-#include
-#include
-#include
-#include
-
#include
#include
#include
#include
#include
#include
-#include
-#include "usbdevs.h"
-
-#define DPRINTF(...) do { } while (0)
+#include
+#include
/*
* USB methods
@@ -181,30 +184,23 @@
/* USB methods */
-static usbd_callback_t ubt_ctrl_write_callback;
-static usbd_callback_t ubt_intr_read_callback;
-static usbd_callback_t ubt_intr_read_clear_stall_callback;
-static usbd_callback_t ubt_bulk_read_callback;
-static usbd_callback_t ubt_bulk_read_clear_stall_callback;
-static usbd_callback_t ubt_bulk_write_callback;
-static usbd_callback_t ubt_bulk_write_clear_stall_callback;
-static usbd_callback_t ubt_isoc_read_callback;
-static usbd_callback_t ubt_isoc_write_callback;
+static usb2_callback_t ubt_ctrl_write_callback;
+static usb2_callback_t ubt_intr_read_callback;
+static usb2_callback_t ubt_intr_read_clear_stall_callback;
+static usb2_callback_t ubt_bulk_read_callback;
+static usb2_callback_t ubt_bulk_read_clear_stall_callback;
+static usb2_callback_t ubt_bulk_write_callback;
+static usb2_callback_t ubt_bulk_write_clear_stall_callback;
+static usb2_callback_t ubt_isoc_read_callback;
+static usb2_callback_t ubt_isoc_write_callback;
-static int
- ubt_modevent(module_t mod, int event, void *data);
+static int ubt_modevent(module_t mod, int event, void *data);
+static void ubt_intr_read_complete(node_p node, hook_p hook, void *arg1, int arg2);
+static void ubt_bulk_read_complete(node_p node, hook_p hook, void *arg1, int arg2);
+static void ubt_isoc_read_complete(node_p node, hook_p hook, void *arg1, int arg2);
-static void
- ubt_intr_read_complete(node_p node, hook_p hook, void *arg1, int arg2);
-
-static void
- ubt_bulk_read_complete(node_p node, hook_p hook, void *arg1, int arg2);
-
-static void
- ubt_isoc_read_complete(node_p node, hook_p hook, void *arg1, int arg2);
-
/* USB config */
-static const struct usbd_config ubt_config_if_0[UBT_IF_0_N_TRANSFER] = {
+static const struct usb2_config ubt_config_if_0[UBT_IF_0_N_TRANSFER] = {
[0] = {
.type = UE_BULK,
@@ -237,7 +233,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = (sizeof(usb_device_request_t) + UBT_CTRL_BUFFER_SIZE),
+ .mh.bufsize = (sizeof(struct usb2_device_request) + UBT_CTRL_BUFFER_SIZE),
.mh.callback = &ubt_ctrl_write_callback,
.mh.timeout = 5000, /* 5 seconds */
},
@@ -246,7 +242,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.callback = &ubt_bulk_write_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
.mh.interval = 50, /* 50ms */
@@ -256,7 +252,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.callback = &ubt_bulk_read_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
.mh.interval = 50, /* 50ms */
@@ -266,7 +262,7 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.callback = &ubt_intr_read_clear_stall_callback,
.mh.timeout = 1000, /* 1 second */
.mh.interval = 50, /* 50ms */
@@ -274,7 +270,7 @@
};
/* USB config */
-static const struct usbd_config
+static const struct usb2_config
ubt_config_if_1_full_speed[UBT_IF_1_N_TRANSFER] = {
[0] = {
@@ -319,7 +315,7 @@
};
/* USB config */
-static const struct usbd_config
+static const struct usb2_config
ubt_config_if_1_high_speed[UBT_IF_1_N_TRANSFER] = {
[0] = {
@@ -367,10 +363,10 @@
* Module
*/
-DRIVER_MODULE(ng_ubt, uhub, ubt_driver, ubt_devclass, ubt_modevent, 0);
+DRIVER_MODULE(ng_ubt, ushub, ubt_driver, ubt_devclass, ubt_modevent, 0);
MODULE_VERSION(ng_ubt, NG_BLUETOOTH_VERSION);
MODULE_DEPEND(ng_ubt, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION);
-MODULE_DEPEND(ng_ubt, usb, 1, 1, 1);
+MODULE_DEPEND(ng_ubt, usb2_core, 1, 1, 1);
/****************************************************************************
****************************************************************************
@@ -394,101 +390,85 @@
printf("%s: Could not register "
"Netgraph node type, error=%d\n",
NG_UBT_NODE_TYPE, error);
- } else
- error = usbd_driver_load(mod, event, data);
+ }
break;
case MOD_UNLOAD:
error = ng_rmtype(&typestruct);
- if (error == 0)
- error = usbd_driver_load(mod, event, data);
break;
default:
error = EOPNOTSUPP;
break;
}
-
return (error);
} /* ubt_modevent */
/*
+ * If for some reason device should not be attached then put
+ * VendorID/ProductID pair into the list below. The format is
+ * as follows:
+ *
+ * { VENDOR_ID, PRODUCT_ID },
+ *
+ * where VENDOR_ID and PRODUCT_ID are hex numbers.
+ */
+static const struct usb2_device_id ubt_ignore_devs[] = {
+ /* AVM USB Bluetooth-Adapter BlueFritz! v1.0 */
+ {USB_VPI(USB_VENDOR_AVM, 0x2200, 0)},
+};
+
+/* List of supported bluetooth devices */
+static const struct usb2_device_id ubt_devs[] = {
+ /* Generic Bluetooth class devices. */
+ {USB_IFACE_CLASS(UDCLASS_WIRELESS),
+ USB_IFACE_SUBCLASS(UDSUBCLASS_RF),
+ USB_IFACE_PROTOCOL(UDPROTO_BLUETOOTH)},
+
+ /* AVM USB Bluetooth-Adapter BlueFritz! v2.0 */
+ {USB_VPI(USB_VENDOR_AVM, 0x3800, 0)},
+};
+
+/*
* Probe for a USB Bluetooth device
*/
-static int32_t
+static int
ubt_probe(device_t dev)
{
- /*
- * If for some reason device should not be attached then put
- * VendorID/ProductID pair into the list below. The format is
- * as follows:
- *
- * { VENDOR_ID, PRODUCT_ID },
- *
- * where VENDOR_ID and PRODUCT_ID are hex numbers.
- */
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
- static struct usb_devno const ubt_ignored_devices[] = {
- {USB_VENDOR_AVM, 0x2200}, /* AVM USB Bluetooth-Adapter
- * BlueFritz! v1.0 */
- {0, 0} /* This should be the last item in the
- * list */
- };
-
- /*
- * If device violates Bluetooth specification and has bDeviceClass,
- * bDeviceSubClass and bDeviceProtocol set to wrong values then you
- * could try to put VendorID/ProductID pair into the list below.
- * Adding VendorID/ProductID pair into this list forces ng_ubt(4)
- * to attach to the broken device.
- */
-
- static struct usb_devno const ubt_broken_devices[] = {
- {USB_VENDOR_AVM, 0x3800}, /* AVM USB Bluetooth-Adapter
- * BlueFritz! v2.0 */
- {0, 0} /* This should be the last item in the
- * list */
- };
-
- struct usb_attach_arg *uaa = device_get_ivars(dev);
- usb_device_descriptor_t *dd = usbd_get_device_descriptor(uaa->device);
-
- if (uaa->usb_mode != USB_MODE_HOST) {
- return (UMATCH_NONE);
+ if (uaa->usb2_mode != USB_MODE_HOST) {
+ return (ENXIO);
}
- if ((uaa->iface == NULL) ||
- usb_lookup(ubt_ignored_devices, uaa->vendor, uaa->product)) {
- return (UMATCH_NONE);
+ if (uaa->info.bIfaceIndex != 0) {
+ return (ENXIO);
}
- if ((dd->bDeviceClass == UDCLASS_WIRELESS) &&
- (dd->bDeviceSubClass == UDSUBCLASS_RF) &&
- (dd->bDeviceProtocol == UDPROTO_BLUETOOTH)) {
- return (UMATCH_DEVCLASS_DEVSUBCLASS);
+ if (usb2_lookup_id_by_uaa(ubt_ignore_devs,
+ sizeof(ubt_ignore_devs), uaa) == 0) {
+ return (ENXIO);
}
- if (usb_lookup(ubt_broken_devices, uaa->vendor, uaa->product)) {
- return (UMATCH_VENDOR_PRODUCT);
- }
- return (UMATCH_NONE);
+ return (usb2_lookup_id_by_uaa(ubt_devs, sizeof(ubt_devs), uaa));
}
/*
* Attach the device
*/
-static int32_t
+static int
ubt_attach(device_t dev)
{
- struct usb_attach_arg *uaa = device_get_ivars(dev);
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
struct ubt_softc *sc = device_get_softc(dev);
- const struct usbd_config *isoc_setup;
- struct usbd_pipe *pipe;
+ const struct usb2_config *isoc_setup;
+ struct usb2_endpoint_descriptor *ed;
uint16_t wMaxPacketSize;
uint8_t alt_index;
uint8_t iface_index;
uint8_t i;
+ uint8_t j;
- usbd_set_device_desc(dev);
+ device_set_usb2_desc(dev);
snprintf(sc->sc_name, sizeof(sc->sc_name),
"%s", device_get_nameunit(dev));
@@ -510,13 +490,13 @@
/* isoc-out pipe */
NG_BT_MBUFQ_INIT(&sc->sc_scoq,
- (usbd_get_speed(uaa->device) == USB_SPEED_HIGH) ?
+ (usb2_get_speed(uaa->device) == USB_SPEED_HIGH) ?
(2 * UBT_ISOC_NFRAMES * 8) :
(2 * UBT_ISOC_NFRAMES));
/* isoc-in pipe */
NG_BT_MBUFQ_INIT(&sc->sc_sciq,
- (usbd_get_speed(uaa->device) == USB_SPEED_HIGH) ?
+ (usb2_get_speed(uaa->device) == USB_SPEED_HIGH) ?
(2 * UBT_ISOC_NFRAMES * 8) :
(2 * UBT_ISOC_NFRAMES));
@@ -549,7 +529,7 @@
mtx_init(&(sc->sc_mtx), "ubt lock", NULL, MTX_DEF | MTX_RECURSE);
iface_index = 0;
- if (usbd_transfer_setup
+ if (usb2_transfer_setup
(uaa->device, &iface_index, sc->sc_xfer_if_0, ubt_config_if_0,
UBT_IF_0_N_TRANSFER, sc, &(sc->sc_mtx))) {
device_printf(dev, "Could not allocate transfers "
@@ -563,37 +543,47 @@
* wMaxPacketSize)
*/
isoc_setup =
- ((usbd_get_speed(uaa->device) == USB_SPEED_HIGH) ?
+ ((usb2_get_speed(uaa->device) == USB_SPEED_HIGH) ?
ubt_config_if_1_high_speed :
ubt_config_if_1_full_speed);
wMaxPacketSize = 0;
- alt_index = 0;
- for (i = 0; i < 32; i++) {
+ /* search through all the descriptors looking for bidir mode */
- if (usbd_fill_iface_data(uaa->device, 1, i)) {
- /* end of alternate settings */
- break;
- }
- pipe = usbd_get_pipe(uaa->device, 1, isoc_setup);
+ alt_index = 0 - 1;
+ i = 0;
+ j = 0;
+ while (1) {
+ uint16_t temp;
- if (pipe && pipe->edesc) {
-
- if (UGETW(pipe->edesc->wMaxPacketSize) > wMaxPacketSize) {
- wMaxPacketSize = UGETW(pipe->edesc->wMaxPacketSize);
- alt_index = i;
+ ed = usb2_find_edesc(
+ usb2_get_config_descriptor(uaa->device), 1, i, j);
+ if (ed == NULL) {
+ if (j == 0) {
+ /* end of interfaces */
+ break;
+ } else {
+ /* next interface */
+ j = 0;
+ i++;
+ continue;
}
}
+ temp = UGETW(ed->wMaxPacketSize);
+ if (temp > wMaxPacketSize) {
+ wMaxPacketSize = temp;
+ alt_index = i;
+ }
}
- if (usbd_set_alt_interface_index(uaa->device, 1, alt_index)) {
+ if (usb2_set_alt_interface_index(uaa->device, 1, alt_index)) {
device_printf(dev, "Could not set alternate "
"setting %d for interface 1!\n", alt_index);
goto detach;
}
iface_index = 1;
- if (usbd_transfer_setup
+ if (usb2_transfer_setup
(uaa->device, &iface_index, sc->sc_xfer_if_1,
isoc_setup, UBT_IF_1_N_TRANSFER, sc, &(sc->sc_mtx))) {
device_printf(dev, "Could not allocate transfers "
@@ -622,12 +612,12 @@
/* claim all interfaces on the device */
- for (i = 0;; i++) {
+ for (i = 1;; i++) {
- if (usbd_get_iface(uaa->device, i) == NULL) {
+ if (usb2_get_iface(uaa->device, i) == NULL) {
break;
}
- USBD_SET_IFACE_NO_PROBE(uaa->device, i);
+ usb2_set_parent_iface(uaa->device, i, uaa->info.bIfaceIndex);
}
return (0); /* success */
@@ -642,7 +632,7 @@
* Detach the device
*/
-int32_t
+int
ubt_detach(device_t dev)
{
struct ubt_softc *sc = device_get_softc(dev);
@@ -656,9 +646,9 @@
}
/* free USB transfers, if any */
- usbd_transfer_unsetup(sc->sc_xfer_if_0, UBT_IF_0_N_TRANSFER);
+ usb2_transfer_unsetup(sc->sc_xfer_if_0, UBT_IF_0_N_TRANSFER);
- usbd_transfer_unsetup(sc->sc_xfer_if_1, UBT_IF_1_N_TRANSFER);
+ usb2_transfer_unsetup(sc->sc_xfer_if_1, UBT_IF_1_N_TRANSFER);
mtx_destroy(&(sc->sc_mtx));
@@ -673,14 +663,14 @@
}
static void
-ubt_ctrl_write_callback(struct usbd_xfer *xfer)
+ubt_ctrl_write_callback(struct usb2_xfer *xfer)
{
struct ubt_softc *sc = xfer->priv_sc;
- usb_device_request_t req;
+ struct usb2_device_request req;
struct mbuf *m;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
tr_transferred:
if (xfer->error) {
@@ -690,7 +680,7 @@
NG_UBT_STAT_PCKTS_SENT(sc->sc_stat);
}
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
/* get next mbuf, if any */
@@ -719,8 +709,8 @@
NG_UBT_INFO(sc, "Sending control request, bmRequestType=0x%02x, "
"wLength=%d\n", req.bmRequestType, UGETW(req.wLength));
- usbd_copy_in(xfer->frbuffers, 0, &req, sizeof(req));
- usbd_m_copy_in(xfer->frbuffers + 1, 0, m, 0, m->m_pkthdr.len);
+ usb2_copy_in(xfer->frbuffers, 0, &req, sizeof(req));
+ usb2_m_copy_in(xfer->frbuffers + 1, 0, m, 0, m->m_pkthdr.len);
xfer->frlengths[0] = sizeof(req);
xfer->frlengths[1] = m->m_pkthdr.len;
@@ -728,11 +718,11 @@
NG_FREE_M(m);
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error == USBD_ERR_CANCELLED) {
+ if (xfer->error == USB_ERR_CANCELLED) {
/* ignore */
return;
}
@@ -741,15 +731,15 @@
}
static void
-ubt_intr_read_callback(struct usbd_xfer *xfer)
+ubt_intr_read_callback(struct usb2_xfer *xfer)
{
struct ubt_softc *sc = xfer->priv_sc;
struct mbuf *m;
uint32_t max_len;
uint8_t *ptr;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
/* allocate a new mbuf */
@@ -778,7 +768,7 @@
}
ptr = ((uint8_t *)(m->m_data)) + m->m_len;
- usbd_copy_out(xfer->frbuffers, 0, ptr, xfer->actlen);
+ usb2_copy_out(xfer->frbuffers, 0, ptr, xfer->actlen);
m->m_pkthdr.len += xfer->actlen;
m->m_len += xfer->actlen;
@@ -788,7 +778,7 @@
sc->sc_intr_buffer = m;
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
tr_setup:
if (sc->sc_intr_buffer) {
@@ -796,19 +786,19 @@
return;
}
if (sc->sc_flags & UBT_FLAG_INTR_STALL) {
- usbd_transfer_start(sc->sc_xfer_if_0[6]);
+ usb2_transfer_start(sc->sc_xfer_if_0[6]);
return;
}
xfer->frlengths[0] = xfer->max_data_length;
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error != USBD_ERR_CANCELLED) {
+ if (xfer->error != USB_ERR_CANCELLED) {
/* try to clear stall first */
sc->sc_flags |= UBT_FLAG_INTR_STALL;
- usbd_transfer_start(sc->sc_xfer_if_0[6]);
+ usb2_transfer_start(sc->sc_xfer_if_0[6]);
}
return;
@@ -816,15 +806,15 @@
}
static void
-ubt_intr_read_clear_stall_callback(struct usbd_xfer *xfer)
+ubt_intr_read_clear_stall_callback(struct usb2_xfer *xfer)
{
struct ubt_softc *sc = xfer->priv_sc;
- struct usbd_xfer *xfer_other = sc->sc_xfer_if_0[2];
+ struct usb2_xfer *xfer_other = sc->sc_xfer_if_0[2];
- if (usbd_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF(sc, 0, "stall cleared\n");
+ if (usb2_clear_stall_callback(xfer, xfer_other)) {
+ DPRINTF(0, "stall cleared\n");
sc->sc_flags &= ~UBT_FLAG_INTR_STALL;
- usbd_transfer_start(xfer_other);
+ usb2_transfer_start(xfer_other);
}
return;
}
@@ -888,7 +878,7 @@
}
/* start USB transfer if not already started */
- usbd_transfer_start(sc->sc_xfer_if_0[2]);
+ usb2_transfer_start(sc->sc_xfer_if_0[2]);
mtx_unlock(&(sc->sc_mtx));
@@ -896,15 +886,15 @@
}
static void
-ubt_bulk_read_callback(struct usbd_xfer *xfer)
+ubt_bulk_read_callback(struct usb2_xfer *xfer)
{
struct ubt_softc *sc = xfer->priv_sc;
struct mbuf *m;
uint32_t max_len;
uint8_t *ptr;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
/* allocate new mbuf */
@@ -933,7 +923,7 @@
}
ptr = ((uint8_t *)(m->m_data)) + m->m_len;
- usbd_copy_out(xfer->frbuffers, 0, ptr, xfer->actlen);
+ usb2_copy_out(xfer->frbuffers, 0, ptr, xfer->actlen);
m->m_pkthdr.len += xfer->actlen;
m->m_len += xfer->actlen;
@@ -943,26 +933,26 @@
sc->sc_bulk_in_buffer = m;
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
tr_setup:
if (sc->sc_bulk_in_buffer) {
ng_send_fn(sc->sc_node, NULL, ubt_bulk_read_complete, NULL, 0);
return;
}
if (sc->sc_flags & UBT_FLAG_READ_STALL) {
- usbd_transfer_start(sc->sc_xfer_if_0[5]);
+ usb2_transfer_start(sc->sc_xfer_if_0[5]);
return;
}
xfer->frlengths[0] = xfer->max_data_length;
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error != USBD_ERR_CANCELLED) {
+ if (xfer->error != USB_ERR_CANCELLED) {
/* try to clear stall first */
sc->sc_flags |= UBT_FLAG_READ_STALL;
- usbd_transfer_start(sc->sc_xfer_if_0[5]);
+ usb2_transfer_start(sc->sc_xfer_if_0[5]);
}
return;
@@ -970,15 +960,15 @@
}
static void
-ubt_bulk_read_clear_stall_callback(struct usbd_xfer *xfer)
+ubt_bulk_read_clear_stall_callback(struct usb2_xfer *xfer)
{
struct ubt_softc *sc = xfer->priv_sc;
- struct usbd_xfer *xfer_other = sc->sc_xfer_if_0[1];
+ struct usb2_xfer *xfer_other = sc->sc_xfer_if_0[1];
- if (usbd_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF(sc, 0, "stall cleared\n");
+ if (usb2_clear_stall_callback(xfer, xfer_other)) {
+ DPRINTF(0, "stall cleared\n");
sc->sc_flags &= ~UBT_FLAG_READ_STALL;
- usbd_transfer_start(xfer_other);
+ usb2_transfer_start(xfer_other);
}
return;
}
@@ -1045,7 +1035,7 @@
}
/* start USB transfer if not already started */
- usbd_transfer_start(sc->sc_xfer_if_0[1]);
+ usb2_transfer_start(sc->sc_xfer_if_0[1]);
mtx_unlock(&(sc->sc_mtx));
@@ -1053,21 +1043,21 @@
}
static void
-ubt_bulk_write_callback(struct usbd_xfer *xfer)
+ubt_bulk_write_callback(struct usb2_xfer *xfer)
{
struct ubt_softc *sc = xfer->priv_sc;
struct mbuf *m;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
NG_UBT_INFO(sc, "sent %d bytes to bulk-out "
"pipe\n", xfer->actlen);
NG_UBT_STAT_BYTES_SENT(sc->sc_stat, xfer->actlen);
NG_UBT_STAT_PCKTS_SENT(sc->sc_stat);
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
if (sc->sc_flags & UBT_FLAG_WRITE_STALL) {
- usbd_transfer_start(sc->sc_xfer_if_0[4]);
+ usb2_transfer_start(sc->sc_xfer_if_0[4]);
return;
}
/* get next mbuf, if any */
@@ -1089,7 +1079,7 @@
UBT_BULK_WRITE_BUFFER_SIZE,
m->m_pkthdr.len);
}
- usbd_m_copy_in(xfer->frbuffers, 0, m, 0, m->m_pkthdr.len);
+ usb2_m_copy_in(xfer->frbuffers, 0, m, 0, m->m_pkthdr.len);
NG_UBT_INFO(sc, "bulk-out transfer has been started, "
"len=%d\n", m->m_pkthdr.len);
@@ -1098,20 +1088,20 @@
NG_FREE_M(m);
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error != USBD_ERR_CANCELLED) {
+ if (xfer->error != USB_ERR_CANCELLED) {
NG_UBT_WARN(sc, "bulk-out transfer failed: %s\n",
- usbd_errstr(xfer->error));
+ usb2_errstr(xfer->error));
NG_UBT_STAT_OERROR(sc->sc_stat);
/* try to clear stall first */
sc->sc_flags |= UBT_FLAG_WRITE_STALL;
- usbd_transfer_start(sc->sc_xfer_if_0[4]);
+ usb2_transfer_start(sc->sc_xfer_if_0[4]);
}
return;
@@ -1119,21 +1109,21 @@
}
static void
-ubt_bulk_write_clear_stall_callback(struct usbd_xfer *xfer)
+ubt_bulk_write_clear_stall_callback(struct usb2_xfer *xfer)
{
struct ubt_softc *sc = xfer->priv_sc;
- struct usbd_xfer *xfer_other = sc->sc_xfer_if_0[0];
+ struct usb2_xfer *xfer_other = sc->sc_xfer_if_0[0];
- if (usbd_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF(sc, 0, "stall cleared\n");
+ if (usb2_clear_stall_callback(xfer, xfer_other)) {
+ DPRINTF(0, "stall cleared\n");
sc->sc_flags &= ~UBT_FLAG_WRITE_STALL;
- usbd_transfer_start(xfer_other);
+ usb2_transfer_start(xfer_other);
}
return;
}
static void
-ubt_isoc_read_callback(struct usbd_xfer *xfer)
+ubt_isoc_read_callback(struct usb2_xfer *xfer)
{
struct ubt_softc *sc = xfer->priv_sc;
ng_hci_scodata_pkt_t hdr;
@@ -1143,8 +1133,8 @@
uint32_t n;
uint32_t offset;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
tr_transferred:
offset = 0;
@@ -1152,7 +1142,7 @@
if (xfer->frlengths[n] >= sizeof(hdr)) {
- usbd_copy_out(xfer->frbuffers, offset,
+ usb2_copy_out(xfer->frbuffers, offset,
&hdr, sizeof(hdr));
if (hdr.length == (xfer->frlengths[n] - sizeof(hdr))) {
@@ -1194,7 +1184,7 @@
}
ptr = ((uint8_t *)(m->m_data)) + m->m_len;
- usbd_copy_out
+ usb2_copy_out
(xfer->frbuffers, offset,
ptr, xfer->frlengths[n]);
@@ -1208,7 +1198,7 @@
offset += xfer->max_frame_size;
}
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
tr_setup:
if (NG_BT_MBUFQ_LEN(&(sc->sc_sciq)) > 0) {
@@ -1218,11 +1208,11 @@
xfer->frlengths[n] = xfer->max_frame_size;
}
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error == USBD_ERR_CANCELLED) {
+ if (xfer->error == USB_ERR_CANCELLED) {
/* ignore */
return;
}
@@ -1278,7 +1268,7 @@
}
static void
-ubt_isoc_write_callback(struct usbd_xfer *xfer)
+ubt_isoc_write_callback(struct usb2_xfer *xfer)
{
struct ubt_softc *sc = xfer->priv_sc;
struct mbuf *m;
@@ -1286,8 +1276,8 @@
uint32_t len;
uint32_t offset;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
tr_transferred:
if (xfer->error) {
NG_UBT_STAT_OERROR(sc->sc_stat);
@@ -1296,7 +1286,7 @@
NG_UBT_STAT_PCKTS_SENT(sc->sc_stat);
}
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
offset = 0;
for (n = 0; n < xfer->nframes; n++) {
@@ -1306,7 +1296,7 @@
if (m) {
len = min(xfer->max_frame_size, m->m_pkthdr.len);
- usbd_m_copy_in(xfer->frbuffers, offset, m, 0, len);
+ usb2_m_copy_in(xfer->frbuffers, offset, m, 0, len);
NG_FREE_M(m);
@@ -1317,11 +1307,11 @@
}
}
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error == USBD_ERR_CANCELLED) {
+ if (xfer->error == USB_ERR_CANCELLED) {
/* ignore */
return;
}
@@ -1436,27 +1426,27 @@
UBT_FLAG_INTR_STALL);
/* start intr transfer */
- usbd_transfer_start(sc->sc_xfer_if_0[2]);
+ usb2_transfer_start(sc->sc_xfer_if_0[2]);
/* start bulk-in transfer */
- usbd_transfer_start(sc->sc_xfer_if_0[1]);
+ usb2_transfer_start(sc->sc_xfer_if_0[1]);
/* start bulk-out transfer */
- usbd_transfer_start(sc->sc_xfer_if_0[0]);
+ usb2_transfer_start(sc->sc_xfer_if_0[0]);
/* start control-out transfer */
- usbd_transfer_start(sc->sc_xfer_if_0[3]);
+ usb2_transfer_start(sc->sc_xfer_if_0[3]);
#if 0
XXX can enable this XXX
/* start isoc-in transfer */
- usbd_transfer_start(sc->sc_xfer_if_1[0]);
+ usb2_transfer_start(sc->sc_xfer_if_1[0]);
- usbd_transfer_start(sc->sc_xfer_if_1[1]);
+ usb2_transfer_start(sc->sc_xfer_if_1[1]);
/* start isoc-out transfer */
- usbd_transfer_start(sc->sc_xfer_if_1[2]);
- usbd_transfer_start(sc->sc_xfer_if_1[3]);
+ usb2_transfer_start(sc->sc_xfer_if_1[2]);
+ usb2_transfer_start(sc->sc_xfer_if_1[3]);
#endif
mtx_unlock(&(sc->sc_mtx));
@@ -1483,27 +1473,27 @@
} else {
/* stop intr transfer */
- usbd_transfer_stop(sc->sc_xfer_if_0[2]);
- usbd_transfer_stop(sc->sc_xfer_if_0[6]);
+ usb2_transfer_stop(sc->sc_xfer_if_0[2]);
+ usb2_transfer_stop(sc->sc_xfer_if_0[6]);
/* stop bulk-in transfer */
- usbd_transfer_stop(sc->sc_xfer_if_0[1]);
- usbd_transfer_stop(sc->sc_xfer_if_0[5]);
+ usb2_transfer_stop(sc->sc_xfer_if_0[1]);
+ usb2_transfer_stop(sc->sc_xfer_if_0[5]);
/* stop bulk-out transfer */
- usbd_transfer_stop(sc->sc_xfer_if_0[0]);
- usbd_transfer_stop(sc->sc_xfer_if_0[4]);
+ usb2_transfer_stop(sc->sc_xfer_if_0[0]);
+ usb2_transfer_stop(sc->sc_xfer_if_0[4]);
/* stop control transfer */
- usbd_transfer_stop(sc->sc_xfer_if_0[3]);
+ usb2_transfer_stop(sc->sc_xfer_if_0[3]);
/* stop isoc-in transfer */
- usbd_transfer_stop(sc->sc_xfer_if_1[0]);
- usbd_transfer_stop(sc->sc_xfer_if_1[1]);
+ usb2_transfer_stop(sc->sc_xfer_if_1[0]);
+ usb2_transfer_stop(sc->sc_xfer_if_1[1]);
/* stop isoc-out transfer */
- usbd_transfer_stop(sc->sc_xfer_if_1[2]);
- usbd_transfer_stop(sc->sc_xfer_if_1[3]);
+ usb2_transfer_stop(sc->sc_xfer_if_1[2]);
+ usb2_transfer_stop(sc->sc_xfer_if_1[3]);
/* cleanup queues */
NG_BT_MBUFQ_DRAIN(&sc->sc_cmdq);
@@ -1713,7 +1703,7 @@
struct ubt_softc *sc = NG_NODE_PRIVATE(NG_HOOK_NODE(hook));
struct mbuf *m;
struct ng_bt_mbufq *q;
- struct usbd_xfer *xfer;
+ struct usb2_xfer *xfer;
int error = 0;
if (sc == NULL) {
@@ -1771,7 +1761,7 @@
}
if (xfer) {
- usbd_transfer_start(xfer);
+ usb2_transfer_start(xfer);
}
done:
NG_FREE_ITEM(item);
==== //depot/projects/usb/src/sys/dev/usb2/bluetooth/ng_ubt2_var.h#2 (text+ko) ====
@@ -92,8 +92,8 @@
struct mtx sc_mtx;
/* USB device specific */
- struct usbd_xfer *sc_xfer_if_0[UBT_IF_0_N_TRANSFER];
- struct usbd_xfer *sc_xfer_if_1[UBT_IF_1_N_TRANSFER];
+ struct usb2_xfer *sc_xfer_if_0[UBT_IF_0_N_TRANSFER];
+ struct usb2_xfer *sc_xfer_if_1[UBT_IF_1_N_TRANSFER];
/* Interrupt pipe (HCI events) */
struct mbuf *sc_intr_buffer; /* interrupt buffer */
==== //depot/projects/usb/src/sys/dev/usb2/bluetooth/ubtbcmfw2.c#2 (text+ko) ====
@@ -31,21 +31,24 @@
* $FreeBSD: src/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c,v 1.18 2007/06/23 04:34:38 imp Exp $
*/
-#include
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From hselasky at FreeBSD.org Wed Jul 2 22:00:49 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Wed Jul 2 22:00:53 2008
Subject: PERFORCE change 144511 for review
Message-ID: <200807022200.m62M0m5f010183@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144511
Change 144511 by hselasky@hselasky_laptop001 on 2008/07/02 22:00:07
Bugfix.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/bluetooth/ng_ubt2.c#3 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/bluetooth/ng_ubt2.c#3 (text+ko) ====
@@ -555,7 +555,7 @@
i = 0;
j = 0;
while (1) {
- uint16_t temp;
+ uint16_t temp;
ed = usb2_find_edesc(
usb2_get_config_descriptor(uaa->device), 1, i, j);
@@ -575,6 +575,7 @@
wMaxPacketSize = temp;
alt_index = i;
}
+ j++;
}
if (usb2_set_alt_interface_index(uaa->device, 1, alt_index)) {
From julian at FreeBSD.org Thu Jul 3 01:24:01 2008
From: julian at FreeBSD.org (Julian Elischer)
Date: Thu Jul 3 01:24:04 2008
Subject: PERFORCE change 144527 for review
Message-ID: <200807030124.m631O1om042445@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144527
Change 144527 by julian@julian_trafmon1 on 2008/07/03 01:23:07
IFC@144523
Affected files ...
.. //depot/projects/vimage-commit2/src/sys/amd64/amd64/pmap.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/amd64/include/pmap.h#3 integrate
.. //depot/projects/vimage-commit2/src/sys/amd64/include/vmparam.h#3 integrate
.. //depot/projects/vimage-commit2/src/sys/boot/i386/boot2/boot2.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/compat/pecoff/imgact_pecoff.c#2 delete
.. //depot/projects/vimage-commit2/src/sys/compat/pecoff/imgact_pecoff.h#2 delete
.. //depot/projects/vimage-commit2/src/sys/dev/ce/ceddk.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/ce/if_ce.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/cp/cpddk.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/cp/if_cp.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/ctau/ctddk.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/ctau/if_ct.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/cx/cxddk.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/cx/if_cx.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mii/rgephy.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mii/rgephyreg.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mpt/mpt_pci.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mpt/mpt_user.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/re/if_re.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/sound/pci/atiixp.h#2 integrate
.. //depot/projects/vimage-commit2/src/sys/fs/smbfs/smbfs_node.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/geom/virstor/g_virstor.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/kern_alq.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/uipc_socket.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/modules/pecoff/Makefile#2 delete
.. //depot/projects/vimage-commit2/src/sys/net/if_bridge.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/udp_usrreq.c#6 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet6/ip6_input.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/nfsserver/nfs_syscalls.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/pci/if_rlreg.h#3 integrate
.. //depot/projects/vimage-commit2/src/sys/sys/socketvar.h#2 integrate
Differences ...
==== //depot/projects/vimage-commit2/src/sys/amd64/amd64/pmap.c#4 (text+ko) ====
@@ -77,7 +77,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.623 2008/06/21 19:19:09 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.624 2008/07/02 05:41:23 alc Exp $");
/*
* Manages physical address maps.
@@ -173,7 +173,6 @@
vm_offset_t virtual_avail; /* VA of first avail page (after kernel bss) */
vm_offset_t virtual_end; /* VA of last avail page (end of kernel AS) */
-static int nkpt;
static int ndmpdp;
static vm_paddr_t dmaplimit;
vm_offset_t kernel_vm_end;
@@ -543,7 +542,6 @@
kernel_pmap->pm_root = NULL;
kernel_pmap->pm_active = -1; /* don't allow deactivation */
TAILQ_INIT(&kernel_pmap->pm_pvchunk);
- nkpt = NKPT;
/*
* Reserve some special page table entries/VA space for temporary
@@ -650,7 +648,7 @@
* page table pages.
*/
pd = pmap_pde(kernel_pmap, VM_MIN_KERNEL_ADDRESS);
- for (i = 0; i < nkpt; i++) {
+ for (i = 0; i < NKPT; i++) {
if ((pd[i] & (PG_PS | PG_V)) == (PG_PS | PG_V))
continue;
mpte = PHYS_TO_VM_PAGE(pd[i] & PG_FRAME);
@@ -1708,10 +1706,8 @@
mtx_assert(&kernel_map->system_mtx, MA_OWNED);
if (kernel_vm_end == 0) {
kernel_vm_end = VM_MIN_KERNEL_ADDRESS;
- nkpt = 0;
while ((*pmap_pde(kernel_pmap, kernel_vm_end) & PG_V) != 0) {
kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
- nkpt++;
if (kernel_vm_end - 1 >= kernel_map->max_offset) {
kernel_vm_end = kernel_map->max_offset;
break;
@@ -1725,7 +1721,7 @@
pde = pmap_pde(kernel_pmap, kernel_vm_end);
if (pde == NULL) {
/* We need a new PDP entry */
- nkpg = vm_page_alloc(NULL, nkpt,
+ nkpg = vm_page_alloc(NULL, kernel_vm_end >> PDPSHIFT,
VM_ALLOC_NOOBJ | VM_ALLOC_SYSTEM | VM_ALLOC_WIRED);
if (nkpg == NULL)
panic("pmap_growkernel: no memory to grow kernel");
@@ -1749,9 +1745,6 @@
VM_ALLOC_NOOBJ | VM_ALLOC_SYSTEM | VM_ALLOC_WIRED);
if (nkpg == NULL)
panic("pmap_growkernel: no memory to grow kernel");
-
- nkpt++;
-
pmap_zero_page(nkpg);
paddr = VM_PAGE_TO_PHYS(nkpg);
newpdir = (pd_entry_t) (paddr | PG_V | PG_RW | PG_A | PG_M);
==== //depot/projects/vimage-commit2/src/sys/amd64/include/pmap.h#3 (text+ko) ====
@@ -39,7 +39,7 @@
*
* from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90
* from: @(#)pmap.h 7.4 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.142 2008/06/29 19:13:27 alc Exp $
+ * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.143 2008/06/30 02:35:55 alc Exp $
*/
#ifndef _MACHINE_PMAP_H_
@@ -115,7 +115,7 @@
#endif
#define NKPML4E 1 /* number of kernel PML4 slots */
-#define NKPDPE 5 /* number of kernel PDP slots */
+#define NKPDPE howmany(NKPT, NPDEPG)/* number of kernel PDP slots */
#define NUPML4E (NPML4EPG/2) /* number of userland PML4 pages */
#define NUPDPE (NUPML4E*NPDPEPG)/* number of userland PDP pages */
==== //depot/projects/vimage-commit2/src/sys/amd64/include/vmparam.h#3 (text+ko) ====
@@ -38,7 +38,7 @@
* SUCH DAMAGE.
*
* from: @(#)vmparam.h 5.9 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.52 2008/06/29 19:13:27 alc Exp $
+ * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.53 2008/06/30 03:14:39 alc Exp $
*/
@@ -148,8 +148,18 @@
/*
* Virtual addresses of things. Derived from the page directory and
* page table indexes from pmap.h for precision.
- * Because of the page that is both a PD and PT, it looks a little
- * messy at times, but hey, we'll do anything to save a page :-)
+ *
+ * 0x0000000000000000 - 0x00007fffffffffff user map
+ * 0x0000800000000000 - 0xffff7fffffffffff does not exist (hole)
+ * 0xffff800000000000 - 0xffff804020100fff recursive page table (512GB slot)
+ * 0xffff804020101000 - 0xfffffeffffffffff unused
+ * 0xffffff0000000000 - 0xffffff7fffffffff 512GB direct map mappings
+ * 0xffffff8000000000 - 0xfffffffe7fffffff unused (506GB)
+ * 0xfffffffe80000000 - 0xffffffffffffffff 6GB kernel map
+ *
+ * Within the kernel map:
+ *
+ * 0xffffffff80000000 KERNBASE
*/
#define VM_MAX_KERNEL_ADDRESS KVADDR(KPML4I, NPDPEPG-1, NPDEPG-1, NPTEPG-1)
==== //depot/projects/vimage-commit2/src/sys/boot/i386/boot2/boot2.c#2 (text+ko) ====
@@ -14,7 +14,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.86 2008/02/28 17:08:05 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.87 2008/07/01 11:18:51 nyan Exp $");
#include
#include
@@ -472,7 +472,7 @@
dsk.slice = WHOLE_DISK_SLICE;
if (arg[1] == ',') {
dsk.slice = *arg - '0' + 1;
- if (dsk.slice > NDOSPART)
+ if (dsk.slice > NDOSPART + 1)
return -1;
arg += 2;
}
==== //depot/projects/vimage-commit2/src/sys/dev/ce/ceddk.h#2 (text+ko) ====
@@ -13,7 +13,7 @@
* works or modified versions.
*
* $Cronyx: ceddk.h,v 1.2.6.1 2005/11/09 13:01:39 rik Exp $
- * $FreeBSD: src/sys/dev/ce/ceddk.h,v 1.1 2006/01/27 09:02:09 rik Exp $
+ * $FreeBSD: src/sys/dev/ce/ceddk.h,v 1.2 2008/06/30 21:18:27 rik Exp $
*/
#define TAU32_UserContext_Add void *sys;
@@ -72,6 +72,7 @@
TAU32_UserRequest *rx_queue;
TAU32_UserRequest *tx_queue;
unsigned char debug;
+ unsigned char debug_shadow;
void (*transmit) (struct _ce_chan_t*, void*, int);
void (*receive) (struct _ce_chan_t*, unsigned char*, int);
void (*error) (struct _ce_chan_t*, int);
==== //depot/projects/vimage-commit2/src/sys/dev/ce/if_ce.c#2 (text+ko) ====
@@ -16,7 +16,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/ce/if_ce.c,v 1.9 2007/07/27 11:59:56 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ce/if_ce.c,v 1.11 2008/07/01 14:41:03 dds Exp $");
#include
@@ -962,8 +962,8 @@
if (! (ifp->if_flags & IFF_DEBUG))
d->chan->debug = 0;
- else if (! d->chan->debug)
- d->chan->debug = 1;
+ else
+ d->chan->debug = d->chan->debug_shadow;
switch (cmd) {
default: CE_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1333,7 +1333,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1374,7 +1374,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1404,7 +1404,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1424,7 +1424,7 @@
CE_DEBUG2 (d, ("ioctl: setcfg\n"));
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1526,7 +1526,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1562,7 +1562,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1590,7 +1590,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1614,19 +1614,24 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
#endif
if (error)
return error;
+#ifndef NETGRAPH
+ /*
+ * The debug_shadow is always greater than zero for logic
+ * simplicity. For switching debug off the IFF_DEBUG is
+ * responsible.
+ */
+ d->chan->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+ if (d->ifp->if_flags & IFF_DEBUG)
+ d->chan->debug = d->chan->debug_shadow;
+#else
d->chan->debug = *(int*)data;
-#ifndef NETGRAPH
- if (d->chan->debug)
- d->ifp->if_flags |= IFF_DEBUG;
- else
- d->ifp->if_flags &= ~IFF_DEBUG;
#endif
return 0;
@@ -1642,7 +1647,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1668,7 +1673,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1698,7 +1703,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1722,7 +1727,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1750,7 +1755,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1776,7 +1781,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1804,7 +1809,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1832,7 +1837,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1860,7 +1865,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1893,7 +1898,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1920,7 +1925,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1939,7 +1944,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
@@ -1977,7 +1982,7 @@
/* Only for superuser! */
#if __FreeBSD_version < 500000
error = suser (p);
-#elsif __FreeBSD_version < 700000
+#elif __FreeBSD_version < 700000
error = suser (td);
#else
error = priv_check (td, PRIV_DRIVER);
==== //depot/projects/vimage-commit2/src/sys/dev/cp/cpddk.h#2 (text+ko) ====
@@ -16,7 +16,7 @@
* works or modified versions.
*
* $Cronyx: cpddk.h,v 1.8.4.20 2004/12/06 16:21:06 rik Exp $
- * $FreeBSD: src/sys/dev/cp/cpddk.h,v 1.4 2005/01/06 01:42:32 imp Exp $
+ * $FreeBSD: src/sys/dev/cp/cpddk.h,v 1.5 2008/06/30 21:18:27 rik Exp $
*/
#define NBRD 6 /* the maximum number of installed boards */
#define NCHAN 4 /* the number of channels on the board */
@@ -205,6 +205,7 @@
void *tag [NTBUF]; /* system dependent data per buffer */
void *sys; /* system dependent data per channel */
unsigned char debug; /* debug level, 0..2 */
+ unsigned char debug_shadow; /* debug shadow */
void (*transmit) (struct _cp_chan_t *c, void *tag, int len);
void (*receive) (struct _cp_chan_t *c, unsigned char *data, int len);
==== //depot/projects/vimage-commit2/src/sys/dev/cp/if_cp.c#2 (text+ko) ====
@@ -22,7 +22,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/cp/if_cp.c,v 1.34 2007/07/27 11:59:56 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cp/if_cp.c,v 1.35 2008/06/30 21:18:27 rik Exp $");
#include
#include
@@ -733,8 +733,8 @@
if (! (ifp->if_flags & IFF_DEBUG))
d->chan->debug = 0;
- else if (! d->chan->debug)
- d->chan->debug = 1;
+ else
+ d->chan->debug = d->chan->debug_shadow;
switch (cmd) {
default: CP_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1349,12 +1349,17 @@
error = priv_check (td, PRIV_DRIVER);
if (error)
return error;
+#ifndef NETGRAPH
+ /*
+ * The debug_shadow is always greater than zero for logic
+ * simplicity. For switching debug off the IFF_DEBUG is
+ * responsible.
+ */
+ d->chan->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+ if (d->ifp->if_flags & IFF_DEBUG)
+ d->chan->debug = d->chan->debug_shadow;
+#else
d->chan->debug = *(int*)data;
-#ifndef NETGRAPH
- if (d->chan->debug)
- d->ifp->if_flags |= IFF_DEBUG;
- else
- d->ifp->if_flags &= ~IFF_DEBUG;
#endif
return 0;
==== //depot/projects/vimage-commit2/src/sys/dev/ctau/ctddk.h#2 (text+ko) ====
@@ -12,7 +12,7 @@
* all derivative works or modified versions.
*
* Cronyx Id: ctddk.h,v 1.1.2.3 2003/12/11 17:33:44 rik Exp $
- * $FreeBSD: src/sys/dev/ctau/ctddk.h,v 1.2 2005/01/06 01:42:33 imp Exp $
+ * $FreeBSD: src/sys/dev/ctau/ctddk.h,v 1.3 2008/06/30 21:18:27 rik Exp $
*/
#define NBRD 3 /* the maximum number of installed boards */
#define NPORT 32 /* the number of i/o ports per board */
@@ -412,6 +412,7 @@
void *attach [NBUF]; /* system dependent data per buffer */
void *sys; /* system dependent data per channel */
int debug;
+ int debug_shadow;
int e1_first_int;
unsigned char *sccrx, *scctx; /* pointers to SCC rx and tx buffers */
==== //depot/projects/vimage-commit2/src/sys/dev/ctau/if_ct.c#2 (text+ko) ====
@@ -22,7 +22,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/ctau/if_ct.c,v 1.35 2007/10/12 06:03:43 kevlo Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ctau/if_ct.c,v 1.36 2008/06/30 21:18:27 rik Exp $");
#include
#include
@@ -949,8 +949,8 @@
if (! (ifp->if_flags & IFF_DEBUG))
d->chan->debug = 0;
- else if (! d->chan->debug)
- d->chan->debug = 1;
+ else
+ d->chan->debug = d->chan->debug_shadow;
switch (cmd) {
default: CT_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1529,12 +1529,17 @@
error = priv_check (td, PRIV_DRIVER);
if (error)
return error;
+#ifndef NETGRAPH
+ /*
+ * The debug_shadow is always greater than zero for logic
+ * simplicity. For switching debug off the IFF_DEBUG is
+ * responsible.
+ */
+ c->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+ if (d->ifp->if_flags & IFF_DEBUG)
+ c->debug = c->debug_shadow;
+#else
c->debug = *(int*)data;
-#ifndef NETGRAPH
- if (d->chan->debug)
- d->ifp->if_flags |= IFF_DEBUG;
- else
- d->ifp->if_flags &= (~IFF_DEBUG);
#endif
return 0;
==== //depot/projects/vimage-commit2/src/sys/dev/cx/cxddk.h#2 (text+ko) ====
@@ -15,7 +15,7 @@
* all derivative works or modified versions.
*
* Cronyx Id: cxddk.h,v 1.1.2.1 2003/11/12 17:13:41 rik Exp $
- * $FreeBSD: src/sys/dev/cx/cxddk.h,v 1.2 2005/01/06 01:42:34 imp Exp $
+ * $FreeBSD: src/sys/dev/cx/cxddk.h,v 1.3 2008/06/30 21:18:27 rik Exp $
*/
#ifndef port_t
@@ -337,6 +337,7 @@
void *sys;
int debug;
+ int debug_shadow;
void *attach [2];
char *received_data;
int received_len;
==== //depot/projects/vimage-commit2/src/sys/dev/cx/if_cx.c#2 (text+ko) ====
@@ -23,7 +23,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.58 2007/10/12 06:03:43 kevlo Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.59 2008/06/30 21:18:27 rik Exp $");
#include
@@ -1102,10 +1102,14 @@
if (error)
return error;
+ s = splhigh ();
+ CX_LOCK (bd);
if (! (ifp->if_flags & IFF_DEBUG))
d->chan->debug = 0;
- else if (! d->chan->debug)
- d->chan->debug = 1;
+ else
+ d->chan->debug = d->chan->debug_shadow;
+ CX_UNLOCK (bd);
+ splx (s);
switch (cmd) {
default: CX_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0;
@@ -1745,6 +1749,8 @@
cx_enable_receive (c, 0);
cx_enable_transmit (c, 0);
} else if (c->mode == M_ASYNC && *(int*)data == SERIAL_HDLC) {
+ if (d->ifp->if_flags & IFF_DEBUG)
+ c->debug = c->debug_shadow;
cx_set_mode (c, M_HDLC);
cx_enable_receive (c, 1);
cx_enable_transmit (c, 1);
@@ -1913,15 +1919,24 @@
return error;
s = splhigh ();
CX_LOCK (bd);
+#ifndef NETGRAPH
+ if (c->mode == M_ASYNC) {
+ c->debug = *(int*)data;
+ } else {
+ /*
+ * The debug_shadow is always greater than zero for
+ * logic simplicity. For switching debug off the
+ * IFF_DEBUG is responsible (for !M_ASYNC mode).
+ */
+ c->debug_shadow = (*(int*)data) ? (*(int*)data) : 1;
+ if (d->ifp->if_flags & IFF_DEBUG)
+ c->debug = c->debug_shadow;
+ }
+#else
c->debug = *(int*)data;
+#endif
CX_UNLOCK (bd);
splx (s);
-#ifndef NETGRAPH
- if (d->chan->debug)
- d->ifp->if_flags |= IFF_DEBUG;
- else
- d->ifp->if_flags &= (~IFF_DEBUG);
-#endif
return 0;
}
==== //depot/projects/vimage-commit2/src/sys/dev/mii/rgephy.c#2 (text+ko) ====
@@ -31,10 +31,10 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/mii/rgephy.c,v 1.19 2008/03/05 01:15:10 yongari Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mii/rgephy.c,v 1.20 2008/07/02 08:10:18 yongari Exp $");
/*
- * Driver for the RealTek 8169S/8110S/8211B internal 10/100/1000 PHY.
+ * Driver for the RealTek 8169S/8110S/8211B/8211C internal 10/100/1000 PHY.
*/
#include
@@ -531,6 +531,18 @@
static void
rgephy_reset(struct mii_softc *sc)
{
+ struct rgephy_softc *rsc;
+ uint16_t ssr;
+
+ rsc = (struct rgephy_softc *)sc;
+ if (rsc->mii_revision == 3) {
+ /* RTL8211C(L) */
+ ssr = PHY_READ(sc, RGEPHY_MII_SSR);
+ if ((ssr & RGEPHY_SSR_ALDPS) != 0) {
+ ssr &= ~RGEPHY_SSR_ALDPS;
+ PHY_WRITE(sc, RGEPHY_MII_SSR, ssr);
+ }
+ }
mii_phy_reset(sc);
DELAY(1000);
==== //depot/projects/vimage-commit2/src/sys/dev/mii/rgephyreg.h#2 (text+ko) ====
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/mii/rgephyreg.h,v 1.3 2007/10/29 02:17:07 yongari Exp $
+ * $FreeBSD: src/sys/dev/mii/rgephyreg.h,v 1.4 2008/07/02 08:10:18 yongari Exp $
*/
#ifndef _DEV_MII_RGEPHYREG_H_
@@ -137,7 +137,7 @@
#define RGEPHY_EXTSTS_T_FD_CAP 0x2000 /* 1000base-T FD capable */
#define RGEPHY_EXTSTS_T_HD_CAP 0x1000 /* 1000base-T HD capable */
-/* RTL8211B(L) */
+/* RTL8211B(L)/RTL8211C(L) */
#define RGEPHY_MII_SSR 0x11 /* PHY Specific status register */
#define RGEPHY_SSR_S1000 0x8000 /* 1000Mbps */
#define RGEPHY_SSR_S100 0x4000 /* 100Mbps */
@@ -148,6 +148,7 @@
#define RGEPHY_SSR_SPD_DPLX_RESOLVED 0x0800 /* speed/duplex resolved */
#define RGEPHY_SSR_LINK 0x0400 /* link up */
#define RGEPHY_SSR_MDI_XOVER 0x0040 /* MDI crossover */
+#define RGEPHY_SSR_ALDPS 0x0008 /* RTL8211C(L) only */
#define RGEPHY_SSR_JABBER 0x0001 /* Jabber */
#endif /* _DEV_RGEPHY_MIIREG_H_ */
==== //depot/projects/vimage-commit2/src/sys/dev/mpt/mpt_pci.c#2 (text+ko) ====
@@ -99,7 +99,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_pci.c,v 1.52 2008/05/10 01:27:23 delphij Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_pci.c,v 1.53 2008/07/01 19:44:38 jhb Exp $");
#include
#include
@@ -688,7 +688,7 @@
mpt_free_bus_resources(mpt);
mpt_raid_free_mem(mpt);
if (mpt->eh != NULL) {
- EVENTHANDLER_DEREGISTER(shutdown_final, mpt->eh);
+ EVENTHANDLER_DEREGISTER(shutdown_post_sync, mpt->eh);
}
}
return(0);
==== //depot/projects/vimage-commit2/src/sys/dev/mpt/mpt_user.c#2 (text+ko) ====
@@ -31,7 +31,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_user.c,v 1.1 2008/05/06 20:49:52 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_user.c,v 1.2 2008/07/01 19:48:15 jhb Exp $");
#include
#include
@@ -47,6 +47,13 @@
uint16_t action_status;
};
+struct mpt_page_memory {
+ bus_dma_tag_t tag;
+ bus_dmamap_t map;
+ bus_addr_t paddr;
+ void *vaddr;
+};
+
static mpt_probe_handler_t mpt_user_probe;
static mpt_attach_handler_t mpt_user_attach;
static mpt_enable_handler_t mpt_user_enable;
@@ -180,6 +187,56 @@
}
static int
+mpt_alloc_buffer(struct mpt_softc *mpt, struct mpt_page_memory *page_mem,
+ size_t len)
+{
+ struct mpt_map_info mi;
+ int error;
+
+ page_mem->vaddr = NULL;
+
+ /* Limit requests to 16M. */
+ if (len > 16 * 1024 * 1024)
+ return (ENOSPC);
+ error = mpt_dma_tag_create(mpt, mpt->parent_dmat, 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
+ len, 1, len, 0, &page_mem->tag);
+ if (error)
+ return (error);
+ error = bus_dmamem_alloc(page_mem->tag, &page_mem->vaddr,
+ BUS_DMA_NOWAIT, &page_mem->map);
+ if (error) {
+ bus_dma_tag_destroy(page_mem->tag);
+ return (error);
+ }
+ mi.mpt = mpt;
+ error = bus_dmamap_load(page_mem->tag, page_mem->map, page_mem->vaddr,
+ len, mpt_map_rquest, &mi, BUS_DMA_NOWAIT);
+ if (error == 0)
+ error = mi.error;
+ if (error) {
+ bus_dmamem_free(page_mem->tag, page_mem->vaddr, page_mem->map);
+ bus_dma_tag_destroy(page_mem->tag);
+ page_mem->vaddr = NULL;
+ return (error);
+ }
+ page_mem->paddr = mi.phys;
+ return (0);
+}
+
+static void
+mpt_free_buffer(struct mpt_page_memory *page_mem)
+{
+
+ if (page_mem->vaddr == NULL)
+ return;
+ bus_dmamap_unload(page_mem->tag, page_mem->map);
+ bus_dmamem_free(page_mem->tag, page_mem->vaddr, page_mem->map);
+ bus_dma_tag_destroy(page_mem->tag);
+ page_mem->vaddr = NULL;
+}
+
+static int
mpt_user_read_cfg_header(struct mpt_softc *mpt,
struct mpt_cfg_page_req *page_req)
{
@@ -225,7 +282,7 @@
static int
mpt_user_read_cfg_page(struct mpt_softc *mpt, struct mpt_cfg_page_req *page_req,
- void *mpt_page)
+ struct mpt_page_memory *mpt_page)
{
CONFIG_PAGE_HEADER *hdr;
request_t *req;
@@ -238,15 +295,14 @@
return (ENOMEM);
}
- hdr = mpt_page;
+ hdr = mpt_page->vaddr;
params.Action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
params.PageVersion = hdr->PageVersion;
params.PageLength = hdr->PageLength;
params.PageNumber = hdr->PageNumber;
params.PageType = hdr->PageType & MPI_CONFIG_PAGETYPE_MASK;
params.PageAddress = page_req->page_address;
- error = mpt_issue_cfg_req(mpt, req, ¶ms,
- req->req_pbuf + MPT_RQSL(mpt),
+ error = mpt_issue_cfg_req(mpt, req, ¶ms, mpt_page->paddr,
page_req->len, TRUE, 5000);
if (error != 0) {
mpt_prt(mpt, "mpt_user_read_cfg_page timed out\n");
@@ -254,12 +310,9 @@
}
page_req->ioc_status = req->IOCStatus;
- if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS) {
- bus_dmamap_sync(mpt->request_dmat, mpt->request_dmap,
+ if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS)
+ bus_dmamap_sync(mpt_page->tag, mpt_page->map,
BUS_DMASYNC_POSTREAD);
- memcpy(mpt_page, ((uint8_t *)req->req_vbuf)+MPT_RQSL(mpt),
- page_req->len);
- }
mpt_free_request(mpt, req);
return (0);
}
@@ -315,7 +368,7 @@
static int
mpt_user_read_extcfg_page(struct mpt_softc *mpt,
- struct mpt_ext_cfg_page_req *ext_page_req, void *mpt_page)
+ struct mpt_ext_cfg_page_req *ext_page_req, struct mpt_page_memory *mpt_page)
{
CONFIG_EXTENDED_PAGE_HEADER *hdr;
request_t *req;
@@ -328,7 +381,7 @@
return (ENOMEM);
}
- hdr = mpt_page;
+ hdr = mpt_page->vaddr;
params.Action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
params.PageVersion = hdr->PageVersion;
params.PageLength = 0;
@@ -337,8 +390,7 @@
params.PageAddress = ext_page_req->page_address;
params.ExtPageType = hdr->ExtPageType;
params.ExtPageLength = hdr->ExtPageLength;
- error = mpt_issue_cfg_req(mpt, req, ¶ms,
- req->req_pbuf + MPT_RQSL(mpt),
+ error = mpt_issue_cfg_req(mpt, req, ¶ms, mpt_page->paddr,
ext_page_req->len, TRUE, 5000);
if (error != 0) {
mpt_prt(mpt, "mpt_user_read_extcfg_page timed out\n");
@@ -346,19 +398,16 @@
}
ext_page_req->ioc_status = req->IOCStatus;
- if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS) {
- bus_dmamap_sync(mpt->request_dmat, mpt->request_dmap,
+ if ((req->IOCStatus & MPI_IOCSTATUS_MASK) == MPI_IOCSTATUS_SUCCESS)
+ bus_dmamap_sync(mpt_page->tag, mpt_page->map,
BUS_DMASYNC_POSTREAD);
- memcpy(mpt_page, ((uint8_t *)req->req_vbuf)+MPT_RQSL(mpt),
- ext_page_req->len);
- }
mpt_free_request(mpt, req);
return (0);
}
static int
mpt_user_write_cfg_page(struct mpt_softc *mpt,
- struct mpt_cfg_page_req *page_req, void *mpt_page)
+ struct mpt_cfg_page_req *page_req, struct mpt_page_memory *mpt_page)
{
CONFIG_PAGE_HEADER *hdr;
request_t *req;
@@ -366,7 +415,7 @@
u_int hdr_attr;
int error;
- hdr = mpt_page;
+ hdr = mpt_page->vaddr;
hdr_attr = hdr->PageType & MPI_CONFIG_PAGEATTR_MASK;
if (hdr_attr != MPI_CONFIG_PAGEATTR_CHANGEABLE &&
hdr_attr != MPI_CONFIG_PAGEATTR_PERSISTENT) {
@@ -386,8 +435,7 @@
if (req == NULL)
return (ENOMEM);
- memcpy(((caddr_t)req->req_vbuf) + MPT_RQSL(mpt), mpt_page,
- page_req->len);
+ bus_dmamap_sync(mpt_page->tag, mpt_page->map, BUS_DMASYNC_PREWRITE);
/*
* There isn't any point in restoring stripped out attributes
@@ -406,8 +454,7 @@
#else
params.PageType = hdr->PageType;
#endif
- error = mpt_issue_cfg_req(mpt, req, ¶ms,
- req->req_pbuf + MPT_RQSL(mpt),
+ error = mpt_issue_cfg_req(mpt, req, ¶ms, mpt_page->paddr,
page_req->len, TRUE, 5000);
if (error != 0) {
mpt_prt(mpt, "mpt_write_cfg_page timed out\n");
@@ -466,7 +513,7 @@
*/
static int
mpt_user_raid_action(struct mpt_softc *mpt, struct mpt_raid_action *raid_act,
- void *buf)
+ struct mpt_page_memory *mpt_page)
{
request_t *req;
struct mpt_user_raid_action_result *res;
@@ -486,12 +533,10 @@
rap->VolumeBus = raid_act->volume_bus;
rap->PhysDiskNum = raid_act->phys_disk_num;
se = (SGE_SIMPLE32 *)&rap->ActionDataSGE;
- if (buf != 0 && raid_act->len != 0) {
- memcpy(((caddr_t)req->req_vbuf) + MPT_RQSL(mpt) +
- sizeof(struct mpt_user_raid_action_result), buf,
- raid_act->len);
- se->Address = req->req_pbuf + MPT_RQSL(mpt) +
- sizeof(struct mpt_user_raid_action_result);
+ if (mpt_page->vaddr != NULL && raid_act->len != 0) {
+ bus_dmamap_sync(mpt_page->tag, mpt_page->map,
+ BUS_DMASYNC_PREWRITE);
+ se->Address = mpt_page->paddr;
MPI_pSGE_SET_LENGTH(se, raid_act->len);
MPI_pSGE_SET_FLAGS(se, (MPI_SGE_FLAGS_SIMPLE_ELEMENT |
MPI_SGE_FLAGS_LAST_ELEMENT | MPI_SGE_FLAGS_END_OF_BUFFER |
@@ -526,9 +571,9 @@
raid_act->action_status = res->action_status;
bcopy(res->action_data, raid_act->action_data,
sizeof(res->action_data));
- if (buf != NULL)
- memcpy(buf, ((uint8_t *)req->req_vbuf) + MPT_RQSL(mpt) +
- sizeof(struct mpt_user_raid_action_result), raid_act->len);
+ if (mpt_page->vaddr != NULL)
+ bus_dmamap_sync(mpt_page->tag, mpt_page->map,
+ BUS_DMASYNC_POSTREAD);
mpt_free_request(mpt, req);
return (0);
}
@@ -545,6 +590,7 @@
struct mpt_cfg_page_req *page_req;
struct mpt_ext_cfg_page_req *ext_page_req;
struct mpt_raid_action *raid_act;
+ struct mpt_page_memory mpt_page;
#ifdef __amd64__
struct mpt_cfg_page_req32 *page_req32;
struct mpt_cfg_page_req page_req_swab;
@@ -553,14 +599,13 @@
struct mpt_raid_action32 *raid_act32;
struct mpt_raid_action raid_act_swab;
#endif
- void *mpt_page;
int error;
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From julian at FreeBSD.org Thu Jul 3 01:28:06 2008
From: julian at FreeBSD.org (Julian Elischer)
Date: Thu Jul 3 01:28:10 2008
Subject: PERFORCE change 144528 for review
Message-ID: <200807030128.m631S5Pj042841@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144528
Change 144528 by julian@julian_trafmon1 on 2008/07/03 01:27:39
IF-commit2@144527
Affected files ...
.. //depot/projects/vimage-commit3/src/sys/amd64/amd64/bpf_jit_machdep.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/amd64/bpf_jit_machdep.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/amd64/mem.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/amd64/minidump_machdep.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/amd64/pmap.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/amd64/trap.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/conf/GENERIC#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/include/iodev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/include/memdev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/include/pmap.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/include/pmc_mdep.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/include/stack.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/amd64/include/vmparam.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/arm/include/memdev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/Makefile.inc#1 branch
.. //depot/projects/vimage-commit3/src/sys/boot/arm/Makefile.inc#1 branch
.. //depot/projects/vimage-commit3/src/sys/boot/arm/at91/Makefile.inc#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/efi/Makefile.inc#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/i386/Makefile.inc#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/i386/boot2/boot2.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/i386/loader/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/ia64/Makefile.inc#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/ia64/common/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/ia64/efi/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/ia64/ski/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/ofw/Makefile.inc#1 branch
.. //depot/projects/vimage-commit3/src/sys/boot/pc98/Makefile.inc#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/pc98/boot2/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/pc98/loader/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/powerpc/Makefile.inc#1 branch
.. //depot/projects/vimage-commit3/src/sys/boot/powerpc/ofw/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/sparc64/Makefile.inc#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/sparc64/loader/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/boot/uboot/Makefile.inc#1 branch
.. //depot/projects/vimage-commit3/src/sys/compat/pecoff/imgact_pecoff.c#2 delete
.. //depot/projects/vimage-commit3/src/sys/compat/pecoff/imgact_pecoff.h#2 delete
.. //depot/projects/vimage-commit3/src/sys/conf/NOTES#2 integrate
.. //depot/projects/vimage-commit3/src/sys/conf/files#2 integrate
.. //depot/projects/vimage-commit3/src/sys/conf/kern.mk#2 integrate
.. //depot/projects/vimage-commit3/src/sys/conf/kern.pre.mk#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/aac/aac.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/aac/aac_pci.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/acpi_support/acpi_asus.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/agp/agp_i810.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/ce/ceddk.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/ce/if_ce.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/cp/cpddk.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/cp/if_cp.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/ctau/ctddk.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/ctau/if_ct.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/cx/cxddk.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/cx/if_cx.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/et/if_et.c#1 branch
.. //depot/projects/vimage-commit3/src/sys/dev/et/if_etreg.h#1 branch
.. //depot/projects/vimage-commit3/src/sys/dev/et/if_etvar.h#1 branch
.. //depot/projects/vimage-commit3/src/sys/dev/fe/if_fe.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/fe/if_fe_cbus.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/fe/if_fe_isa.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/fe/if_fe_pccard.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/fe/if_fevar.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/gem/if_gem.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/io/iodev.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/mfi/mfi.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/mii/miidevs#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/mii/rgephy.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/mii/rgephyreg.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/mii/truephy.c#1 branch
.. //depot/projects/vimage-commit3/src/sys/dev/mii/truephyreg.h#1 branch
.. //depot/projects/vimage-commit3/src/sys/dev/mpt/mpt_pci.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/mpt/mpt_user.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/re/if_re.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/sound/pci/atiixp.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/usb/usbdevs#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/usb/uscanner.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/dev/wpi/if_wpi.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/fs/devfs/devfs_rule.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/fs/smbfs/smbfs_node.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/geom/journal/g_journal.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/geom/virstor/g_virstor.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/i386/conf/GENERIC#2 integrate
.. //depot/projects/vimage-commit3/src/sys/i386/i386/bpf_jit_machdep.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/i386/i386/bpf_jit_machdep.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/i386/include/iodev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/i386/include/memdev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/ia64/include/memdev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/kern_alq.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/kern_cpuset.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/kern_descrip.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/kern_intr.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/kern_jail.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/kern_lockf.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/kern_umtx.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/kern_xxx.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/link_elf_obj.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/stack_protector.c#1 branch
.. //depot/projects/vimage-commit3/src/sys/kern/subr_bus.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/sysv_sem.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/uipc_sem.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/uipc_shm.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/uipc_socket.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/vfs_aio.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/kern/vfs_syscalls.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/mips/include/iodev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/mips/include/memdev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/modules/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/modules/ath_rate_amrr/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/modules/et/Makefile#1 branch
.. //depot/projects/vimage-commit3/src/sys/modules/mii/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/modules/nfslockd/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/modules/pecoff/Makefile#2 delete
.. //depot/projects/vimage-commit3/src/sys/modules/ralfw/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/modules/sem/Makefile#2 integrate
.. //depot/projects/vimage-commit3/src/sys/net/if.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/net/if_bridge.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/net/if_gre.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/net/if_gre.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/net/if_loop.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/net/if_var.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/netgraph/netgraph.h#4 integrate
.. //depot/projects/vimage-commit3/src/sys/netinet/in.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/netinet/libalias/alias.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/netinet/libalias/alias_db.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/netinet/libalias/alias_ftp.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/netinet/udp_usrreq.c#4 integrate
.. //depot/projects/vimage-commit3/src/sys/netinet6/in6_rmx.c#4 integrate
.. //depot/projects/vimage-commit3/src/sys/netinet6/ip6_input.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/netinet6/ip6_ipsec.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/netipsec/key.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/nfsclient/nfs.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/nfsclient/nfs_node.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/nfsclient/nfs_vfsops.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/nfsclient/nfs_vnops.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/nfsclient/nfsmount.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/nfsclient/nfsnode.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/nfsserver/nfs_syscalls.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/nlm/nlm.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/nlm/nlm_advlock.c#1 branch
.. //depot/projects/vimage-commit3/src/sys/nlm/nlm_prot.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/nlm/nlm_prot_clnt.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/nlm/nlm_prot_impl.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/nlm/nlm_prot_server.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/pci/if_rlreg.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/pci/viapm.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/powerpc/include/memdev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/rpc/auth_unix.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/rpc/authunix_prot.c#3 integrate
.. //depot/projects/vimage-commit3/src/sys/rpc/clnt.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/rpc/clnt_dg.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/rpc/clnt_rc.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/rpc/clnt_vc.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/rpc/rpcb_clnt.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/rpc/svc_vc.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/security/mac/mac_framework.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/security/mac/mac_policy.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/security/mac/mac_posix_sem.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/security/mac_biba/mac_biba.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/security/mac_mls/mac_mls.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/security/mac_stub/mac_stub.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/security/mac_test/mac_test.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sparc64/include/in_cksum.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sparc64/include/memdev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sun4v/include/in_cksum.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sun4v/include/memdev.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/bus.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/fcntl.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/file.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/jail.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/ksem.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/lockf.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/param.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/priv.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/semaphore.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/socketvar.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/umtx.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/sys/user.h#2 integrate
.. //depot/projects/vimage-commit3/src/sys/vm/vm_kern.c#2 integrate
.. //depot/projects/vimage-commit3/src/sys/vm/vm_map.c#2 integrate
Differences ...
==== //depot/projects/vimage-commit3/src/sys/amd64/amd64/bpf_jit_machdep.c#2 (text+ko) ====
@@ -30,7 +30,7 @@
*/
#include
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.c,v 1.4 2006/01/03 20:26:02 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.c,v 1.6 2008/06/24 20:12:12 jkim Exp $");
#include "opt_bpf.h"
@@ -132,11 +132,11 @@
/* create the procedure header */
PUSH(RBP);
- MOVrq(RBP, RSP);
- MOVoqd(RBP, -8, ESI);
- MOVoqd(RBP, -12, EDX);
+ MOVrq(RSP, RBP);
+ MOVdoq(ESI, -8, RBP);
+ MOVdoq(EDX, -12, RBP);
PUSH(RBX);
- MOVrq(RBX, RDI);
+ MOVrq(RDI, RBX);
for (i = 0; i < nins; i++) {
stream.bpf_pc++;
@@ -146,7 +146,7 @@
return NULL;
case BPF_RET|BPF_K:
- MOVid(EAX, ins->k);
+ MOVid(ins->k, EAX);
POP(RBX);
LEAVE_RET();
break;
@@ -157,119 +157,119 @@
break;
case BPF_LD|BPF_W|BPF_ABS:
- MOVid(ECX, ins->k);
- MOVrd(ESI, ECX);
- ADDib(ECX, sizeof(int));
- CMPodd(ECX, RBP, -12);
+ MOVid(ins->k, ECX);
+ MOVrd(ECX, ESI);
+ ADDib(sizeof(int), ECX);
+ CMPoqd(-12, RBP, ECX);
JLEb(5);
- ZERO_EAX();
+ ZEROrd(EAX);
POP(RBX);
LEAVE_RET();
- MOVobd(EAX, RBX, RSI);
+ MOVobd(RBX, RSI, EAX);
BSWAP(EAX);
break;
case BPF_LD|BPF_H|BPF_ABS:
- ZERO_EAX();
- MOVid(ECX, ins->k);
- MOVrd(ESI, ECX);
- ADDib(ECX, sizeof(short));
- CMPodd(ECX, RBP, -12);
+ ZEROrd(EAX);
+ MOVid(ins->k, ECX);
+ MOVrd(ECX, ESI);
+ ADDib(sizeof(short), ECX);
+ CMPoqd(-12, RBP, ECX);
JLEb(3);
POP(RBX);
LEAVE_RET();
- MOVobw(AX, RBX, RSI);
+ MOVobw(RBX, RSI, AX);
SWAP_AX();
break;
case BPF_LD|BPF_B|BPF_ABS:
- ZERO_EAX();
- MOVid(ECX, ins->k);
- CMPodd(ECX, RBP, -12);
+ ZEROrd(EAX);
+ MOVid(ins->k, ECX);
+ CMPoqd(-12, RBP, ECX);
JLEb(3);
POP(RBX);
LEAVE_RET();
- MOVobb(AL, RBX, RCX);
+ MOVobb(RBX, RCX, AL);
break;
case BPF_LD|BPF_W|BPF_LEN:
- MOVodd(EAX, RBP, -8);
+ MOVoqd(-8, RBP, EAX);
break;
case BPF_LDX|BPF_W|BPF_LEN:
- MOVodd(EDX, RBP, -8);
+ MOVoqd(-8, RBP, EDX);
break;
case BPF_LD|BPF_W|BPF_IND:
- MOVid(ECX, ins->k);
- ADDrd(ECX, EDX);
- MOVrd(ESI, ECX);
- ADDib(ECX, sizeof(int));
- CMPodd(ECX, RBP, -12);
+ MOVid(ins->k, ECX);
+ ADDrd(EDX, ECX);
+ MOVrd(ECX, ESI);
+ ADDib(sizeof(int), ECX);
+ CMPoqd(-12, RBP, ECX);
JLEb(5);
- ZERO_EAX();
+ ZEROrd(EAX);
POP(RBX);
LEAVE_RET();
- MOVobd(EAX, RBX, RSI);
+ MOVobd(RBX, RSI, EAX);
BSWAP(EAX);
break;
case BPF_LD|BPF_H|BPF_IND:
- ZERO_EAX();
- MOVid(ECX, ins->k);
- ADDrd(ECX, EDX);
- MOVrd(ESI, ECX);
- ADDib(ECX, sizeof(short));
- CMPodd(ECX, RBP, -12);
+ ZEROrd(EAX);
+ MOVid(ins->k, ECX);
+ ADDrd(EDX, ECX);
+ MOVrd(ECX, ESI);
+ ADDib(sizeof(short), ECX);
+ CMPoqd(-12, RBP, ECX);
JLEb(3);
POP(RBX);
LEAVE_RET();
- MOVobw(AX, RBX, RSI);
+ MOVobw(RBX, RSI, AX);
SWAP_AX();
break;
case BPF_LD|BPF_B|BPF_IND:
- ZERO_EAX();
- MOVid(ECX, ins->k);
- ADDrd(ECX, EDX);
- CMPodd(ECX, RBP, -12);
+ ZEROrd(EAX);
+ MOVid(ins->k, ECX);
+ ADDrd(EDX, ECX);
+ CMPoqd(-12, RBP, ECX);
JLEb(3);
POP(RBX);
LEAVE_RET();
- MOVobb(AL, RBX, RCX);
+ MOVobb(RBX, RCX, AL);
break;
case BPF_LDX|BPF_MSH|BPF_B:
- MOVid(ECX, ins->k);
- CMPodd(ECX, RBP, -12);
+ MOVid(ins->k, ECX);
+ CMPoqd(-12, RBP, ECX);
JLEb(5);
- ZERO_EAX();
+ ZEROrd(EAX);
POP(RBX);
LEAVE_RET();
- ZERO_EDX();
- MOVobb(DL, RBX, RCX);
- ANDib(DL, 0xf);
- SHLib(EDX, 2);
+ ZEROrd(EDX);
+ MOVobb(RBX, RCX, DL);
+ ANDib(0xf, DL);
+ SHLib(2, EDX);
break;
case BPF_LD|BPF_IMM:
- MOVid(EAX, ins->k);
+ MOVid(ins->k, EAX);
break;
case BPF_LDX|BPF_IMM:
- MOVid(EDX, ins->k);
+ MOVid(ins->k, EDX);
break;
case BPF_LD|BPF_MEM:
- MOViq(RCX, (uintptr_t)mem);
- MOVid(ESI, ins->k * 4);
- MOVobd(EAX, RCX, RSI);
+ MOViq((uintptr_t)mem, RCX);
+ MOVid(ins->k * 4, ESI);
+ MOVobd(RCX, RSI, EAX);
break;
case BPF_LDX|BPF_MEM:
- MOViq(RCX, (uintptr_t)mem);
- MOVid(ESI, ins->k * 4);
- MOVobd(EDX, RCX, RSI);
+ MOViq((uintptr_t)mem, RCX);
+ MOVid(ins->k * 4, ESI);
+ MOVobd(RCX, RSI, EDX);
break;
case BPF_ST:
@@ -278,15 +278,15 @@
* be optimized if the previous instruction
* was already of this type
*/
- MOViq(RCX, (uintptr_t)mem);
- MOVid(ESI, ins->k * 4);
- MOVomd(RCX, RSI, EAX);
+ MOViq((uintptr_t)mem, RCX);
+ MOVid(ins->k * 4, ESI);
+ MOVomd(EAX, RCX, RSI);
break;
case BPF_STX:
- MOViq(RCX, (uintptr_t)mem);
- MOVid(ESI, ins->k * 4);
- MOVomd(RCX, RSI, EDX);
+ MOViq((uintptr_t)mem, RCX);
+ MOVid(ins->k * 4, ESI);
+ MOVomd(EDX, RCX, RSI);
break;
case BPF_JMP|BPF_JA:
@@ -295,7 +295,7 @@
break;
case BPF_JMP|BPF_JGT|BPF_K:
- CMPid(EAX, ins->k);
+ CMPid(ins->k, EAX);
/* 5 is the size of the following JMP */
JG(stream.refs[stream.bpf_pc + ins->jt] -
stream.refs[stream.bpf_pc] + 5 );
@@ -304,7 +304,7 @@
break;
case BPF_JMP|BPF_JGE|BPF_K:
- CMPid(EAX, ins->k);
+ CMPid(ins->k, EAX);
JGE(stream.refs[stream.bpf_pc + ins->jt] -
stream.refs[stream.bpf_pc] + 5);
JMP(stream.refs[stream.bpf_pc + ins->jf] -
@@ -312,7 +312,7 @@
break;
case BPF_JMP|BPF_JEQ|BPF_K:
- CMPid(EAX, ins->k);
+ CMPid(ins->k, EAX);
JE(stream.refs[stream.bpf_pc + ins->jt] -
stream.refs[stream.bpf_pc] + 5);
JMP(stream.refs[stream.bpf_pc + ins->jf] -
@@ -320,8 +320,8 @@
break;
case BPF_JMP|BPF_JSET|BPF_K:
- MOVrd(ECX, EAX);
- ANDid(ECX, ins->k);
+ MOVrd(EAX, ECX);
+ ANDid(ins->k, ECX);
JE(stream.refs[stream.bpf_pc + ins->jf] -
stream.refs[stream.bpf_pc] + 5);
JMP(stream.refs[stream.bpf_pc + ins->jt] -
@@ -329,7 +329,7 @@
break;
case BPF_JMP|BPF_JGT|BPF_X:
- CMPrd(EAX, EDX);
+ CMPrd(EDX, EAX);
JA(stream.refs[stream.bpf_pc + ins->jt] -
stream.refs[stream.bpf_pc] + 5);
JMP(stream.refs[stream.bpf_pc + ins->jf] -
@@ -337,7 +337,7 @@
break;
case BPF_JMP|BPF_JGE|BPF_X:
- CMPrd(EAX, EDX);
+ CMPrd(EDX, EAX);
JAE(stream.refs[stream.bpf_pc + ins->jt] -
stream.refs[stream.bpf_pc] + 5);
JMP(stream.refs[stream.bpf_pc + ins->jf] -
@@ -345,7 +345,7 @@
break;
case BPF_JMP|BPF_JEQ|BPF_X:
- CMPrd(EAX, EDX);
+ CMPrd(EDX, EAX);
JE(stream.refs[stream.bpf_pc + ins->jt] -
stream.refs[stream.bpf_pc] + 5);
JMP(stream.refs[stream.bpf_pc + ins->jf] -
@@ -353,8 +353,8 @@
break;
case BPF_JMP|BPF_JSET|BPF_X:
- MOVrd(ECX, EAX);
- ANDrd(ECX, EDX);
+ MOVrd(EAX, ECX);
+ ANDrd(EDX, ECX);
JE(stream.refs[stream.bpf_pc + ins->jf] -
stream.refs[stream.bpf_pc] + 5);
JMP(stream.refs[stream.bpf_pc + ins->jt] -
@@ -362,46 +362,46 @@
break;
case BPF_ALU|BPF_ADD|BPF_X:
- ADDrd(EAX, EDX);
+ ADDrd(EDX, EAX);
break;
case BPF_ALU|BPF_SUB|BPF_X:
- SUBrd(EAX, EDX);
+ SUBrd(EDX, EAX);
break;
case BPF_ALU|BPF_MUL|BPF_X:
+ MOVrd(EDX, ECX);
+ MULrd(EDX);
MOVrd(ECX, EDX);
- MULrd(EDX);
- MOVrd(EDX, ECX);
break;
case BPF_ALU|BPF_DIV|BPF_X:
- CMPid(EDX, 0);
+ CMPid(0, EDX);
JNEb(5);
- ZERO_EAX();
+ ZEROrd(EAX);
POP(RBX);
LEAVE_RET();
+ MOVrd(EDX, ECX);
+ ZEROrd(EDX);
+ DIVrd(ECX);
MOVrd(ECX, EDX);
- ZERO_EDX();
- DIVrd(ECX);
- MOVrd(EDX, ECX);
break;
case BPF_ALU|BPF_AND|BPF_X:
- ANDrd(EAX, EDX);
+ ANDrd(EDX, EAX);
break;
case BPF_ALU|BPF_OR|BPF_X:
- ORrd(EAX, EDX);
+ ORrd(EDX, EAX);
break;
case BPF_ALU|BPF_LSH|BPF_X:
- MOVrd(ECX, EDX);
+ MOVrd(EDX, ECX);
SHL_CLrb(EAX);
break;
case BPF_ALU|BPF_RSH|BPF_X:
- MOVrd(ECX, EDX);
+ MOVrd(EDX, ECX);
SHR_CLrb(EAX);
break;
@@ -414,34 +414,34 @@
break;
case BPF_ALU|BPF_MUL|BPF_K:
+ MOVrd(EDX, ECX);
+ MOVid(ins->k, EDX);
+ MULrd(EDX);
MOVrd(ECX, EDX);
- MOVid(EDX, ins->k);
- MULrd(EDX);
- MOVrd(EDX, ECX);
break;
case BPF_ALU|BPF_DIV|BPF_K:
+ MOVrd(EDX, ECX);
+ ZEROrd(EDX);
+ MOVid(ins->k, ESI);
+ DIVrd(ESI);
MOVrd(ECX, EDX);
- ZERO_EDX();
- MOVid(ESI, ins->k);
- DIVrd(ESI);
- MOVrd(EDX, ECX);
break;
case BPF_ALU|BPF_AND|BPF_K:
- ANDid(EAX, ins->k);
+ ANDid(ins->k, EAX);
break;
case BPF_ALU|BPF_OR|BPF_K:
- ORid(EAX, ins->k);
+ ORid(ins->k, EAX);
break;
case BPF_ALU|BPF_LSH|BPF_K:
- SHLib(EAX, (ins->k) & 255);
+ SHLib((ins->k) & 0xff, EAX);
break;
case BPF_ALU|BPF_RSH|BPF_K:
- SHRib(EAX, (ins->k) & 255);
+ SHRib((ins->k) & 0xff, EAX);
break;
case BPF_ALU|BPF_NEG:
@@ -449,11 +449,11 @@
break;
case BPF_MISC|BPF_TAX:
- MOVrd(EDX, EAX);
+ MOVrd(EAX, EDX);
break;
case BPF_MISC|BPF_TXA:
- MOVrd(EAX, EDX);
+ MOVrd(EDX, EAX);
break;
}
ins++;
==== //depot/projects/vimage-commit3/src/sys/amd64/amd64/bpf_jit_machdep.h#2 (text+ko) ====
@@ -28,7 +28,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.h,v 1.3 2005/12/06 20:11:07 jkim Exp $
+ * $FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.h,v 1.5 2008/06/24 20:12:12 jkim Exp $
*/
#ifndef _BPF_JIT_MACHDEP_H_
@@ -104,254 +104,252 @@
* native Instruction Macros
*/
-/* mov r32,i32 */
-#define MOVid(r32, i32) do { \
+/* movl i32,r32 */
+#define MOVid(i32, r32) do { \
emitm(&stream, (11 << 4) | (1 << 3) | (r32 & 0x7), 1); \
emitm(&stream, i32, 4); \
} while (0)
-/* mov r64,i64 */
-#define MOViq(r64, i64) do { \
+/* movq i64,r64 */
+#define MOViq(i64, r64) do { \
emitm(&stream, 0x48, 1); \
emitm(&stream, (11 << 4) | (1 << 3) | (r64 & 0x7), 1); \
emitm(&stream, i64, 4); \
emitm(&stream, (i64 >> 32), 4); \
} while (0)
-/* mov dr32,sr32 */
-#define MOVrd(dr32, sr32) do { \
- emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \
+/* movl sr32,dr32 */
+#define MOVrd(sr32, dr32) do { \
+ emitm(&stream, 0x89, 1); \
emitm(&stream, \
- (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \
+ (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \
} while (0)
-/* mov dr64,sr64 */
-#define MOVrq(dr64, sr64) do { \
- emitm(&stream, 0x48, 1); \
- emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \
+/* movq sr64,dr64 */
+#define MOVrq(sr64, dr64) do { \
+ emitm(&stream, 0x8948, 2); \
emitm(&stream, \
- (3 << 6) | ((dr64 & 0x7) << 3) | (sr64 & 0x7), 1); \
+ (3 << 6) | ((sr64 & 0x7) << 3) | (dr64 & 0x7), 1); \
} while (0)
-/* mov dr32,sr64[off] */
-#define MOVodd(dr32, sr64, off) do { \
- emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \
+/* movl off(sr64),dr32 */
+#define MOVoqd(off, sr64, dr32) do { \
+ emitm(&stream, 0x8b, 1); \
emitm(&stream, \
(1 << 6) | ((dr32 & 0x7) << 3) | (sr64 & 0x7), 1); \
emitm(&stream, off, 1); \
} while (0)
-/* mov dr64[off],sr32 */
-#define MOVoqd(dr64, off, sr32) do { \
- emitm(&stream, (8 << 4) | 1 | (1 << 3), 1); \
+/* movl sr32,off(dr64) */
+#define MOVdoq(sr32, off, dr64) do { \
+ emitm(&stream, 0x89, 1); \
emitm(&stream, \
(1 << 6) | ((sr32 & 0x7) << 3) | (dr64 & 0x7), 1); \
emitm(&stream, off, 1); \
} while (0)
-/* mov dr32,sr64[or64] */
-#define MOVobd(dr32, sr64, or64) do { \
- emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \
+/* movl (sr64,or64,1),dr32 */
+#define MOVobd(sr64, or64, dr32) do { \
+ emitm(&stream, 0x8b, 1); \
emitm(&stream, ((dr32 & 0x7) << 3) | 4, 1); \
emitm(&stream, ((or64 & 0x7) << 3) | (sr64 & 0x7), 1); \
} while (0)
-/* mov dr16,sr64[or64] */
-#define MOVobw(dr32, sr64, or64) do { \
- emitm(&stream, 0x66, 1); \
- emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \
- emitm(&stream, ((dr32 & 0x7) << 3) | 4, 1); \
+/* movw (sr64,or64,1),dr16 */
+#define MOVobw(sr64, or64, dr16) do { \
+ emitm(&stream, 0x8b66, 2); \
+ emitm(&stream, ((dr16 & 0x7) << 3) | 4, 1); \
emitm(&stream, ((or64 & 0x7) << 3) | (sr64 & 0x7), 1); \
} while (0)
-/* mov dr8,sr64[or64] */
-#define MOVobb(dr8, sr64, or64) do { \
+/* movb (sr64,or64,1),dr8 */
+#define MOVobb(sr64, or64, dr8) do { \
emitm(&stream, 0x8a, 1); \
emitm(&stream, ((dr8 & 0x7) << 3) | 4, 1); \
emitm(&stream, ((or64 & 0x7) << 3) | (sr64 & 0x7), 1); \
} while (0)
-/* mov [dr64][or64],sr32 */
-#define MOVomd(dr64, or64, sr32) do { \
+/* movl sr32,(dr64,or64,1) */
+#define MOVomd(sr32, dr64, or64) do { \
emitm(&stream, 0x89, 1); \
emitm(&stream, ((sr32 & 0x7) << 3) | 4, 1); \
emitm(&stream, ((or64 & 0x7) << 3) | (dr64 & 0x7), 1); \
} while (0)
-/* bswap dr32 */
+/* bswapl dr32 */
#define BSWAP(dr32) do { \
emitm(&stream, 0xf, 1); \
emitm(&stream, (0x19 << 3) | dr32, 1); \
} while (0)
-/* xchg al,ah */
+/* xchgb %al,%ah */
#define SWAP_AX() do { \
- emitm(&stream, 0x86, 1); \
- emitm(&stream, 0xc4, 1); \
+ emitm(&stream, 0xc486, 2); \
} while (0)
-/* push r64 */
+/* pushq r64 */
#define PUSH(r64) do { \
emitm(&stream, (5 << 4) | (0 << 3) | (r64 & 0x7), 1); \
} while (0)
-/* pop r64 */
+/* popq r64 */
#define POP(r64) do { \
emitm(&stream, (5 << 4) | (1 << 3) | (r64 & 0x7), 1); \
} while (0)
-/* leave/ret */
+/* leaveq/retq */
#define LEAVE_RET() do { \
- emitm(&stream, 0xc9, 1); \
- emitm(&stream, 0xc3, 1); \
+ emitm(&stream, 0xc3c9, 2); \
} while (0)
-/* add dr32,sr32 */
-#define ADDrd(dr32, sr32) do { \
- emitm(&stream, 0x03, 1); \
+/* addl sr32,dr32 */
+#define ADDrd(sr32, dr32) do { \
+ emitm(&stream, 0x01, 1); \
emitm(&stream, \
- (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \
+ (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \
} while (0)
-/* add eax,i32 */
+/* addl i32,%eax */
#define ADD_EAXi(i32) do { \
emitm(&stream, 0x05, 1); \
emitm(&stream, i32, 4); \
} while (0)
-/* add r32,i32 */
-#define ADDid(r32, i32) do { \
+/* addl i32,r32 */
+#define ADDid(i32, r32) do { \
emitm(&stream, 0x81, 1); \
emitm(&stream, (24 << 3) | r32, 1); \
emitm(&stream, i32, 4); \
} while (0)
-/* add r32,i8 */
-#define ADDib(r32, i8) do { \
+/* addl i8,r32 */
+#define ADDib(i8, r32) do { \
emitm(&stream, 0x83, 1); \
emitm(&stream, (24 << 3) | r32, 1); \
emitm(&stream, i8, 1); \
} while (0)
-/* sub dr32,sr32 */
-#define SUBrd(dr32, sr32) do { \
- emitm(&stream, 0x2b, 1); \
+/* subl sr32,dr32 */
+#define SUBrd(sr32, dr32) do { \
+ emitm(&stream, 0x29, 1); \
emitm(&stream, \
- (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \
+ (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \
} while (0)
-/* sub eax,i32 */
+/* subl i32,%eax */
#define SUB_EAXi(i32) do { \
emitm(&stream, 0x2d, 1); \
emitm(&stream, i32, 4); \
} while (0)
-/* mul r32 */
+/* mull r32 */
#define MULrd(r32) do { \
emitm(&stream, 0xf7, 1); \
emitm(&stream, (7 << 5) | (r32 & 0x7), 1); \
} while (0)
-/* div r32 */
+/* divl r32 */
#define DIVrd(r32) do { \
emitm(&stream, 0xf7, 1); \
emitm(&stream, (15 << 4) | (r32 & 0x7), 1); \
} while (0)
-/* and r8,i8 */
-#define ANDib(r8, i8) do { \
- emitm(&stream, 0x80, 1); \
- emitm(&stream, (7 << 5) | r8, 1); \
+/* andb i8,r8 */
+#define ANDib(i8, r8) do { \
+ if (r8 == AL) { \
+ emitm(&stream, 0x24, 1); \
+ } else { \
+ emitm(&stream, 0x80, 1); \
+ emitm(&stream, (7 << 5) | r8, 1); \
+ } \
emitm(&stream, i8, 1); \
} while (0)
-/* and r32,i32 */
-#define ANDid(r32, i32) do { \
+/* andl i32,r32 */
+#define ANDid(i32, r32) do { \
if (r32 == EAX) { \
emitm(&stream, 0x25, 1); \
- emitm(&stream, i32, 4); \
} else { \
emitm(&stream, 0x81, 1); \
emitm(&stream, (7 << 5) | r32, 1); \
- emitm(&stream, i32, 4); \
} \
+ emitm(&stream, i32, 4); \
} while (0)
-/* and dr32,sr32 */
-#define ANDrd(dr32, sr32) do { \
- emitm(&stream, 0x23, 1); \
+/* andl sr32,dr32 */
+#define ANDrd(sr32, dr32) do { \
+ emitm(&stream, 0x21, 1); \
emitm(&stream, \
- (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \
+ (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \
} while (0)
-/* or dr32,sr32 */
-#define ORrd(dr32, sr32) do { \
- emitm(&stream, 0x0b, 1); \
+/* orl sr32,dr32 */
+#define ORrd(sr32, dr32) do { \
+ emitm(&stream, 0x09, 1); \
emitm(&stream, \
- (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \
+ (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \
} while (0)
-/* or r32,i32 */
-#define ORid(r32, i32) do { \
+/* orl i32,r32 */
+#define ORid(i32, r32) do { \
if (r32 == EAX) { \
emitm(&stream, 0x0d, 1); \
- emitm(&stream, i32, 4); \
} else { \
emitm(&stream, 0x81, 1); \
emitm(&stream, (25 << 3) | r32, 1); \
- emitm(&stream, i32, 4); \
} \
+ emitm(&stream, i32, 4); \
} while (0)
-/* shl r32,i8 */
-#define SHLib(r32, i8) do { \
+/* shll i8,r32 */
+#define SHLib(i8, r32) do { \
emitm(&stream, 0xc1, 1); \
emitm(&stream, (7 << 5) | (r32 & 0x7), 1); \
emitm(&stream, i8, 1); \
} while (0)
-/* shl dr32,cl */
+/* shll %cl,dr32 */
#define SHL_CLrb(dr32) do { \
emitm(&stream, 0xd3, 1); \
emitm(&stream, (7 << 5) | (dr32 & 0x7), 1); \
} while (0)
-/* shr r32,i8 */
-#define SHRib(r32, i8) do { \
+/* shrl i8,r32 */
+#define SHRib(i8, r32) do { \
emitm(&stream, 0xc1, 1); \
emitm(&stream, (29 << 3) | (r32 & 0x7), 1); \
emitm(&stream, i8, 1); \
} while (0)
-/* shr dr32,cl */
+/* shrl %cl,dr32 */
#define SHR_CLrb(dr32) do { \
emitm(&stream, 0xd3, 1); \
emitm(&stream, (29 << 3) | (dr32 & 0x7), 1); \
} while (0)
-/* neg r32 */
+/* negl r32 */
#define NEGd(r32) do { \
emitm(&stream, 0xf7, 1); \
emitm(&stream, (27 << 3) | (r32 & 0x7), 1); \
} while (0)
-/* cmp dr32,sr64[off] */
-#define CMPodd(dr32, sr64, off) do { \
- emitm(&stream, (3 << 4) | 3 | (1 << 3), 1); \
+/* cmpl off(sr64),dr32 */
+#define CMPoqd(off, sr64, dr32) do { \
+ emitm(&stream, 0x3b, 1); \
emitm(&stream, \
(1 << 6) | ((dr32 & 0x7) << 3) | (sr64 & 0x7), 1); \
emitm(&stream, off, 1); \
} while (0)
-/* cmp dr32,sr32 */
-#define CMPrd(dr32, sr32) do { \
- emitm(&stream, 0x3b, 1); \
+/* cmpl sr32,dr32 */
+#define CMPrd(sr32, dr32) do { \
+ emitm(&stream, 0x39, 1); \
emitm(&stream, \
- (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \
+ (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \
} while (0)
-/* cmp dr32,i32 */
-#define CMPid(dr32, i32) do { \
+/* cmpl i32,dr32 */
+#define CMPid(i32, dr32) do { \
if (dr32 == EAX){ \
emitm(&stream, 0x3d, 1); \
emitm(&stream, i32, 4); \
@@ -362,7 +360,7 @@
} \
} while (0)
-/* jne off32 */
+/* jne off8 */
#define JNEb(off8) do { \
emitm(&stream, 0x75, 1); \
emitm(&stream, off8, 1); \
@@ -370,15 +368,13 @@
/* je off32 */
#define JE(off32) do { \
- emitm(&stream, 0x0f, 1); \
- emitm(&stream, 0x84, 1); \
+ emitm(&stream, 0x840f, 2); \
emitm(&stream, off32, 4); \
} while (0)
/* jle off32 */
#define JLE(off32) do { \
- emitm(&stream, 0x0f, 1); \
- emitm(&stream, 0x8e, 1); \
+ emitm(&stream, 0x8e0f, 2); \
emitm(&stream, off32, 4); \
} while (0)
@@ -390,29 +386,25 @@
/* ja off32 */
#define JA(off32) do { \
>>> TRUNCATED FOR MAIL (1000 lines) <<<
From trasz at FreeBSD.org Thu Jul 3 05:17:58 2008
From: trasz at FreeBSD.org (Edward Tomasz Napierala)
Date: Thu Jul 3 05:18:00 2008
Subject: PERFORCE change 144531 for review
Message-ID: <200807030517.m635HvJm077159@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144531
Change 144531 by trasz@trasz_traszkan on 2008/07/03 05:17:32
Add support for the new ACLs to mount(8).
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/sbin/mount/mntopts.h#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sbin/mount/mount.c#2 edit
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/sbin/mount/mntopts.h#2 (text+ko) ====
@@ -54,6 +54,7 @@
#define MOPT_SNAPSHOT { "snapshot", 0, MNT_SNAPSHOT, 0 }
#define MOPT_MULTILABEL { "multilabel", 0, MNT_MULTILABEL, 0 }
#define MOPT_ACLS { "acls", 0, MNT_ACLS, 0 }
+#define MOPT_NFS4ACLS { "nfs4acls", 0, MNT_NFS4ACLS, 0 }
/* Control flags. */
#define MOPT_FORCE { "force", 0, MNT_FORCE, 0 }
@@ -87,7 +88,8 @@
MOPT_NOCLUSTERR, \
MOPT_NOCLUSTERW, \
MOPT_MULTILABEL, \
- MOPT_ACLS
+ MOPT_ACLS, \
+ MOPT_NFS4ACLS
void getmntopts(const char *, const struct mntopt *, int *, int *);
void rmslashes(char *, char *);
==== //depot/projects/soc2008/trasz_nfs4acl/sbin/mount/mount.c#2 (text+ko) ====
@@ -107,6 +107,7 @@
{ MNT_SOFTDEP, "soft-updates" },
{ MNT_MULTILABEL, "multilabel" },
{ MNT_ACLS, "acls" },
+ { MNT_NFS4ACLS, "nfs4acls" },
{ MNT_GJOURNAL, "gjournal" },
{ 0, NULL }
};
@@ -877,6 +878,7 @@
if (flags & MNT_SUIDDIR) res = catopt(res, "suiddir");
if (flags & MNT_MULTILABEL) res = catopt(res, "multilabel");
if (flags & MNT_ACLS) res = catopt(res, "acls");
+ if (flags & MNT_NFS4ACLS) res = catopt(res, "nfs4acls");
return (res);
}
From julian at FreeBSD.org Thu Jul 3 08:17:59 2008
From: julian at FreeBSD.org (Julian Elischer)
Date: Thu Jul 3 08:18:00 2008
Subject: PERFORCE change 144536 for review
Message-ID: <200807030817.m638HwNe098388@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144536
Change 144536 by julian@julian_trafmon1 on 2008/07/03 08:17:38
Fix bad integration
Affected files ...
.. //depot/projects/vimage/src/sys/netinet/tcp_syncache.h#11 edit
Differences ...
==== //depot/projects/vimage/src/sys/netinet/tcp_syncache.h#11 (text+ko) ====
@@ -52,7 +52,7 @@
void syncache_chkrst(struct in_conninfo *, struct tcphdr *);
void syncache_badack(struct in_conninfo *);
int syncache_pcbcount(void);
-int syncache_pcblist(struct sysctl_req *req, int max_pcbs, int *pcbs_exported);
+int syncache_pcblist(struct sysctl_req *req, int max_pcbs,
int *pcbs_exported);
struct syncache {
From julian at FreeBSD.org Thu Jul 3 08:26:07 2008
From: julian at FreeBSD.org (Julian Elischer)
Date: Thu Jul 3 08:26:10 2008
Subject: PERFORCE change 144537 for review
Message-ID: <200807030826.m638Q62M099184@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144537
Change 144537 by julian@julian_trafmon1 on 2008/07/03 08:25:39
shuffle includes
Affected files ...
.. //depot/projects/vimage/src/sys/netinet6/in6_gif.c#9 edit
.. //depot/projects/vimage/src/sys/netinet6/vinet6.h#16 edit
Differences ...
==== //depot/projects/vimage/src/sys/netinet6/in6_gif.c#9 (text+ko) ====
@@ -58,11 +58,11 @@
#endif
#include
#ifdef INET6
-#include
#include
#include
#include
#include
+#include
#endif
#include
#include
==== //depot/projects/vimage/src/sys/netinet6/vinet6.h#16 (text+ko) ====
@@ -38,6 +38,7 @@
#include
#include
#include
+#include
#include
#define INIT_VNET_INET6(vnet) \
From julian at FreeBSD.org Thu Jul 3 09:14:57 2008
From: julian at FreeBSD.org (Julian Elischer)
Date: Thu Jul 3 09:14:59 2008
Subject: PERFORCE change 144541 for review
Message-ID: <200807030914.m639EuHi013839@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144541
Change 144541 by julian@julian_trafmon1 on 2008/07/03 09:14:25
ifnet_byindex() is no longer a macro so it can not be onthe LHS.
use ifnet_setbyindex() instead.
Affected files ...
.. //depot/projects/vimage/src/sys/kern/kern_vimage.c#64 edit
Differences ...
==== //depot/projects/vimage/src/sys/kern/kern_vimage.c#64 (text+ko) ====
@@ -293,7 +293,7 @@
do {
INIT_VNET_NET(curvnet);
- ifnet_byindex(ifp->if_index) = NULL;
+ ifnet_setbyindex(ifp->if_index, NULL);
/* XXX: should be locked with if_findindex() */
while (V_if_index > 0 && ifnet_byindex(V_if_index) == NULL)
V_if_index--;
@@ -319,7 +319,7 @@
V_if_index = ifp->if_index;
if (V_if_index >= V_if_indexlim)
if_grow();
- ifnet_byindex(ifp->if_index) = ifp;
+ ifnet_setbyindex(ifp->if_index, ifp);
/* Rename the ifnet */
if (new_vnet == ifp->if_home_vnet) {
From julian at FreeBSD.org Thu Jul 3 09:22:04 2008
From: julian at FreeBSD.org (Julian Elischer)
Date: Thu Jul 3 09:22:06 2008
Subject: PERFORCE change 144542 for review
Message-ID: <200807030922.m639M3CU015158@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144542
Change 144542 by julian@julian_trafmon1 on 2008/07/03 09:21:09
make ifnet_setbyindex non-static
Affected files ...
.. //depot/projects/vimage/src/sys/net/if.c#29 edit
.. //depot/projects/vimage/src/sys/net/if_var.h#15 edit
Differences ...
==== //depot/projects/vimage/src/sys/net/if.c#29 (text+ko) ====
@@ -198,7 +198,7 @@
return (ifp);
}
-static void
+void
ifnet_setbyindex(u_short idx, struct ifnet *ifp)
{
==== //depot/projects/vimage/src/sys/net/if_var.h#15 (text+ko) ====
@@ -650,6 +650,7 @@
struct cdev *ife_dev;
};
+void ifnet_setbyindex(u_short idx, struct ifnet *ifp);
struct ifnet *ifnet_byindex(u_short idx);
/*
* Given the index, ifaddr_byindex() returns the one and only
From julian at FreeBSD.org Thu Jul 3 09:32:14 2008
From: julian at FreeBSD.org (Julian Elischer)
Date: Thu Jul 3 09:32:17 2008
Subject: PERFORCE change 144543 for review
Message-ID: <200807030932.m639WD4A026172@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144543
Change 144543 by julian@julian_trafmon1 on 2008/07/03 09:31:58
ifnet_byindex and friends need INIT_VNET_NET()
Affected files ...
.. //depot/projects/vimage/src/sys/net/if.c#30 edit
Differences ...
==== //depot/projects/vimage/src/sys/net/if.c#30 (text+ko) ====
@@ -151,12 +151,12 @@
static int if_indexlim;
static struct knlist ifklist;
-#endif /* !VIMAGE */
/*
* Table of ifnet/cdev by index. Locked with ifnet_lock.
*/
static struct ifindex_entry *ifindex_table = NULL;
+#endif /* !VIMAGE */
static void filt_netdetach(struct knote *kn);
static int filt_netdev(struct knote *kn, long hint);
@@ -190,10 +190,11 @@
struct ifnet *
ifnet_byindex(u_short idx)
{
+ INIT_VNET_NET(curvnet);
struct ifnet *ifp;
IFNET_RLOCK();
- ifp = ifindex_table[idx].ife_ifnet;
+ ifp = V_ifindex_table[idx].ife_ifnet;
IFNET_RUNLOCK();
return (ifp);
}
@@ -202,9 +203,10 @@
ifnet_setbyindex(u_short idx, struct ifnet *ifp)
{
+ INIT_VNET_NET(curvnet);
IFNET_WLOCK_ASSERT();
- ifindex_table[idx].ife_ifnet = ifp;
+ V_ifindex_table[idx].ife_ifnet = ifp;
}
struct ifaddr *
@@ -221,10 +223,11 @@
struct cdev *
ifdev_byindex(u_short idx)
{
+ INIT_VNET_NET(curvnet);
struct cdev *cdev;
IFNET_RLOCK();
- cdev = ifindex_table[idx].ife_dev;
+ cdev = V_ifindex_table[idx].ife_dev;
IFNET_RUNLOCK();
return (cdev);
}
@@ -233,8 +236,9 @@
ifdev_setbyindex(u_short idx, struct cdev *cdev)
{
+ INIT_VNET_NET(curvnet);
IFNET_WLOCK();
- ifindex_table[idx].ife_dev = cdev;
+ V_ifindex_table[idx].ife_dev = cdev;
IFNET_WUNLOCK();
}
@@ -268,7 +272,6 @@
static int
netioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
{
- INIT_VNET_NET(curvnet);
struct ifnet *ifp;
int error, idx;
@@ -379,15 +382,8 @@
vnet_net_iattach(NULL);
#endif
IFNET_LOCK_INIT();
-#ifdef VIMAGE
- if (IS_DEFAULT_VNET(curvnet)) {
- INIT_VNET_NET(curvnet);
-#endif
ifdev_setbyindex(0, make_dev(&net_cdevsw, 0, UID_ROOT, GID_WHEEL,
0600, "network"));
-#ifdef VIMAGE
- }
-#endif
if_clone_init();
}
From hselasky at FreeBSD.org Thu Jul 3 09:36:18 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Thu Jul 3 09:36:21 2008
Subject: PERFORCE change 144544 for review
Message-ID: <200807030936.m639aIee030283@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144544
Change 144544 by hselasky@hselasky_laptop001 on 2008/07/03 09:36:05
USB ethernet related:
- Add check for interface index to all probe functions.
- Fix locking in miibus and ioctl callbacks to avoid
recursive locking.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_aue2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_aue2_reg.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_axe2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_axe2_reg.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_cdce2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_cue2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_cue2_reg.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_kue2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_kue2_reg.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_rue2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_rue2_reg.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_udav2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/ethernet/if_udav2_reg.h#3 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_aue2.c#3 (text+ko) ====
@@ -471,8 +471,15 @@
{
struct aue_softc *sc = device_get_softc(dev);
uint16_t i;
+ uint8_t do_unlock;
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
/*
* The Am79C901 HomePNA PHY actually contains
@@ -519,8 +526,9 @@
i = aue_cfg_csr_read_2(sc, AUE_PHY_DATA);
done:
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
-
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
return (i);
}
@@ -529,11 +537,18 @@
{
struct aue_softc *sc = device_get_softc(dev);
uint16_t i;
+ uint8_t do_unlock;
if (phy == 3) {
return (0);
}
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
aue_cfg_csr_write_2(sc, AUE_PHY_DATA, data);
aue_cfg_csr_write_1(sc, AUE_PHY_ADDR, phy);
@@ -554,8 +569,9 @@
}
}
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
-
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
return (0);
}
@@ -564,8 +580,15 @@
{
struct aue_softc *sc = device_get_softc(dev);
struct mii_data *mii = GET_MII(sc);
+ uint8_t do_unlock;
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
AUE_CFG_CLRBIT(sc, AUE_CTL0, AUE_CTL0_RX_ENB | AUE_CTL0_TX_ENB);
@@ -594,8 +617,9 @@
auxmode = aue_cfg_miibus_readreg(dev, 0, 0x1b);
aue_cfg_miibus_writereg(dev, 0, 0x1b, auxmode | 0x04);
}
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
-
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
return;
}
@@ -705,7 +729,10 @@
if (uaa->usb2_mode != USB_MODE_HOST) {
return (ENXIO);
}
- if (uaa->info.bConfigIndex != 0) {
+ if (uaa->info.bConfigIndex != AUE_CONFIG_INDEX) {
+ return (ENXIO);
+ }
+ if (uaa->info.bIfaceIndex != AUE_IFACE_IDX) {
return (ENXIO);
}
return (usb2_lookup_id_by_uaa(aue_devs, sizeof(aue_devs), uaa));
@@ -1402,11 +1429,9 @@
struct mii_data *mii;
int error = 0;
- mtx_lock(&(sc->sc_mtx));
-
switch (command) {
case SIOCSIFFLAGS:
-
+ mtx_lock(&(sc->sc_mtx));
if (ifp->if_flags & IFF_UP) {
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
usb2_config_td_queue_command
@@ -1424,13 +1449,16 @@
&aue_cfg_stop, 0, 0);
}
}
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCADDMULTI:
case SIOCDELMULTI:
+ mtx_lock(&(sc->sc_mtx));
usb2_config_td_queue_command
(&(sc->sc_config_td), &aue_config_copy,
&aue_cfg_setmulti, 0, 0);
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCGIFMEDIA:
@@ -1448,9 +1476,6 @@
error = ether_ioctl(ifp, command, data);
break;
}
-
- mtx_unlock(&(sc->sc_mtx));
-
return (error);
}
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_aue2_reg.h#3 (text+ko) ====
@@ -49,7 +49,7 @@
#define AUE_UR_READREG 0xF0
#define AUE_UR_WRITEREG 0xF1
-#define AUE_CONFIG_NO 1
+#define AUE_CONFIG_INDEX 0 /* config number 1 */
#define AUE_IFACE_IDX 0
/*
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_axe2.c#3 (text+ko) ====
@@ -325,8 +325,15 @@
{
struct axe_softc *sc = device_get_softc(dev);
uint16_t val;
+ uint8_t do_unlock;
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
#if 0
/*
@@ -357,8 +364,9 @@
sc->sc_phyaddrs[0] = phy;
}
done:
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
-
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
return (val);
}
@@ -366,17 +374,25 @@
axe_cfg_miibus_writereg(device_t dev, int phy, int reg, int val)
{
struct axe_softc *sc = device_get_softc(dev);
+ uint8_t do_unlock;
val = htole16(val);
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
axe_cfg_cmd(sc, AXE_CMD_MII_OPMODE_SW, 0, 0, NULL);
axe_cfg_cmd(sc, AXE_CMD_MII_WRITE_REG, reg, phy, &val);
axe_cfg_cmd(sc, AXE_CMD_MII_OPMODE_HW, 0, 0, NULL);
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
-
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
return (0);
}
@@ -386,8 +402,15 @@
struct axe_softc *sc = device_get_softc(dev);
struct mii_data *mii = GET_MII(sc);
uint16_t val;
+ uint8_t do_unlock;
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
if ((mii->mii_media_active & IFM_GMASK) == IFM_FDX)
val = AXE_MEDIA_FULL_DUPLEX;
@@ -411,8 +434,9 @@
}
}
axe_cfg_cmd(sc, AXE_CMD_WRITE_MEDIA, 0, val, NULL);
-
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
return;
}
@@ -467,10 +491,8 @@
struct axe_softc *sc = ifp->if_softc;
mtx_lock(&(sc->sc_mtx));
-
ifmr->ifm_active = sc->sc_media_active;
ifmr->ifm_status = sc->sc_media_status;
-
mtx_unlock(&(sc->sc_mtx));
return;
@@ -550,7 +572,10 @@
if (uaa->usb2_mode != USB_MODE_HOST) {
return (ENXIO);
}
- if (uaa->info.bConfigIndex != 0) {
+ if (uaa->info.bConfigIndex != AXE_CONFIG_IDX) {
+ return (ENXIO);
+ }
+ if (uaa->info.bIfaceIndex != AXE_IFACE_IDX) {
return (ENXIO);
}
return (usb2_lookup_id_by_uaa(axe_devs, sizeof(axe_devs), uaa));
@@ -1364,11 +1389,9 @@
struct mii_data *mii;
int error = 0;
- mtx_lock(&(sc->sc_mtx));
-
switch (command) {
case SIOCSIFFLAGS:
-
+ mtx_lock(&(sc->sc_mtx));
if (ifp->if_flags & IFF_UP) {
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
usb2_config_td_queue_command
@@ -1386,13 +1409,16 @@
&axe_cfg_stop, 0, 0);
}
}
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCADDMULTI:
case SIOCDELMULTI:
+ mtx_lock(&(sc->sc_mtx));
usb2_config_td_queue_command
(&(sc->sc_config_td), &axe_config_copy,
&axe_cfg_setmulti, 0, 0);
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCGIFMEDIA:
@@ -1410,9 +1436,6 @@
error = ether_ioctl(ifp, command, data);
break;
}
-
- mtx_unlock(&(sc->sc_mtx));
-
return (error);
}
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_axe2_reg.h#3 (text+ko) ====
@@ -143,7 +143,7 @@
#define AXE_CTL_READ 0x01
#define AXE_CTL_WRITE 0x02
-#define AXE_CONFIG_NO 1
+#define AXE_CONFIG_IDX 0 /* config number 1 */
#define AXE_IFACE_IDX 0
/* The interrupt endpoint is currently unused by the ASIX part. */
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_cdce2.c#3 (text+ko) ====
@@ -514,11 +514,6 @@
/* start the interrupt transfer, if any */
mtx_lock(&(sc->sc_mtx));
-#ifdef CDCE_DO_BENCHMARK
- usb2_transfer_start(sc->sc_xfer[0]);
- usb2_transfer_start(sc->sc_xfer[1]);
- device_printf(dev, "benchmarking enabled\n");
-#endif
usb2_transfer_start(sc->sc_xfer[4]);
mtx_unlock(&(sc->sc_mtx));
@@ -953,14 +948,14 @@
cdce_suspend(device_t dev)
{
device_printf(dev, "Suspending\n");
- return 0;
+ return (0);
}
static int
cdce_resume(device_t dev)
{
device_printf(dev, "Resuming\n");
- return 0;
+ return (0);
}
static int
@@ -969,10 +964,9 @@
struct cdce_softc *sc = ifp->if_softc;
int error = 0;
- mtx_lock(&(sc->sc_mtx));
-
switch (command) {
case SIOCSIFFLAGS:
+ mtx_lock(&(sc->sc_mtx));
if (ifp->if_flags & IFF_UP) {
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
cdce_init_cb(sc);
@@ -982,6 +976,7 @@
cdce_stop(sc);
}
}
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCSIFMEDIA:
@@ -994,9 +989,6 @@
error = ether_ioctl(ifp, command, data);
break;
}
-
- mtx_unlock(&(sc->sc_mtx));
-
return (error);
}
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_cue2.c#3 (text+ko) ====
@@ -385,7 +385,10 @@
if (uaa->usb2_mode != USB_MODE_HOST) {
return (ENXIO);
}
- if (uaa->info.bConfigIndex != 0) {
+ if (uaa->info.bConfigIndex != CUE_CONFIG_IDX) {
+ return (ENXIO);
+ }
+ if (uaa->info.bIfaceIndex != CUE_IFACE_IDX) {
return (ENXIO);
}
return (usb2_lookup_id_by_uaa(cue_devs, sizeof(cue_devs), uaa));
@@ -842,10 +845,9 @@
struct cue_softc *sc = ifp->if_softc;
int error = 0;
- mtx_lock(&(sc->sc_mtx));
-
switch (command) {
case SIOCSIFFLAGS:
+ mtx_lock(&(sc->sc_mtx));
if (ifp->if_flags & IFF_UP) {
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
usb2_config_td_queue_command
@@ -863,22 +865,22 @@
&cue_cfg_stop, 0, 0);
}
}
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCADDMULTI:
case SIOCDELMULTI:
+ mtx_lock(&(sc->sc_mtx));
usb2_config_td_queue_command
(&(sc->sc_config_td), &cue_config_copy,
&cue_cfg_promisc_upd, 0, 0);
+ mtx_unlock(&(sc->sc_mtx));
break;
default:
error = ether_ioctl(ifp, command, data);
break;
}
-
- mtx_unlock(&(sc->sc_mtx));
-
return (error);
}
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_cue2_reg.h#3 (text+ko) ====
@@ -109,7 +109,7 @@
#define CUE_CTL_READ 0x01
#define CUE_CTL_WRITE 0x02
-#define CUE_CONFIG_NO 1
+#define CUE_CONFIG_IDX 0 /* config number 1 */
#define CUE_IFACE_IDX 0
/* The interrupt endpoint is currently unused by the KLSI part. */
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_kue2.c#3 (text+ko) ====
@@ -443,10 +443,13 @@
struct usb2_attach_arg *uaa = device_get_ivars(dev);
if (uaa->usb2_mode != USB_MODE_HOST) {
- return ((ENXIO));
+ return (ENXIO);
+ }
+ if (uaa->info.bConfigIndex != KUE_CONFIG_IDX) {
+ return (ENXIO);
}
- if (uaa->info.bConfigIndex != 0) {
- return ((ENXIO));
+ if (uaa->info.bIfaceIndex != KUE_IFACE_IDX) {
+ return (ENXIO);
}
return (usb2_lookup_id_by_uaa(kue_devs, sizeof(kue_devs), uaa));
}
@@ -881,10 +884,9 @@
struct kue_softc *sc = ifp->if_softc;
int error = 0;
- mtx_lock(&(sc->sc_mtx));
-
switch (command) {
case SIOCSIFFLAGS:
+ mtx_lock(&(sc->sc_mtx));
if (ifp->if_flags & IFF_UP) {
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
usb2_config_td_queue_command
@@ -902,22 +904,22 @@
&kue_cfg_stop, 0, 0);
}
}
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCADDMULTI:
case SIOCDELMULTI:
+ mtx_lock(&(sc->sc_mtx));
usb2_config_td_queue_command
(&(sc->sc_config_td), &kue_config_copy,
&kue_cfg_promisc_upd, 0, 0);
+ mtx_unlock(&(sc->sc_mtx));
break;
default:
error = ether_ioctl(ifp, command, data);
break;
}
-
- mtx_unlock(&(sc->sc_mtx));
-
return (error);
}
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_kue2_reg.h#3 (text+ko) ====
@@ -111,7 +111,7 @@
#define KUE_CTL_READ 0x01
#define KUE_CTL_WRITE 0x02
-#define KUE_CONFIG_NO 1
+#define KUE_CONFIG_IDX 0 /* config number 1 */
#define KUE_IFACE_IDX 0
/* The interrupt endpoint is currently unused by the KLSI part. */
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_rue2.c#3 (text+ko) ====
@@ -370,11 +370,18 @@
struct rue_softc *sc = device_get_softc(dev);
uint16_t rval;
uint16_t ruereg;
+ uint8_t do_unlock;
if (phy != 0) { /* RTL8150 supports PHY == 0, only */
return (0);
}
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
switch (reg) {
case MII_BMCR:
@@ -408,8 +415,9 @@
rval = rue_cfg_csr_read_2(sc, ruereg);
done:
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
-
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
return (rval);
}
@@ -418,11 +426,18 @@
{
struct rue_softc *sc = device_get_softc(dev);
uint16_t ruereg;
+ uint8_t do_unlock;
if (phy != 0) { /* RTL8150 supports PHY == 0, only */
return (0);
}
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
switch (reg) {
case MII_BMCR:
@@ -454,8 +469,9 @@
}
rue_cfg_csr_write_2(sc, ruereg, data);
done:
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
-
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
return (0);
}
@@ -476,8 +492,15 @@
struct rue_softc *sc = device_get_softc(dev);
struct mii_data *mii = GET_MII(sc);
uint16_t bmcr;
+ uint8_t do_unlock;
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
RUE_CFG_CLRBIT(sc, RUE_CR, (RUE_CR_RE | RUE_CR_TE));
@@ -497,7 +520,9 @@
RUE_CFG_SETBIT(sc, RUE_CR, (RUE_CR_RE | RUE_CR_TE));
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
#endif
return;
}
@@ -599,10 +624,13 @@
struct usb2_attach_arg *uaa = device_get_ivars(dev);
if (uaa->usb2_mode != USB_MODE_HOST) {
- return ((ENXIO));
+ return (ENXIO);
+ }
+ if (uaa->info.bConfigIndex != RUE_CONFIG_IDX) {
+ return (ENXIO);
}
- if (uaa->info.bConfigIndex != 0) {
- return ((ENXIO));
+ if (uaa->info.bIfaceIndex != RUE_IFACE_IDX) {
+ return (ENXIO);
}
return (usb2_lookup_id_by_uaa(rue_devs, sizeof(rue_devs), uaa));
}
@@ -1236,10 +1264,10 @@
struct mii_data *mii;
int error = 0;
- mtx_lock(&(sc->sc_mtx));
-
switch (command) {
case SIOCSIFFLAGS:
+
+ mtx_lock(&(sc->sc_mtx));
if (ifp->if_flags & IFF_UP) {
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
usb2_config_td_queue_command
@@ -1257,13 +1285,16 @@
&rue_cfg_stop, 0, 0);
}
}
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCADDMULTI:
case SIOCDELMULTI:
+ mtx_lock(&(sc->sc_mtx));
usb2_config_td_queue_command
(&(sc->sc_config_td), &rue_config_copy,
&rue_cfg_promisc_upd, 0, 0);
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCGIFMEDIA:
@@ -1281,9 +1312,6 @@
error = ether_ioctl(ifp, command, data);
break;
}
-
- mtx_unlock(&(sc->sc_mtx));
-
return (error);
}
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_rue2_reg.h#3 (text+ko) ====
@@ -26,7 +26,7 @@
* $FreeBSD: src/sys/dev/usb/if_ruereg.h,v 1.8 2007/07/09 20:56:39 imp Exp $
*/
-#define RUE_CONFIG_NO 1
+#define RUE_CONFIG_IDX 0 /* config number 1 */
#define RUE_IFACE_IDX 0
#define RUE_ENDPT_MAX 6
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_udav2.c#3 (text+ko) ====
@@ -244,10 +244,13 @@
struct usb2_attach_arg *uaa = device_get_ivars(dev);
if (uaa->usb2_mode != USB_MODE_HOST) {
- return ((ENXIO));
+ return (ENXIO);
+ }
+ if (uaa->info.bConfigIndex != UDAV_CONFIG_INDEX) {
+ return (ENXIO);
}
- if (uaa->info.bConfigIndex != 0) {
- return ((ENXIO));
+ if (uaa->info.bIfaceIndex != UDAV_IFACE_INDEX) {
+ return (ENXIO);
}
return (usb2_lookup_id_by_uaa(udav_devs, sizeof(udav_devs), uaa));
}
@@ -1036,10 +1039,9 @@
struct mii_data *mii;
int error = 0;
- mtx_lock(&(sc->sc_mtx));
-
switch (cmd) {
case SIOCSIFFLAGS:
+ mtx_lock(&(sc->sc_mtx));
if (ifp->if_flags & IFF_UP) {
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
usb2_config_td_queue_command
@@ -1057,13 +1059,16 @@
&udav_cfg_stop, 0, 0);
}
}
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCADDMULTI:
case SIOCDELMULTI:
+ mtx_lock(&(sc->sc_mtx));
usb2_config_td_queue_command
(&(sc->sc_config_td), &udav_config_copy,
&udav_cfg_promisc_upd, 0, 0);
+ mtx_unlock(&(sc->sc_mtx));
break;
case SIOCGIFMEDIA:
@@ -1081,9 +1086,6 @@
error = ether_ioctl(ifp, cmd, data);
break;
}
-
- mtx_unlock(&(sc->sc_mtx));
-
return (error);
}
@@ -1246,14 +1248,21 @@
udav_cfg_miibus_readreg(device_t dev, int phy, int reg)
{
struct udav_softc *sc = device_get_softc(dev);
+ uint16_t data16;
uint8_t val[2];
- uint16_t data16;
+ uint8_t do_unlock;
/* XXX: one PHY only for the internal PHY */
if (phy != 0) {
return (0);
}
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
/* select internal PHY and set PHY register address */
udav_cfg_csr_write1(sc, UDAV_EPAR,
@@ -1270,8 +1279,9 @@
/* retrieve the result from data registers */
udav_cfg_csr_read(sc, UDAV_EPDRL, val, 2);
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
-
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
data16 = (val[0] | (val[1] << 8));
DPRINTF(10, "phy=%d reg=0x%04x => 0x%04x\n",
@@ -1285,12 +1295,19 @@
{
struct udav_softc *sc = device_get_softc(dev);
uint8_t val[2];
+ uint8_t do_unlock;
/* XXX: one PHY only for the internal PHY */
if (phy != 0) {
return (0);
}
- mtx_lock(&(sc->sc_mtx)); /* XXX */
+ /* avoid recursive locking */
+ if (mtx_owned(&(sc->sc_mtx))) {
+ do_unlock = 0;
+ } else {
+ mtx_lock(&(sc->sc_mtx));
+ do_unlock = 1;
+ }
/* select internal PHY and set PHY register address */
udav_cfg_csr_write1(sc, UDAV_EPAR,
@@ -1309,8 +1326,9 @@
/* end write command */
UDAV_CFG_CLRBIT(sc, UDAV_EPCR, UDAV_EPCR_ERPRW);
- mtx_unlock(&(sc->sc_mtx)); /* XXX */
-
+ if (do_unlock) {
+ mtx_unlock(&(sc->sc_mtx));
+ }
return (0);
}
==== //depot/projects/usb/src/sys/dev/usb2/ethernet/if_udav2_reg.h#3 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#define UDAV_IFACE_INDEX 0
-#define UDAV_CONFIG_NO 1
+#define UDAV_CONFIG_INDEX 0 /* config number 1 */
#define UDAV_ENDPT_MAX 6 /* units */
From julian at FreeBSD.org Thu Jul 3 09:39:22 2008
From: julian at FreeBSD.org (Julian Elischer)
Date: Thu Jul 3 09:39:24 2008
Subject: PERFORCE change 144545 for review
Message-ID: <200807030939.m639dLMS030562@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144545
Change 144545 by julian@julian_trafmon1 on 2008/07/03 09:38:44
Aint kepping up with -current fun?
Affected files ...
.. //depot/projects/vimage/src/sys/net80211/ieee80211.c#16 edit
.. //depot/projects/vimage/src/sys/netinet6/in6_src.c#17 edit
.. //depot/projects/vimage/src/sys/nlm/nlm_advlock.c#2 edit
Differences ...
==== //depot/projects/vimage/src/sys/net80211/ieee80211.c#16 (text+ko) ====
@@ -219,7 +219,6 @@
void
ieee80211_ifattach(struct ieee80211com *ic)
{
- INIT_VNET_NET(curvnet);
struct ifnet *ifp = ic->ic_ifp;
struct sockaddr_dl *sdl;
struct ifaddr *ifa;
==== //depot/projects/vimage/src/sys/netinet6/in6_src.c#17 (text+ko) ====
@@ -455,7 +455,6 @@
struct ifnet **retifp, struct rtentry **retrt, int clone,
int norouteok)
{
- INIT_VNET_NET(curvnet);
INIT_VNET_INET6(curvnet);
int error = 0;
struct ifnet *ifp = NULL;
==== //depot/projects/vimage/src/sys/nlm/nlm_advlock.c#2 (text+ko) ====
@@ -25,6 +25,7 @@
* SUCH DAMAGE.
*/
+#include "opt_vimage.h"
#include
__FBSDID("$FreeBSD: src/sys/nlm/nlm_advlock.c,v 1.1 2008/06/26 10:21:54 dfr Exp $");
@@ -42,6 +43,7 @@
#include
#include
#include
+#include
#include
#include
@@ -1218,11 +1220,11 @@
return (EOVERFLOW);
}
- snprintf(oh_space, 32, "%d@%s", svid, hostname);
+ snprintf(oh_space, 32, "%d@%s", svid, G_hostname);
oh_len = strlen(oh_space);
memset(lock, 0, sizeof(*lock));
- lock->caller_name = hostname;
+ lock->caller_name = G_hostname;
lock->fh.n_len = fhlen;
lock->fh.n_bytes = fh;
lock->oh.n_len = oh_len;
From hselasky at FreeBSD.org Thu Jul 3 09:44:27 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Thu Jul 3 09:44:29 2008
Subject: PERFORCE change 144546 for review
Message-ID: <200807030944.m639iQ1W030980@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144546
Change 144546 by hselasky@hselasky_laptop001 on 2008/07/03 09:43:46
USB WLAN module related
- add interface index checks in probe function.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/wlan/if_rum2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/wlan/if_ural2.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/wlan/if_zyd2.c#3 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/wlan/if_rum2.c#3 (text+ko) ====
@@ -427,6 +427,9 @@
if (uaa->info.bConfigIndex != 0) {
return (ENXIO);
}
+ if (uaa->info.bIfaceIndex != RT2573_IFACE_INDEX) {
+ return (ENXIO);
+ }
return (usb2_lookup_id_by_uaa(rum_devs, sizeof(rum_devs), uaa));
}
==== //depot/projects/usb/src/sys/dev/usb2/wlan/if_ural2.c#3 (text+ko) ====
@@ -420,6 +420,9 @@
if (uaa->info.bConfigIndex != 0) {
return (ENXIO);
}
+ if (uaa->info.bIfaceIndex != RAL_IFACE_INDEX) {
+ return (ENXIO);
+ }
return (usb2_lookup_id_by_uaa(ural_devs, sizeof(ural_devs), uaa));
}
==== //depot/projects/usb/src/sys/dev/usb2/wlan/if_zyd2.c#3 (text+ko) ====
@@ -1036,6 +1036,9 @@
if (uaa->info.bConfigIndex != 0) {
return (ENXIO);
}
+ if (uaa->info.bIfaceIndex != ZYD_IFACE_INDEX) {
+ return (ENXIO);
+ }
return (usb2_lookup_id_by_uaa(zyd_devs, sizeof(zyd_devs), uaa));
}
From hselasky at FreeBSD.org Thu Jul 3 13:50:35 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Thu Jul 3 13:50:40 2008
Subject: PERFORCE change 144550 for review
Message-ID: <200807031350.m63DoYhq065273@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144550
Change 144550 by hselasky@hselasky_laptop001 on 2008/07/03 13:49:34
More and more USB devices come with autoinstall. Most of the
time we just want to ignore these autoinstall disks. This
patch implements a small SCSI driver that will look for
mass storage devices in the first USB configuration. If
it finds a USB CD-ROM USB device and there are more
USB configurations, it will skip this configuration.
Potentially we could also use this small SCSI driver
to automatically test for USB mass storage quirks.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_msctest.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_msctest.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_parse.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_parse.h#2 edit
.. //depot/projects/usb/src/sys/modules/usb2/core/Makefile#4 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#8 (text+ko) ====
@@ -44,6 +44,7 @@
#include
#include
#include
+#include
#include
@@ -1507,23 +1508,36 @@
if (udev->flags.usb2_mode == USB_MODE_HOST) {
uint8_t config_index;
+ uint8_t config_quirk;
/*
- * most USB devices should attach to config index 0 by
+ * Most USB devices should attach to config index 0 by
* default
*/
- if (usb2_test_quirk(&uaa, UQ_CFG_INDEX_1)) {
+ if (usb2_test_quirk(&uaa, UQ_CFG_INDEX_0)) {
+ config_index = 1;
+ config_quirk = 1;
+ } else if (usb2_test_quirk(&uaa, UQ_CFG_INDEX_1)) {
config_index = 1;
+ config_quirk = 1;
} else if (usb2_test_quirk(&uaa, UQ_CFG_INDEX_2)) {
config_index = 2;
+ config_quirk = 1;
} else if (usb2_test_quirk(&uaa, UQ_CFG_INDEX_3)) {
config_index = 3;
+ config_quirk = 1;
} else if (usb2_test_quirk(&uaa, UQ_CFG_INDEX_4)) {
config_index = 4;
+ config_quirk = 1;
} else {
config_index = 0;
+ config_quirk = 0;
}
+repeat_set_config:
+
+ DPRINTF(0, "setting config %u\n", config_index);
+
/* get the USB device configured */
sx_xlock(udev->default_sx + 1);
err = usb2_set_config_index(udev, config_index);
@@ -1533,8 +1547,34 @@
"configuration index %u: %s, port %u, addr %u\n",
config_index, usb2_errstr(err), udev->port_no,
udev->address);
+
+ } else if ((!config_quirk) &&
+ ((config_index + 1) < udev->ddesc.bNumConfigurations)) {
+
+ if ((udev->cdesc->bNumInterface < 2) &&
+ (usb2_get_no_endpoints(udev->cdesc) == 0)) {
+ DPRINTF(-1, "Found no endpoints "
+ "(trying next config)!\n");
+ config_index++;
+ goto repeat_set_config;
+ }
+ if (config_index == 0) {
+ /*
+ * Try to figure out if we have an
+ * auto-install disk there:
+ */
+ if (usb2_test_autoinstall(udev, 0) == 0) {
+ DPRINTF(-1, "Found possible auto-install "
+ "disk (trying next config)\n");
+ config_index++;
+ goto repeat_set_config;
+ }
+ }
}
+ } else {
+ err = 0; /* set success */
}
+
DPRINTF(0, "new dev (addr %d), udev=%p, parent_hub=%p\n",
udev->address, udev, udev->parent_hub);
@@ -1542,8 +1582,6 @@
usb2_bus_port_set_device(bus, parent_hub ?
parent_hub->hub->ports + port_index : NULL, udev, device_index);
- err = 0; /* set success */
-
done:
if (err) {
/* free device */
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_parse.c#2 (text+ko) ====
@@ -159,6 +159,25 @@
}
/*------------------------------------------------------------------------*
+ * usb2_get_no_endpoints
+ *
+ * This function will count the total number of endpoints available.
+ *------------------------------------------------------------------------*/
+uint16_t
+usb2_get_no_endpoints(struct usb2_config_descriptor *cd)
+{
+ struct usb2_descriptor *desc = NULL;
+ uint16_t count = 0;
+
+ while ((desc = usb2_desc_foreach(cd, desc))) {
+ if (desc->bDescriptorType == UDESC_ENDPOINT) {
+ count++;
+ }
+ }
+ return (count);
+}
+
+/*------------------------------------------------------------------------*
* usb2_get_no_alts
*
* Return value:
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_parse.h#2 (text+ko) ====
@@ -29,6 +29,7 @@
struct usb2_descriptor *usb2_desc_foreach(struct usb2_config_descriptor *cd, struct usb2_descriptor *desc);
struct usb2_interface_descriptor *usb2_find_idesc(struct usb2_config_descriptor *cd, uint8_t iface_index, uint8_t alt_index);
struct usb2_endpoint_descriptor *usb2_find_edesc(struct usb2_config_descriptor *cd, uint8_t iface_index, uint8_t alt_index, uint8_t ep_index);
+uint16_t usb2_get_no_endpoints(struct usb2_config_descriptor *cd);
uint16_t usb2_get_no_alts(struct usb2_config_descriptor *cd, uint8_t ifaceno);
#endif /* _USB2_PARSE_H_ */
==== //depot/projects/usb/src/sys/modules/usb2/core/Makefile#4 (text+ko) ====
@@ -5,6 +5,7 @@
KMOD= usb2_core
SRCS=
SRCS+= bus_if.h usb2_if.h device_if.h vnode_if.h opt_usb.h opt_bus.h
+SRCS+= usb2_if.c
SRCS+= usb2_busdma.c
SRCS+= usb2_compat_linux.c
SRCS+= usb2_config_td.c
@@ -19,6 +20,7 @@
SRCS+= usb2_hub.c
SRCS+= usb2_lookup.c
SRCS+= usb2_mbuf.c
+SRCS+= usb2_msctest.c
SRCS+= usb2_parse.c
SRCS+= usb2_process.c
SRCS+= usb2_request.c
From hselasky at FreeBSD.org Thu Jul 3 19:26:15 2008
From: hselasky at FreeBSD.org (Hans Petter Selasky)
Date: Thu Jul 3 19:26:18 2008
Subject: PERFORCE change 144564 for review
Message-ID: <200807031926.m63JQERN009865@repoman.freebsd.org>
http://perforce.freebsd.org/chv.cgi?CH=144564
Change 144564 by hselasky@hselasky_laptop001 on 2008/07/03 19:25:36
New USB storage module is finished.
- mostly symbol renaming
- some minor changes
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#9 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_ioctl.h#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/quirk/usb2_quirk.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/storage/ata-usb2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/storage/umass2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/storage/urio2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/storage/usb2_storage.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/storage/usb2_storage.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/storage/ustorage2_fs.c#2 edit
.. //depot/projects/usb/src/sys/modules/usb2/storage/Makefile#2 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#9 (text+ko) ====
@@ -1515,7 +1515,7 @@
* default
*/
if (usb2_test_quirk(&uaa, UQ_CFG_INDEX_0)) {
- config_index = 1;
+ config_index = 0;
config_quirk = 1;
} else if (usb2_test_quirk(&uaa, UQ_CFG_INDEX_1)) {
config_index = 1;
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.c#5 (text+ko) ====
@@ -793,7 +793,7 @@
return (0);
}
-static int
+int
ugen_do_request(struct usb2_fifo *f, struct usb2_ctl_request *ur)
{
int error;
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.h#2 (text+ko) ====
@@ -27,5 +27,6 @@
#define _USB2_GENERIC_H_
extern struct usb2_fifo_methods usb2_ugen_methods;
+int ugen_do_request(struct usb2_fifo *f, struct usb2_ctl_request *ur);
#endif /* _USB2_GENERIC_H_ */
==== //depot/projects/usb/src/sys/dev/usb2/include/usb2_ioctl.h#4 (text+ko) ====
@@ -39,7 +39,7 @@
#define USB_SHORT_XFER_OK 0x0004 /* allow short reads */
#define USB_DELAY_STATUS_STAGE 0x0010 /* insert delay before STATUS stage */
uint16_t ucr_actlen; /* actual length transferred */
- uint8_t ucr_addr;
+ uint8_t ucr_addr; /* zero - currently not used */
struct usb2_device_request ucr_request;
};
==== //depot/projects/usb/src/sys/dev/usb2/quirk/usb2_quirk.h#3 (text+ko) ====
@@ -73,7 +73,9 @@
/* select configuration index 3 by default */ \
m(n, UQ_CFG_INDEX_3) \
/* select configuration index 4 by default */ \
- m(n, UQ_CFG_INDEX_4)
+ m(n, UQ_CFG_INDEX_4) \
+ /* select configuration index 0 by default */ \
+ m(n, UQ_CFG_INDEX_0)
USB_MAKE_ENUM(USB_QUIRK);
==== //depot/projects/usb/src/sys/dev/usb2/storage/ata-usb2.c#2 (text) ====
@@ -30,21 +30,26 @@
#include
__FBSDID("$FreeBSD: src/sys/dev/ata/ata-usb.c,v 1.8 2008/04/10 13:05:05 sos Exp $");
-#include "opt_ata.h"
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
#include
#include
#include
+#include
#include
-#include
-#include
-#include
-#include
-
#include
#include
@@ -82,7 +87,7 @@
} __packed;
/* USB-ATA 'controller' softc */
-struct atausb_softc {
+struct atausb2_softc {
struct bbb_cbw cbw;
struct bbb_csw csw;
struct mtx locked_mtx;
@@ -104,7 +109,7 @@
#define ATAUSB_T_MAX ATAUSB_T_BBB_MAX
- struct usbd_xfer *xfer[ATAUSB_T_MAX];
+ struct usb2_xfer *xfer[ATAUSB_T_MAX];
caddr_t ata_data;
device_t dev;
@@ -113,7 +118,7 @@
uint32_t ata_bytecount;
uint8_t last_xfer_no;
- uint8_t usb_speed;
+ uint8_t usb2_speed;
uint8_t intr_stalled;
uint8_t maxlun;
uint8_t iface_no;
@@ -124,24 +129,24 @@
/* prototypes */
-static device_probe_t atausb_probe;
-static device_attach_t atausb_attach;
-static device_detach_t atausb_detach;
+static device_probe_t atausb2_probe;
+static device_attach_t atausb2_attach;
+static device_detach_t atausb2_detach;
-static usbd_callback_t atausb_t_bbb_reset1_callback;
-static usbd_callback_t atausb_t_bbb_reset2_callback;
-static usbd_callback_t atausb_t_bbb_reset3_callback;
-static usbd_callback_t atausb_t_bbb_command_callback;
-static usbd_callback_t atausb_t_bbb_data_read_callback;
-static usbd_callback_t atausb_t_bbb_data_rd_cs_callback;
-static usbd_callback_t atausb_t_bbb_data_write_callback;
-static usbd_callback_t atausb_t_bbb_data_wr_cs_callback;
-static usbd_callback_t atausb_t_bbb_status_callback;
-static usbd_callback_t atausb_tr_error;
+static usb2_callback_t atausb2_t_bbb_reset1_callback;
+static usb2_callback_t atausb2_t_bbb_reset2_callback;
+static usb2_callback_t atausb2_t_bbb_reset3_callback;
+static usb2_callback_t atausb2_t_bbb_command_callback;
+static usb2_callback_t atausb2_t_bbb_data_read_callback;
+static usb2_callback_t atausb2_t_bbb_data_rd_cs_callback;
+static usb2_callback_t atausb2_t_bbb_data_write_callback;
+static usb2_callback_t atausb2_t_bbb_data_wr_cs_callback;
+static usb2_callback_t atausb2_t_bbb_status_callback;
+static usb2_callback_t atausb2_tr_error;
-static void atausb_cancel_request(struct atausb_softc *sc);
-static void atausb_transfer_start(struct atausb_softc *sc, uint8_t xfer_no);
-static void atausb_t_bbb_data_clear_stall_callback(struct usbd_xfer *xfer, uint8_t next_xfer, uint8_t stall_xfer);
+static void atausb2_cancel_request(struct atausb2_softc *sc);
+static void atausb2_transfer_start(struct atausb2_softc *sc, uint8_t xfer_no);
+static void atausb2_t_bbb_data_clear_stall_callback(struct usb2_xfer *xfer, uint8_t next_xfer, uint8_t stall_xfer);
static int ata_usbchannel_begin_transaction(struct ata_request *request);
static int ata_usbchannel_end_transaction(struct ata_request *request);
@@ -156,15 +161,15 @@
* USB frontend part
*/
-struct usbd_config atausb_config[ATAUSB_T_BBB_MAX] = {
+struct usb2_config atausb2_config[ATAUSB_T_BBB_MAX] = {
[ATAUSB_T_BBB_RESET1] = {
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.flags = {},
- .mh.callback = &atausb_t_bbb_reset1_callback,
+ .mh.callback = &atausb2_t_bbb_reset1_callback,
.mh.timeout = 5000, /* 5 seconds */
.mh.interval = 500, /* 500 milliseconds */
},
@@ -173,9 +178,9 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.flags = {},
- .mh.callback = &atausb_t_bbb_reset2_callback,
+ .mh.callback = &atausb2_t_bbb_reset2_callback,
.mh.timeout = 5000, /* 5 seconds */
.mh.interval = 50, /* 50 milliseconds */
},
@@ -184,9 +189,9 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.flags = {},
- .mh.callback = &atausb_t_bbb_reset3_callback,
+ .mh.callback = &atausb2_t_bbb_reset3_callback,
.mh.timeout = 5000, /* 5 seconds */
.mh.interval = 50, /* 50 milliseconds */
},
@@ -197,7 +202,7 @@
.direction = UE_DIR_OUT,
.mh.bufsize = sizeof(struct bbb_cbw),
.mh.flags = {},
- .mh.callback = &atausb_t_bbb_command_callback,
+ .mh.callback = &atausb2_t_bbb_command_callback,
.mh.timeout = 5000, /* 5 seconds */
},
@@ -207,7 +212,7 @@
.direction = UE_DIR_IN,
.mh.bufsize = ATAUSB_BULK_SIZE,
.mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
- .mh.callback = &atausb_t_bbb_data_read_callback,
+ .mh.callback = &atausb2_t_bbb_data_read_callback,
.mh.timeout = 0, /* overwritten later */
},
@@ -215,9 +220,9 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.flags = {},
- .mh.callback = &atausb_t_bbb_data_rd_cs_callback,
+ .mh.callback = &atausb2_t_bbb_data_rd_cs_callback,
.mh.timeout = 5000, /* 5 seconds */
},
@@ -227,7 +232,7 @@
.direction = UE_DIR_OUT,
.mh.bufsize = ATAUSB_BULK_SIZE,
.mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
- .mh.callback = &atausb_t_bbb_data_write_callback,
+ .mh.callback = &atausb2_t_bbb_data_write_callback,
.mh.timeout = 0, /* overwritten later */
},
@@ -235,9 +240,9 @@
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
+ .mh.bufsize = sizeof(struct usb2_device_request),
.mh.flags = {},
- .mh.callback = &atausb_t_bbb_data_wr_cs_callback,
+ .mh.callback = &atausb2_t_bbb_data_wr_cs_callback,
.mh.timeout = 5000, /* 5 seconds */
},
@@ -247,45 +252,42 @@
.direction = UE_DIR_IN,
.mh.bufsize = sizeof(struct bbb_csw),
.mh.flags = {.short_xfer_ok = 1,},
- .mh.callback = &atausb_t_bbb_status_callback,
+ .mh.callback = &atausb2_t_bbb_status_callback,
.mh.timeout = 5000, /* ms */
},
};
-static devclass_t atausb_devclass;
+static devclass_t atausb2_devclass;
-static device_method_t atausb_methods[] = {
- DEVMETHOD(device_probe, atausb_probe),
- DEVMETHOD(device_attach, atausb_attach),
- DEVMETHOD(device_detach, atausb_detach),
+static device_method_t atausb2_methods[] = {
+ DEVMETHOD(device_probe, atausb2_probe),
+ DEVMETHOD(device_attach, atausb2_attach),
+ DEVMETHOD(device_detach, atausb2_detach),
{0, 0}
};
-static driver_t atausb_driver = {
+static driver_t atausb2_driver = {
.name = "atausb",
- .methods = atausb_methods,
- .size = sizeof(struct atausb_softc),
+ .methods = atausb2_methods,
+ .size = sizeof(struct atausb2_softc),
};
-DRIVER_MODULE(atausb, uhub, atausb_driver, atausb_devclass, 0, 0);
-MODULE_DEPEND(atausb, usb, 1, 1, 1);
+DRIVER_MODULE(atausb, ushub, atausb2_driver, atausb2_devclass, 0, 0);
+MODULE_DEPEND(atausb, usb2_core, 1, 1, 1);
MODULE_VERSION(atausb, 1);
static int
-atausb_probe(device_t dev)
+atausb2_probe(device_t dev)
{
- struct usb_attach_arg *uaa = device_get_ivars(dev);
- usb_interface_descriptor_t *id;
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
+ struct usb2_interface_descriptor *id;
- if (uaa->usb_mode != USB_MODE_HOST) {
- return (UMATCH_NONE);
+ if (uaa->usb2_mode != USB_MODE_HOST) {
+ return (ENXIO);
}
- if (uaa->iface == NULL) {
- return (UMATCH_NONE);
- }
- id = usbd_get_interface_descriptor(uaa->iface);
+ id = usb2_get_interface_descriptor(uaa->iface);
if ((!id) || (id->bInterfaceClass != UICLASS_MASS)) {
- return (UMATCH_NONE);
+ return (ENXIO);
}
switch (id->bInterfaceSubClass) {
case UISUBCLASS_QIC157:
@@ -299,24 +301,24 @@
case UIPROTO_MASS_CBI_I:
case UIPROTO_MASS_BBB:
case UIPROTO_MASS_BBB_OLD:
- return (UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO);
+ return (0);
default:
- return (UMATCH_IFACECLASS_IFACESUBCLASS);
+ return (0);
}
break;
default:
- return (UMATCH_IFACECLASS);
+ return (0);
}
}
static int
-atausb_attach(device_t dev)
+atausb2_attach(device_t dev)
{
- struct atausb_softc *sc = device_get_softc(dev);
- struct usb_attach_arg *uaa = device_get_ivars(dev);
- usb_interface_descriptor_t *id;
+ struct atausb2_softc *sc = device_get_softc(dev);
+ struct usb2_attach_arg *uaa = device_get_ivars(dev);
+ struct usb2_interface_descriptor *id;
const char *proto, *subclass;
- usb_device_request_t request;
+ struct usb2_device_request request;
uint16_t i;
uint8_t maxlun;
uint8_t has_intr;
@@ -325,16 +327,16 @@
if (sc == NULL) {
return (ENOMEM);
}
- usbd_set_device_desc(dev);
+ device_set_usb2_desc(dev);
sc->dev = dev;
sc->maxlun = 0;
sc->locked_ch = NULL;
sc->restart_ch = NULL;
- sc->usb_speed = usbd_get_speed(uaa->device);
+ sc->usb2_speed = usb2_get_speed(uaa->device);
mtx_init(&(sc->locked_mtx), "ATAUSB lock", NULL, (MTX_DEF | MTX_RECURSE));
- id = usbd_get_interface_descriptor(uaa->iface);
+ id = usb2_get_interface_descriptor(uaa->iface);
switch (id->bInterfaceProtocol) {
case UIPROTO_MASS_BBB:
case UIPROTO_MASS_BBB_OLD:
@@ -377,15 +379,16 @@
(strcmp(subclass, "ATAPI") && strcmp(subclass, "SCSI"))) {
goto detach;
}
- err = usbd_transfer_setup(uaa->device, &(uaa->iface_index), sc->xfer,
- atausb_config, ATAUSB_T_BBB_MAX, sc, &(sc->locked_mtx));
+ err = usb2_transfer_setup(uaa->device, &(uaa->info.bIfaceIndex),
+ sc->xfer, atausb2_config, ATAUSB_T_BBB_MAX, sc,
+ &(sc->locked_mtx));
/* skip reset first time */
sc->last_xfer_no = ATAUSB_T_BBB_COMMAND;
if (err) {
device_printf(sc->dev, "could not setup required "
- "transfers, %s\n", usbd_errstr(err));
+ "transfers, %s\n", usb2_errstr(err));
goto detach;
}
/* get number of devices so we can add matching channels */
@@ -394,12 +397,12 @@
USETW(request.wValue, 0);
USETW(request.wIndex, sc->iface_no);
USETW(request.wLength, sizeof(maxlun));
- err = usbd_do_request(uaa->device, &usb_global_lock, &request, &maxlun);
+ err = usb2_do_request(uaa->device, &Giant, &request, &maxlun);
if (err) {
if (bootverbose) {
device_printf(sc->dev, "get maxlun not supported %s\n",
- usbd_errstr(err));
+ usb2_errstr(err));
}
} else {
sc->maxlun = maxlun;
@@ -421,20 +424,20 @@
return (0);
detach:
- atausb_detach(dev);
+ atausb2_detach(dev);
return (ENXIO);
}
static int
-atausb_detach(device_t dev)
+atausb2_detach(device_t dev)
{
- struct atausb_softc *sc = device_get_softc(dev);
+ struct atausb2_softc *sc = device_get_softc(dev);
device_t *children;
int nchildren, i;
/* teardown our statemachine */
- usbd_transfer_unsetup(sc->xfer, ATAUSB_T_MAX);
+ usb2_transfer_unsetup(sc->xfer, ATAUSB_T_MAX);
/* detach & delete all children, if any */
@@ -449,32 +452,32 @@
}
static void
-atausb_transfer_start(struct atausb_softc *sc, uint8_t xfer_no)
+atausb2_transfer_start(struct atausb2_softc *sc, uint8_t xfer_no)
{
if (atausbdebug) {
device_printf(sc->dev, "BBB transfer %d\n", xfer_no);
}
if (sc->xfer[xfer_no]) {
sc->last_xfer_no = xfer_no;
- usbd_transfer_start(sc->xfer[xfer_no]);
+ usb2_transfer_start(sc->xfer[xfer_no]);
} else {
- atausb_cancel_request(sc);
+ atausb2_cancel_request(sc);
}
return;
}
static void
-atausb_t_bbb_reset1_callback(struct usbd_xfer *xfer)
+atausb2_t_bbb_reset1_callback(struct usb2_xfer *xfer)
{
- struct atausb_softc *sc = xfer->priv_sc;
- usb_device_request_t req;
+ struct atausb2_softc *sc = xfer->priv_sc;
+ struct usb2_device_request req;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
- atausb_transfer_start(sc, ATAUSB_T_BBB_RESET2);
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
+ atausb2_transfer_start(sc, ATAUSB_T_BBB_RESET2);
return;
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
req.bRequest = 0xff; /* bulk-only reset */
USETW(req.wValue, 0);
@@ -482,79 +485,79 @@
req.wIndex[1] = 0;
USETW(req.wLength, 0);
- usbd_copy_in(xfer->frbuffers, 0, &req, sizeof(req));
+ usb2_copy_in(xfer->frbuffers, 0, &req, sizeof(req));
xfer->frlengths[0] = sizeof(req);
xfer->nframes = 1;
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- atausb_tr_error(xfer);
+ atausb2_tr_error(xfer);
return;
}
}
static void
-atausb_t_bbb_reset2_callback(struct usbd_xfer *xfer)
+atausb2_t_bbb_reset2_callback(struct usb2_xfer *xfer)
{
- atausb_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_RESET3,
+ atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_RESET3,
ATAUSB_T_BBB_DATA_READ);
return;
}
static void
-atausb_t_bbb_reset3_callback(struct usbd_xfer *xfer)
+atausb2_t_bbb_reset3_callback(struct usb2_xfer *xfer)
{
- atausb_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_COMMAND,
+ atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_COMMAND,
ATAUSB_T_BBB_DATA_WRITE);
return;
}
static void
-atausb_t_bbb_data_clear_stall_callback(struct usbd_xfer *xfer,
+atausb2_t_bbb_data_clear_stall_callback(struct usb2_xfer *xfer,
uint8_t next_xfer,
uint8_t stall_xfer)
{
- struct atausb_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = xfer->priv_sc;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
tr_transferred:
- atausb_transfer_start(sc, next_xfer);
+ atausb2_transfer_start(sc, next_xfer);
return;
- case USBD_ST_SETUP:
- if (usbd_clear_stall_callback(xfer, sc->xfer[stall_xfer])) {
+ case USB_ST_SETUP:
+ if (usb2_clear_stall_callback(xfer, sc->xfer[stall_xfer])) {
goto tr_transferred;
}
return;
default: /* Error */
- atausb_tr_error(xfer);
+ atausb2_tr_error(xfer);
return;
}
}
static void
-atausb_t_bbb_command_callback(struct usbd_xfer *xfer)
+atausb2_t_bbb_command_callback(struct usb2_xfer *xfer)
{
- struct atausb_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = xfer->priv_sc;
struct ata_request *request = sc->ata_request;
struct ata_channel *ch;
uint32_t tag;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
- atausb_transfer_start
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
+ atausb2_transfer_start
(sc, ((request->flags & ATA_R_READ) ? ATAUSB_T_BBB_DATA_READ :
(request->flags & ATA_R_WRITE) ? ATAUSB_T_BBB_DATA_WRITE :
ATAUSB_T_BBB_STATUS));
return;
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
sc->status_try = 0;
@@ -574,30 +577,30 @@
bzero(sc->cbw.cdb, 16);
bcopy(request->u.atapi.ccb, sc->cbw.cdb, 12); /* XXX SOS */
- usbd_copy_in(xfer->frbuffers, 0, &(sc->cbw), sizeof(sc->cbw));
+ usb2_copy_in(xfer->frbuffers, 0, &(sc->cbw), sizeof(sc->cbw));
xfer->frlengths[0] = sizeof(sc->cbw);
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
}
return;
default: /* Error */
- atausb_tr_error(xfer);
+ atausb2_tr_error(xfer);
return;
}
}
static void
-atausb_t_bbb_data_read_callback(struct usbd_xfer *xfer)
+atausb2_t_bbb_data_read_callback(struct usb2_xfer *xfer)
{
- struct atausb_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = xfer->priv_sc;
uint32_t max_bulk = xfer->max_data_length;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
- usbd_copy_out(xfer->frbuffers, 0,
+ usb2_copy_out(xfer->frbuffers, 0,
sc->ata_data, xfer->actlen);
sc->ata_bytecount -= xfer->actlen;
@@ -608,14 +611,14 @@
/* short transfer */
sc->ata_bytecount = 0;
}
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
if (atausbdebug > 1) {
device_printf(sc->dev, "%s: max_bulk=%d, ata_bytecount=%d\n",
__FUNCTION__, max_bulk, sc->ata_bytecount);
}
if (sc->ata_bytecount == 0) {
- atausb_transfer_start(sc, ATAUSB_T_BBB_STATUS);
+ atausb2_transfer_start(sc, ATAUSB_T_BBB_STATUS);
return;
}
if (max_bulk > sc->ata_bytecount) {
@@ -624,14 +627,14 @@
xfer->timeout = sc->timeout;
xfer->frlengths[0] = max_bulk;
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error == USBD_ERR_CANCELLED) {
- atausb_tr_error(xfer);
+ if (xfer->error == USB_ERR_CANCELLED) {
+ atausb2_tr_error(xfer);
} else {
- atausb_transfer_start(sc, ATAUSB_T_BBB_DATA_RD_CS);
+ atausb2_transfer_start(sc, ATAUSB_T_BBB_DATA_RD_CS);
}
return;
@@ -639,34 +642,34 @@
}
static void
-atausb_t_bbb_data_rd_cs_callback(struct usbd_xfer *xfer)
+atausb2_t_bbb_data_rd_cs_callback(struct usb2_xfer *xfer)
{
- atausb_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_STATUS,
+ atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_STATUS,
ATAUSB_T_BBB_DATA_READ);
return;
}
static void
-atausb_t_bbb_data_write_callback(struct usbd_xfer *xfer)
+atausb2_t_bbb_data_write_callback(struct usb2_xfer *xfer)
{
- struct atausb_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = xfer->priv_sc;
uint32_t max_bulk = xfer->max_data_length;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
sc->ata_bytecount -= xfer->actlen;
sc->ata_data += xfer->actlen;
sc->ata_donecount += xfer->actlen;
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
if (atausbdebug > 1) {
device_printf(sc->dev, "%s: max_bulk=%d, ata_bytecount=%d\n",
__FUNCTION__, max_bulk, sc->ata_bytecount);
}
if (sc->ata_bytecount == 0) {
- atausb_transfer_start(sc, ATAUSB_T_BBB_STATUS);
+ atausb2_transfer_start(sc, ATAUSB_T_BBB_STATUS);
return;
}
if (max_bulk > sc->ata_bytecount) {
@@ -675,17 +678,17 @@
xfer->timeout = sc->timeout;
xfer->frlengths[0] = max_bulk;
- usbd_copy_in(xfer->frbuffers, 0,
+ usb2_copy_in(xfer->frbuffers, 0,
sc->ata_data, max_bulk);
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default: /* Error */
- if (xfer->error == USBD_ERR_CANCELLED) {
- atausb_tr_error(xfer);
+ if (xfer->error == USB_ERR_CANCELLED) {
+ atausb2_tr_error(xfer);
} else {
- atausb_transfer_start(sc, ATAUSB_T_BBB_DATA_WR_CS);
+ atausb2_transfer_start(sc, ATAUSB_T_BBB_DATA_WR_CS);
}
return;
@@ -693,27 +696,27 @@
}
static void
-atausb_t_bbb_data_wr_cs_callback(struct usbd_xfer *xfer)
+atausb2_t_bbb_data_wr_cs_callback(struct usb2_xfer *xfer)
{
- atausb_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_STATUS,
+ atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_STATUS,
ATAUSB_T_BBB_DATA_WRITE);
return;
}
static void
-atausb_t_bbb_status_callback(struct usbd_xfer *xfer)
+atausb2_t_bbb_status_callback(struct usb2_xfer *xfer)
{
- struct atausb_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = xfer->priv_sc;
struct ata_request *request = sc->ata_request;
uint32_t residue;
- switch (USBD_GET_STATE(xfer)) {
- case USBD_ST_TRANSFERRED:
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
if (xfer->actlen < sizeof(sc->csw)) {
bzero(&(sc->csw), sizeof(sc->csw));
}
- usbd_copy_out(xfer->frbuffers, 0, &(sc->csw), xfer->actlen);
+ usb2_copy_out(xfer->frbuffers, 0, &(sc->csw), xfer->actlen);
if (request->flags & (ATA_R_READ | ATA_R_WRITE)) {
request->donecount = sc->ata_donecount;
@@ -778,19 +781,19 @@
mtx_lock(xfer->priv_mtx);
return;
- case USBD_ST_SETUP:
+ case USB_ST_SETUP:
xfer->frlengths[0] = xfer->max_data_length;
- usbd_start_hardware(xfer);
+ usb2_start_hardware(xfer);
return;
default:
tr_error:
- if ((xfer->error == USBD_ERR_CANCELLED) ||
+ if ((xfer->error == USB_ERR_CANCELLED) ||
(sc->status_try)) {
- atausb_tr_error(xfer);
+ atausb2_tr_error(xfer);
} else {
sc->status_try = 1;
- atausb_transfer_start(sc, ATAUSB_T_BBB_DATA_RD_CS);
+ atausb2_transfer_start(sc, ATAUSB_T_BBB_DATA_RD_CS);
}
return;
@@ -798,7 +801,7 @@
}
static void
-atausb_cancel_request(struct atausb_softc *sc)
+atausb2_cancel_request(struct atausb2_softc *sc)
{
struct ata_request *request;
@@ -821,19 +824,19 @@
}
static void
-atausb_tr_error(struct usbd_xfer *xfer)
+atausb2_tr_error(struct usb2_xfer *xfer)
{
- struct atausb_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = xfer->priv_sc;
- if (xfer->error != USBD_ERR_CANCELLED) {
+ if (xfer->error != USB_ERR_CANCELLED) {
if (atausbdebug) {
device_printf(sc->dev, "transfer failed, %s, in state %d "
- "-> BULK reset\n", usbd_errstr(xfer->error),
+ "-> BULK reset\n", usb2_errstr(xfer->error),
sc->last_xfer_no);
}
}
- atausb_cancel_request(sc);
+ atausb2_cancel_request(sc);
return;
}
@@ -858,7 +861,7 @@
static int
ata_usbchannel_begin_transaction(struct ata_request *request)
{
- struct atausb_softc *sc =
+ struct atausb2_softc *sc =
device_get_softc(device_get_parent(request->parent));
int error;
@@ -906,7 +909,7 @@
sc->ata_data = request->data;
sc->ata_donecount = 0;
- usbd_transfer_start(sc->xfer[sc->last_xfer_no]);
+ usb2_transfer_start(sc->xfer[sc->last_xfer_no]);
error = ATA_OP_CONTINUES;
} else {
request->result = EIO;
@@ -1034,10 +1037,10 @@
static void
ata_usbchannel_setmode(device_t parent, device_t dev)
{
- struct atausb_softc *sc = device_get_softc(GRANDPARENT(dev));
+ struct atausb2_softc *sc = device_get_softc(GRANDPARENT(dev));
struct ata_device *atadev = device_get_softc(dev);
- if (sc->usb_speed == USB_SPEED_HIGH)
+ if (sc->usb2_speed == USB_SPEED_HIGH)
atadev->mode = ATA_USB2;
else
atadev->mode = ATA_USB1;
@@ -1047,7 +1050,7 @@
static int
ata_usbchannel_locking(device_t dev, int flags)
{
- struct atausb_softc *sc = device_get_softc(device_get_parent(dev));
+ struct atausb2_softc *sc = device_get_softc(device_get_parent(dev));
struct ata_channel *ch = device_get_softc(dev);
int res = -1;
==== //depot/projects/usb/src/sys/dev/usb2/storage/umass2.c#2 (text+ko) ====
@@ -102,17 +102,20 @@
* umass_cam_cb again to complete the CAM command.
*/
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
-#include
-#include
-#include
+#include
+#include
+#include