aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/build/Makefile.depend13
-rw-r--r--tools/build/mk/Makefile.boot3
-rw-r--r--tools/build/options/WITHOUT_MANDOCDB6
-rw-r--r--tools/bus_space/C/Makefile3
-rw-r--r--tools/bus_space/C/lang.c120
-rw-r--r--tools/bus_space/C/libbus.h71
-rw-r--r--tools/bus_space/Makefile.inc2
-rw-r--r--tools/bus_space/Python/Makefile2
-rw-r--r--tools/bus_space/Python/lang.c182
-rw-r--r--tools/bus_space/bus.c (renamed from tools/bus_space/bus_space.c)2
-rw-r--r--tools/bus_space/bus.h (renamed from tools/bus_space/bus_space.h)0
-rw-r--r--tools/bus_space/busdma.c437
-rw-r--r--tools/bus_space/busdma.h (renamed from tools/bus_space/C/libbus_space.h)33
-rw-r--r--tools/regression/include/stdatomic/Makefile.depend19
-rw-r--r--tools/tools/ath/ath_ee_9300_print/Makefile.depend21
-rw-r--r--tools/tools/drm/radeon/mkregtable/Makefile.depend19
-rw-r--r--tools/tools/makeroot/Makefile.depend13
-rw-r--r--tools/tools/usbtest/Makefile.depend20
18 files changed, 931 insertions, 35 deletions
diff --git a/tools/build/Makefile.depend b/tools/build/Makefile.depend
new file mode 100644
index 0000000000000..d14a02b5041f8
--- /dev/null
+++ b/tools/build/Makefile.depend
@@ -0,0 +1,13 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,}
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tools/build/mk/Makefile.boot b/tools/build/mk/Makefile.boot
index 0707ae2b0d673..b75809b08ad21 100644
--- a/tools/build/mk/Makefile.boot
+++ b/tools/build/mk/Makefile.boot
@@ -4,3 +4,6 @@ CFLAGS+= -I${WORLDTMP}/legacy/usr/include
DPADD+= ${WORLDTMP}/legacy/usr/lib/libegacy.a
LDADD+= -legacy
LDFLAGS+= -L${WORLDTMP}/legacy/usr/lib
+
+# we do not want to capture dependencies refering to the above
+UPDATE_DEPENDFILE= no
diff --git a/tools/build/options/WITHOUT_MANDOCDB b/tools/build/options/WITHOUT_MANDOCDB
new file mode 100644
index 0000000000000..7d7ec2148a29f
--- /dev/null
+++ b/tools/build/options/WITHOUT_MANDOCDB
@@ -0,0 +1,6 @@
+.\" $FreeBSD$
+Use the
+.Xr mandoc 1
+version of
+.Xr makewhatis 8
+database and utilities.
diff --git a/tools/bus_space/C/Makefile b/tools/bus_space/C/Makefile
index 9d767e82dd909..5fd64c7902776 100644
--- a/tools/bus_space/C/Makefile
+++ b/tools/bus_space/C/Makefile
@@ -1,8 +1,9 @@
# $FreeBSD$
-LIB= bus_space
+LIB= bus
SHLIB_MAJOR= 0
SRCS= lang.c
+INCS= libbus.h
CFLAGS+= -I${.CURDIR}/..
diff --git a/tools/bus_space/C/lang.c b/tools/bus_space/C/lang.c
index 6408343bd596b..345957efdbe70 100644
--- a/tools/bus_space/C/lang.c
+++ b/tools/bus_space/C/lang.c
@@ -30,19 +30,20 @@ __FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <errno.h>
-#include "bus_space.h"
-#include "libbus_space.h"
+#include "bus.h"
+#include "busdma.h"
+#include "libbus.h"
-int
-bus_space_read_1(int rid, long ofs)
+int16_t
+bus_read_1(int rid, long ofs)
{
uint8_t val;
return ((!bs_read(rid, ofs, &val, sizeof(val))) ? -1 : (int)val);
}
-int
-bus_space_read_2(int rid, long ofs)
+int32_t
+bus_read_2(int rid, long ofs)
{
uint16_t val;
@@ -50,7 +51,7 @@ bus_space_read_2(int rid, long ofs)
}
int64_t
-bus_space_read_4(int rid, long ofs)
+bus_read_4(int rid, long ofs)
{
uint32_t val;
@@ -58,43 +59,136 @@ bus_space_read_4(int rid, long ofs)
}
int
-bus_space_write_1(int rid, long ofs, uint8_t val)
+bus_write_1(int rid, long ofs, uint8_t val)
{
return ((!bs_write(rid, ofs, &val, sizeof(val))) ? errno : 0);
}
int
-bus_space_write_2(int rid, long ofs, uint16_t val)
+bus_write_2(int rid, long ofs, uint16_t val)
{
return ((!bs_write(rid, ofs, &val, sizeof(val))) ? errno : 0);
}
int
-bus_space_write_4(int rid, long ofs, uint32_t val)
+bus_write_4(int rid, long ofs, uint32_t val)
{
return ((!bs_write(rid, ofs, &val, sizeof(val))) ? errno : 0);
}
int
-bus_space_map(const char *dev)
+bus_map(const char *dev)
{
return (bs_map(dev));
}
int
-bus_space_unmap(int rid)
+bus_unmap(int rid)
{
return ((!bs_unmap(rid)) ? errno : 0);
}
int
-bus_space_subregion(int rid, long ofs, long sz)
+bus_subregion(int rid, long ofs, long sz)
{
return (bs_subregion(rid, ofs, sz));
}
+
+int
+busdma_tag_create(const char *dev, bus_addr_t align, bus_addr_t bndry,
+ bus_addr_t maxaddr, bus_size_t maxsz, u_int nsegs, bus_size_t maxsegsz,
+ u_int datarate, u_int flags, busdma_tag_t *out_p)
+{
+ int res;
+
+ res = bd_tag_create(dev, align, bndry, maxaddr, maxsz, nsegs, maxsegsz,
+ datarate, flags);
+ if (res == -1)
+ return (errno);
+ *out_p = res;
+ return (0);
+}
+
+int
+busdma_tag_derive(busdma_tag_t tag, bus_addr_t align, bus_addr_t bndry,
+ bus_addr_t maxaddr, bus_size_t maxsz, u_int nsegs, bus_size_t maxsegsz,
+ u_int datarate, u_int flags, busdma_tag_t *out_p)
+{
+ int res;
+
+ res = bd_tag_derive(tag, align, bndry, maxaddr, maxsz, nsegs, maxsegsz,
+ datarate, flags);
+ if (res == -1)
+ return (errno);
+ *out_p = res;
+ return (0);
+}
+
+int
+busdma_tag_destroy(busdma_tag_t tag)
+{
+
+ return (bd_tag_destroy(tag));
+}
+
+int
+busdma_mem_alloc(busdma_tag_t tag, u_int flags, busdma_md_t *out_p)
+{
+ int res;
+
+ res = bd_mem_alloc(tag, flags);
+ if (res == -1)
+ return (errno);
+ *out_p = res;
+ return (0);
+}
+
+int
+busdma_mem_free(busdma_md_t md)
+{
+
+ return (bd_mem_free(md));
+}
+
+busdma_seg_t
+busdma_md_first_seg(busdma_md_t md, int space)
+{
+ busdma_seg_t seg;
+
+ seg = bd_md_first_seg(md, space);
+ return (seg);
+}
+
+busdma_seg_t
+busdma_md_next_seg(busdma_md_t md, busdma_seg_t seg)
+{
+
+ seg = bd_md_next_seg(md, seg);
+ return (seg);
+}
+
+bus_addr_t
+busdma_seg_get_addr(busdma_seg_t seg)
+{
+ u_long addr;
+ int error;
+
+ error = bd_seg_get_addr(seg, &addr);
+ return ((error) ? ~0UL : addr);
+}
+
+bus_size_t
+busdma_seg_get_size(busdma_seg_t seg)
+{
+ u_long size;
+ int error;
+
+ error = bd_seg_get_size(seg, &size);
+ return ((error) ? ~0UL : size);
+}
diff --git a/tools/bus_space/C/libbus.h b/tools/bus_space/C/libbus.h
new file mode 100644
index 0000000000000..76ab402251450
--- /dev/null
+++ b/tools/bus_space/C/libbus.h
@@ -0,0 +1,71 @@
+/*-
+ * Copyright (c) 2014, 2015 Marcel Moolenaar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _LIBBUS_SPACE_H_
+#define _LIBBUS_SPACE_H_
+
+int bus_map(const char *dev);
+int16_t bus_read_1(int rid, long ofs);
+int32_t bus_read_2(int rid, long ofs);
+int64_t bus_read_4(int rid, long ofs);
+int bus_subregion(int rid, long ofs, long sz);
+int bus_unmap(int rid);
+int bus_write_1(int rid, long ofs, uint8_t val);
+int bus_write_2(int rid, long ofs, uint16_t val);
+int bus_write_4(int rid, long ofs, uint32_t val);
+
+typedef unsigned long bus_addr_t;
+typedef unsigned long bus_size_t;
+typedef int busdma_tag_t;
+typedef int busdma_md_t;
+typedef int busdma_seg_t;
+
+int busdma_tag_create(const char *dev, bus_addr_t align, bus_addr_t bndry,
+ bus_addr_t maxaddr, bus_size_t maxsz, u_int nsegs,
+ bus_size_t maxsegsz, u_int datarate, u_int flags,
+ busdma_tag_t *out_p);
+int busdma_tag_derive(busdma_tag_t tag, bus_addr_t align, bus_addr_t bndry,
+ bus_addr_t maxaddr, bus_size_t maxsz, u_int nsegs,
+ bus_size_t maxsegsz, u_int datarate, u_int flags,
+ busdma_tag_t *out_p);
+int busdma_tag_destroy(busdma_tag_t tag);
+
+int busdma_mem_alloc(busdma_tag_t tag, u_int flags, busdma_md_t *out_p);
+int busdma_mem_free(busdma_md_t md);
+
+#define BUSDMA_MD_BUS_SPACE 0
+#define BUSDMA_MD_PHYS_SPACE 1
+#define BUSDMA_MD_VIRT_SPACE 2
+
+int busdma_md_first_seg(busdma_md_t, int space);
+int busdma_md_next_seg(busdma_md_t, busdma_seg_t seg);
+
+bus_addr_t busdma_seg_get_addr(busdma_seg_t seg);
+bus_size_t busdma_seg_get_size(busdma_seg_t seg);
+
+#endif /* _LIBBUS_SPACE_H_ */
diff --git a/tools/bus_space/Makefile.inc b/tools/bus_space/Makefile.inc
index a448e3377582c..080689ade4a04 100644
--- a/tools/bus_space/Makefile.inc
+++ b/tools/bus_space/Makefile.inc
@@ -1,4 +1,4 @@
# $FreeBSD$
.PATH: ${.CURDIR}/..
-SRCS+= bus_space.c
+SRCS+= bus.c busdma.c
diff --git a/tools/bus_space/Python/Makefile b/tools/bus_space/Python/Makefile
index 8e38ed3dab3f0..5bc9b77140acf 100644
--- a/tools/bus_space/Python/Makefile
+++ b/tools/bus_space/Python/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-SHLIB_NAME= bus_space.so
+SHLIB_NAME= bus.so
SRCS= lang.c
CFLAGS+= -I${.CURDIR}/.. -I/usr/local/include/python2.7
diff --git a/tools/bus_space/Python/lang.c b/tools/bus_space/Python/lang.c
index f328a77101199..2127df57fa4f4 100644
--- a/tools/bus_space/Python/lang.c
+++ b/tools/bus_space/Python/lang.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2014 Marcel Moolenaar
+ * Copyright (c) 2014, 2015 Marcel Moolenaar
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,7 +29,8 @@ __FBSDID("$FreeBSD$");
#include <Python.h>
-#include "bus_space.h"
+#include "bus.h"
+#include "busdma.h"
static PyObject *
bus_read_1(PyObject *self, PyObject *args)
@@ -173,7 +174,154 @@ bus_subregion(PyObject *self, PyObject *args)
return (Py_BuildValue("i", rid));
}
-static PyMethodDef bus_space_methods[] = {
+static PyObject *
+busdma_tag_create(PyObject *self, PyObject *args)
+{
+ char *dev;
+ u_long align, bndry, maxaddr, maxsz, maxsegsz;
+ u_int nsegs, datarate, flags;
+ int tid;
+
+ if (!PyArg_ParseTuple(args, "skkkkIkII", &dev, &align, &bndry,
+ &maxaddr, &maxsz, &nsegs, &maxsegsz, &datarate, &flags))
+ return (NULL);
+ tid = bd_tag_create(dev, align, bndry, maxaddr, maxsz, nsegs,
+ maxsegsz, datarate, flags);
+ if (tid == -1) {
+ PyErr_SetString(PyExc_IOError, strerror(errno));
+ return (NULL);
+ }
+ return (Py_BuildValue("i", tid));
+}
+
+static PyObject *
+busdma_tag_derive(PyObject *self, PyObject *args)
+{
+ u_long align, bndry, maxaddr, maxsz, maxsegsz;
+ u_int nsegs, datarate, flags;
+ int ptid, tid;
+
+ if (!PyArg_ParseTuple(args, "ikkkkIkII", &ptid, &align, &bndry,
+ &maxaddr, &maxsz, &nsegs, &maxsegsz, &datarate, &flags))
+ return (NULL);
+ tid = bd_tag_derive(ptid, align, bndry, maxaddr, maxsz, nsegs,
+ maxsegsz, datarate, flags);
+ if (tid == -1) {
+ PyErr_SetString(PyExc_IOError, strerror(errno));
+ return (NULL);
+ }
+ return (Py_BuildValue("i", tid));
+}
+
+static PyObject *
+busdma_tag_destroy(PyObject *self, PyObject *args)
+{
+ int error, tid;
+
+ if (!PyArg_ParseTuple(args, "i", &tid))
+ return (NULL);
+ error = bd_tag_destroy(tid);
+ if (error) {
+ PyErr_SetString(PyExc_IOError, strerror(error));
+ return (NULL);
+ }
+ Py_RETURN_NONE;
+}
+
+static PyObject *
+busdma_mem_alloc(PyObject *self, PyObject *args)
+{
+ u_int flags;
+ int mdid, tid;
+
+ if (!PyArg_ParseTuple(args, "iI", &tid, &flags))
+ return (NULL);
+ mdid = bd_mem_alloc(tid, flags);
+ if (mdid == -1) {
+ PyErr_SetString(PyExc_IOError, strerror(errno));
+ return (NULL);
+ }
+ return (Py_BuildValue("i", mdid));
+}
+
+static PyObject *
+busdma_mem_free(PyObject *self, PyObject *args)
+{
+ int error, mdid;
+
+ if (!PyArg_ParseTuple(args, "i", &mdid))
+ return (NULL);
+ error = bd_mem_free(mdid);
+ if (error) {
+ PyErr_SetString(PyExc_IOError, strerror(error));
+ return (NULL);
+ }
+ Py_RETURN_NONE;
+}
+
+static PyObject *
+busdma_md_first_seg(PyObject *self, PyObject *args)
+{
+ int error, mdid, sid, what;
+
+ if (!PyArg_ParseTuple(args, "ii", &mdid, &what))
+ return (NULL);
+ sid = bd_md_first_seg(mdid, what);
+ if (sid == -1) {
+ PyErr_SetString(PyExc_IOError, strerror(errno));
+ return (NULL);
+ }
+ return (Py_BuildValue("i", sid));
+}
+
+static PyObject *
+busdma_md_next_seg(PyObject *self, PyObject *args)
+{
+ int error, mdid, sid;
+
+ if (!PyArg_ParseTuple(args, "ii", &mdid, &sid))
+ return (NULL);
+ sid = bd_md_next_seg(mdid, sid);
+ if (sid == -1) {
+ PyErr_SetString(PyExc_IOError, strerror(errno));
+ return (NULL);
+ }
+ return (Py_BuildValue("i", sid));
+}
+
+static PyObject *
+busdma_seg_get_addr(PyObject *self, PyObject *args)
+{
+ u_long addr;
+ int error, sid;
+
+ if (!PyArg_ParseTuple(args, "i", &sid))
+ return (NULL);
+ error = bd_seg_get_addr(sid, &addr);
+ if (error) {
+ PyErr_SetString(PyExc_IOError, strerror(error));
+ return (NULL);
+ }
+ return (Py_BuildValue("k", addr));
+}
+
+static PyObject *
+busdma_seg_get_size(PyObject *self, PyObject *args)
+{
+ u_long size;
+ int error, sid;
+
+ if (!PyArg_ParseTuple(args, "i", &sid))
+ return (NULL);
+ error = bd_seg_get_size(sid, &size);
+ if (error) {
+ PyErr_SetString(PyExc_IOError, strerror(error));
+ return (NULL);
+ }
+ return (Py_BuildValue("k", size));
+}
+
+static PyMethodDef bus_methods[] = {
{ "read_1", bus_read_1, METH_VARARGS, "Read a 1-byte data item." },
{ "read_2", bus_read_2, METH_VARARGS, "Read a 2-byte data item." },
{ "read_4", bus_read_4, METH_VARARGS, "Read a 4-byte data item." },
@@ -192,9 +340,33 @@ static PyMethodDef bus_space_methods[] = {
{ NULL, NULL, 0, NULL }
};
+static PyMethodDef busdma_methods[] = {
+ { "tag_create", busdma_tag_create, METH_VARARGS,
+ "Create a root tag." },
+ { "tag_derive", busdma_tag_derive, METH_VARARGS,
+ "Derive a child tag." },
+ { "tag_destroy", busdma_tag_destroy, METH_VARARGS,
+ "Destroy a tag." },
+ { "mem_alloc", busdma_mem_alloc, METH_VARARGS,
+ "Allocate memory according to the DMA constraints." },
+ { "mem_free", busdma_mem_free, METH_VARARGS,
+ "Free allocated memory." },
+
+ { "md_first_seg", busdma_md_first_seg, METH_VARARGS,
+ "Return first segment in one of the segment lists." },
+ { "md_next_seg", busdma_md_next_seg, METH_VARARGS,
+ "Return next segment in the segment list." },
+ { "seg_get_addr", busdma_seg_get_addr, METH_VARARGS,
+ "Return the address of the segment." },
+ { "seg_get_size", busdma_seg_get_size, METH_VARARGS,
+ "Return the size of the segment." },
+ { NULL, NULL, 0, NULL }
+};
+
PyMODINIT_FUNC
-initbus_space(void)
+initbus(void)
{
- Py_InitModule("bus_space", bus_space_methods);
+ Py_InitModule("bus", bus_methods);
+ Py_InitModule("busdma", busdma_methods);
}
diff --git a/tools/bus_space/bus_space.c b/tools/bus_space/bus.c
index 260222c46eb58..01b7693c3bf8c 100644
--- a/tools/bus_space/bus_space.c
+++ b/tools/bus_space/bus.c
@@ -35,7 +35,7 @@ __FBSDID("$FreeBSD$");
#include <stdlib.h>
#include <unistd.h>
-#include "bus_space.h"
+#include "bus.h"
#include "../../sys/dev/proto/proto_dev.h"
diff --git a/tools/bus_space/bus_space.h b/tools/bus_space/bus.h
index d34710641c660..d34710641c660 100644
--- a/tools/bus_space/bus_space.h
+++ b/tools/bus_space/bus.h
diff --git a/tools/bus_space/busdma.c b/tools/bus_space/busdma.c
new file mode 100644
index 0000000000000..e1e5a00885b57
--- /dev/null
+++ b/tools/bus_space/busdma.c
@@ -0,0 +1,437 @@
+/*-
+ * Copyright (c) 2015 Marcel Moolenaar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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 <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "busdma.h"
+
+#include "../../sys/dev/proto/proto_dev.h"
+
+struct obj {
+ int oid;
+ u_int type;
+#define OBJ_TYPE_NONE 0
+#define OBJ_TYPE_TAG 1
+#define OBJ_TYPE_MD 2
+#define OBJ_TYPE_SEG 3
+ u_int refcnt;
+ int fd;
+ struct obj *parent;
+ u_long key;
+ union {
+ struct {
+ unsigned long align;
+ unsigned long bndry;
+ unsigned long maxaddr;
+ unsigned long maxsz;
+ unsigned long maxsegsz;
+ unsigned long nsegs;
+ unsigned long datarate;
+ } tag;
+ struct {
+ struct obj *seg[3];
+ int nsegs[3];
+#define BUSDMA_MD_BUS 0
+#define BUSDMA_MD_PHYS 1
+#define BUSDMA_MD_VIRT 2
+ } md;
+ struct {
+ struct obj *next;
+ unsigned long address;
+ unsigned long size;
+ } seg;
+ } u;
+};
+
+static struct obj **oidtbl = NULL;
+static int noids = 0;
+
+static struct obj *
+obj_alloc(u_int type)
+{
+ struct obj **newtbl, *obj;
+ int oid;
+
+ obj = calloc(1, sizeof(struct obj));
+ obj->type = type;
+
+ for (oid = 0; oid < noids; oid++) {
+ if (oidtbl[oid] == 0)
+ break;
+ }
+ if (oid == noids) {
+ newtbl = realloc(oidtbl, sizeof(struct obj *) * (noids + 1));
+ if (newtbl == NULL) {
+ free(obj);
+ return (NULL);
+ }
+ oidtbl = newtbl;
+ noids++;
+ }
+ oidtbl[oid] = obj;
+ obj->oid = oid;
+ return (obj);
+}
+
+static int
+obj_free(struct obj *obj)
+{
+
+ oidtbl[obj->oid] = NULL;
+ free(obj);
+ return (0);
+}
+
+static struct obj *
+obj_lookup(int oid, u_int type)
+{
+ struct obj *obj;
+
+ if (oid < 0 || oid >= noids) {
+ errno = EINVAL;
+ return (NULL);
+ }
+ obj = oidtbl[oid];
+ if (obj->refcnt == 0) {
+ errno = ENXIO;
+ return (NULL);
+ }
+ if (type != OBJ_TYPE_NONE && obj->type != type) {
+ errno = ENODEV;
+ return (NULL);
+ }
+ return (obj);
+}
+
+struct obj *
+bd_tag_new(struct obj *ptag, int fd, u_long align, u_long bndry,
+ u_long maxaddr, u_long maxsz, u_int nsegs, u_long maxsegsz,
+ u_int datarate, u_int flags)
+{
+ struct proto_ioc_busdma ioc;
+ struct obj *tag;
+
+ tag = obj_alloc(OBJ_TYPE_TAG);
+ if (tag == NULL)
+ return (NULL);
+
+ memset(&ioc, 0, sizeof(ioc));
+ ioc.request = (ptag != NULL) ? PROTO_IOC_BUSDMA_TAG_DERIVE :
+ PROTO_IOC_BUSDMA_TAG_CREATE;
+ ioc.key = (ptag != NULL) ? ptag->key : 0;
+ ioc.u.tag.align = align;
+ ioc.u.tag.bndry = bndry;
+ ioc.u.tag.maxaddr = maxaddr;
+ ioc.u.tag.maxsz = maxsz;
+ ioc.u.tag.nsegs = nsegs;
+ ioc.u.tag.maxsegsz = maxsegsz;
+ ioc.u.tag.datarate = datarate;
+ ioc.u.tag.flags = flags;
+ if (ioctl(fd, PROTO_IOC_BUSDMA, &ioc) == -1) {
+ obj_free(tag);
+ return (NULL);
+ }
+ tag->refcnt = 1;
+ tag->fd = fd;
+ tag->parent = ptag;
+ tag->key = ioc.result;
+ tag->u.tag.align = ioc.u.tag.align;
+ tag->u.tag.bndry = ioc.u.tag.bndry;
+ tag->u.tag.maxaddr = ioc.u.tag.maxaddr;
+ tag->u.tag.maxsz = ioc.u.tag.maxsz;
+ tag->u.tag.maxsegsz = ioc.u.tag.maxsegsz;
+ tag->u.tag.nsegs = ioc.u.tag.nsegs;
+ tag->u.tag.datarate = ioc.u.tag.datarate;
+ return (tag);
+}
+
+int
+bd_tag_create(const char *dev, u_long align, u_long bndry, u_long maxaddr,
+ u_long maxsz, u_int nsegs, u_long maxsegsz, u_int datarate, u_int flags)
+{
+ struct obj *tag;
+ int fd;
+
+ fd = open(dev, O_RDWR);
+ if (fd == -1)
+ return (-1);
+
+ tag = bd_tag_new(NULL, fd, align, bndry, maxaddr, maxsz, nsegs,
+ maxsegsz, datarate, flags);
+ if (tag == NULL) {
+ close(fd);
+ return (-1);
+ }
+ return (tag->oid);
+}
+
+int
+bd_tag_derive(int ptid, u_long align, u_long bndry, u_long maxaddr,
+ u_long maxsz, u_int nsegs, u_long maxsegsz, u_int datarate, u_int flags)
+{
+ struct obj *ptag, *tag;
+
+ ptag = obj_lookup(ptid, OBJ_TYPE_TAG);
+ if (ptag == NULL)
+ return (-1);
+
+ tag = bd_tag_new(ptag, ptag->fd, align, bndry, maxaddr, maxsz, nsegs,
+ maxsegsz, datarate, flags);
+ if (tag == NULL)
+ return (-1);
+ ptag->refcnt++;
+ return (tag->oid);
+}
+
+int
+bd_tag_destroy(int tid)
+{
+ struct proto_ioc_busdma ioc;
+ struct obj *ptag, *tag;
+
+ tag = obj_lookup(tid, OBJ_TYPE_TAG);
+ if (tag == NULL)
+ return (errno);
+ if (tag->refcnt > 1)
+ return (EBUSY);
+
+ memset(&ioc, 0, sizeof(ioc));
+ ioc.request = PROTO_IOC_BUSDMA_TAG_DESTROY;
+ ioc.key = tag->key;
+ if (ioctl(tag->fd, PROTO_IOC_BUSDMA, &ioc) == -1)
+ return (errno);
+
+ if (tag->parent != NULL)
+ tag->parent->refcnt--;
+ else
+ close(tag->fd);
+ obj_free(tag);
+ return (0);
+}
+
+int
+bd_mem_alloc(int tid, u_int flags)
+{
+ struct proto_ioc_busdma ioc;
+ struct obj *md, *tag;
+ struct obj *bseg, *pseg, *vseg;
+
+ tag = obj_lookup(tid, OBJ_TYPE_TAG);
+ if (tag == NULL)
+ return (-1);
+
+ md = obj_alloc(OBJ_TYPE_MD);
+ if (md == NULL)
+ return (-1);
+
+ memset(&ioc, 0, sizeof(ioc));
+ ioc.request = PROTO_IOC_BUSDMA_MEM_ALLOC;
+ ioc.u.mem.tag = tag->key;
+ ioc.u.mem.flags = flags;
+ if (ioctl(tag->fd, PROTO_IOC_BUSDMA, &ioc) == -1) {
+ obj_free(md);
+ return (-1);
+ }
+
+ md->refcnt = 1;
+ md->fd = tag->fd;
+ md->parent = tag;
+ tag->refcnt++;
+ md->key = ioc.result;
+
+ /* XXX we need to support multiple segments */
+ assert(ioc.u.mem.phys_nsegs == 1);
+ assert(ioc.u.mem.bus_nsegs == 1);
+
+ bseg = pseg = vseg = NULL;
+
+ bseg = obj_alloc(OBJ_TYPE_SEG);
+ if (bseg == NULL)
+ goto fail;
+ bseg->refcnt = 1;
+ bseg->parent = md;
+ bseg->u.seg.address = ioc.u.mem.bus_addr;
+ bseg->u.seg.size = tag->u.tag.maxsz;
+ md->u.md.seg[BUSDMA_MD_BUS] = bseg;
+ md->u.md.nsegs[BUSDMA_MD_BUS] = ioc.u.mem.bus_nsegs;
+
+ pseg = obj_alloc(OBJ_TYPE_SEG);
+ if (pseg == NULL)
+ goto fail;
+ pseg->refcnt = 1;
+ pseg->parent = md;
+ pseg->u.seg.address = ioc.u.mem.phys_addr;
+ pseg->u.seg.size = tag->u.tag.maxsz;
+ md->u.md.seg[BUSDMA_MD_PHYS] = pseg;
+ md->u.md.nsegs[BUSDMA_MD_PHYS] = ioc.u.mem.phys_nsegs;
+
+ vseg = obj_alloc(OBJ_TYPE_SEG);
+ if (vseg == NULL)
+ goto fail;
+ vseg->refcnt = 1;
+ vseg->parent = md;
+ vseg->u.seg.address = (uintptr_t)mmap(NULL, pseg->u.seg.size,
+ PROT_READ | PROT_WRITE, MAP_NOCORE | MAP_SHARED, md->fd,
+ pseg->u.seg.address);
+ if (vseg->u.seg.address == (uintptr_t)MAP_FAILED)
+ goto fail;
+ vseg->u.seg.size = pseg->u.seg.size;
+ md->u.md.seg[BUSDMA_MD_VIRT] = vseg;
+ md->u.md.nsegs[BUSDMA_MD_VIRT] = 1;
+
+ return (md->oid);
+
+ fail:
+ if (vseg != NULL)
+ obj_free(vseg);
+ if (pseg != NULL)
+ obj_free(pseg);
+ if (bseg != NULL)
+ obj_free(bseg);
+ memset(&ioc, 0, sizeof(ioc));
+ ioc.request = PROTO_IOC_BUSDMA_MEM_FREE;
+ ioc.key = md->key;
+ ioctl(md->fd, PROTO_IOC_BUSDMA, &ioc);
+ md->parent->refcnt--;
+ obj_free(md);
+ return (-1);
+}
+
+int
+bd_mem_free(int mdid)
+{
+ struct proto_ioc_busdma ioc;
+ struct obj *md, *seg, *seg0;
+
+ md = obj_lookup(mdid, OBJ_TYPE_MD);
+ if (md == NULL)
+ return (errno);
+
+ for (seg = md->u.md.seg[BUSDMA_MD_VIRT]; seg != NULL; seg = seg0) {
+ munmap((void *)seg->u.seg.address, seg->u.seg.size);
+ seg0 = seg->u.seg.next;
+ obj_free(seg);
+ }
+ for (seg = md->u.md.seg[BUSDMA_MD_PHYS]; seg != NULL; seg = seg0) {
+ seg0 = seg->u.seg.next;
+ obj_free(seg);
+ }
+ for (seg = md->u.md.seg[BUSDMA_MD_BUS]; seg != NULL; seg = seg0) {
+ seg0 = seg->u.seg.next;
+ obj_free(seg);
+ }
+ memset(&ioc, 0, sizeof(ioc));
+ ioc.request = PROTO_IOC_BUSDMA_MEM_FREE;
+ ioc.key = md->key;
+ if (ioctl(md->fd, PROTO_IOC_BUSDMA, &ioc) == -1)
+ return (errno);
+
+ md->parent->refcnt--;
+ obj_free(md);
+ return (0);
+}
+
+int
+bd_md_first_seg(int mdid, int space)
+{
+ struct obj *md, *seg;
+
+ md = obj_lookup(mdid, OBJ_TYPE_MD);
+ if (md == NULL)
+ return (-1);
+
+ if (space != BUSDMA_MD_BUS && space != BUSDMA_MD_PHYS &&
+ space != BUSDMA_MD_VIRT) {
+ errno = EINVAL;
+ return (-1);
+ }
+ seg = md->u.md.seg[space];
+ if (seg == NULL) {
+ errno = ENXIO;
+ return (-1);
+ }
+ return (seg->oid);
+}
+
+int
+bd_md_next_seg(int mdid, int sid)
+{
+ struct obj *seg;
+
+ seg = obj_lookup(sid, OBJ_TYPE_SEG);
+ if (seg == NULL)
+ return (-1);
+
+ seg = seg->u.seg.next;
+ if (seg == NULL) {
+ errno = ENXIO;
+ return (-1);
+ }
+ return (seg->oid);
+}
+
+int
+bd_seg_get_addr(int sid, u_long *addr_p)
+{
+ struct obj *seg;
+
+ if (addr_p == NULL)
+ return (EINVAL);
+
+ seg = obj_lookup(sid, OBJ_TYPE_SEG);
+ if (seg == NULL)
+ return (errno);
+
+ *addr_p = seg->u.seg.address;
+ return (0);
+}
+
+int
+bd_seg_get_size(int sid, u_long *size_p)
+{
+ struct obj *seg;
+
+ if (size_p == NULL)
+ return (EINVAL);
+
+ seg = obj_lookup(sid, OBJ_TYPE_SEG);
+ if (seg == NULL)
+ return (errno);
+
+ *size_p = seg->u.seg.size;
+ return (0);
+}
diff --git a/tools/bus_space/C/libbus_space.h b/tools/bus_space/busdma.h
index 3e8860f003bbb..7394b267fcdcd 100644
--- a/tools/bus_space/C/libbus_space.h
+++ b/tools/bus_space/busdma.h
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2014 Marcel Moolenaar
+ * Copyright (c) 2015 Marcel Moolenaar
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,17 +26,24 @@
* $FreeBSD$
*/
-#ifndef _LIBBUS_SPACE_H_
-#define _LIBBUS_SPACE_H_
+#ifndef _TOOLS_BUS_DMA_H_
+#define _TOOLS_BUS_DMA_H_
-int bus_space_map(const char *dev);
-int bus_space_read_1(int rid, long ofs);
-int bus_space_read_2(int rid, long ofs);
-int64_t bus_space_read_4(int rid, long ofs);
-int bus_space_subregion(int rid, long ofs, long sz);
-int bus_space_unmap(int rid);
-int bus_space_write_1(int rid, long ofs, uint8_t val);
-int bus_space_write_2(int rid, long ofs, uint16_t val);
-int bus_space_write_4(int rid, long ofs, uint32_t val);
+int bd_tag_create(const char *dev, u_long align, u_long bndry,
+ u_long maxaddr, u_long maxsz, u_int nsegs, u_long maxsegsz,
+ u_int datarate, u_int flags);
+int bd_tag_derive(int tid, u_long align, u_long bndry, u_long maxaddr,
+ u_long maxsz, u_int nsegs, u_long maxsegsz, u_int datarate,
+ u_int flags);
+int bd_tag_destroy(int tid);
-#endif /* _LIBBUS_SPACE_H_ */
+int bd_mem_alloc(int tid, u_int flags);
+int bd_mem_free(int mdid);
+
+int bd_md_first_seg(int mdid, int what);
+int bd_md_next_seg(int mdid, int sid);
+
+int bd_seg_get_addr(int sid, u_long *);
+int bd_seg_get_size(int sid, u_long *);
+
+#endif /* _TOOLS_BUS_DMA_H_ */
diff --git a/tools/regression/include/stdatomic/Makefile.depend b/tools/regression/include/stdatomic/Makefile.depend
new file mode 100644
index 0000000000000..abf239ef262ed
--- /dev/null
+++ b/tools/regression/include/stdatomic/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,}
+
+DIRDEPS = \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tools/tools/ath/ath_ee_9300_print/Makefile.depend b/tools/tools/ath/ath_ee_9300_print/Makefile.depend
new file mode 100644
index 0000000000000..c9ce330f3d670
--- /dev/null
+++ b/tools/tools/ath/ath_ee_9300_print/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,}
+
+DIRDEPS = \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+main.o: opt_ah.h
+main.po: opt_ah.h
+.endif
diff --git a/tools/tools/drm/radeon/mkregtable/Makefile.depend b/tools/tools/drm/radeon/mkregtable/Makefile.depend
new file mode 100644
index 0000000000000..abf239ef262ed
--- /dev/null
+++ b/tools/tools/drm/radeon/mkregtable/Makefile.depend
@@ -0,0 +1,19 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,}
+
+DIRDEPS = \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tools/tools/makeroot/Makefile.depend b/tools/tools/makeroot/Makefile.depend
new file mode 100644
index 0000000000000..d14a02b5041f8
--- /dev/null
+++ b/tools/tools/makeroot/Makefile.depend
@@ -0,0 +1,13 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,}
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tools/tools/usbtest/Makefile.depend b/tools/tools/usbtest/Makefile.depend
new file mode 100644
index 0000000000000..e33ad8236b9c8
--- /dev/null
+++ b/tools/tools/usbtest/Makefile.depend
@@ -0,0 +1,20 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DEP_RELDIR := ${_PARSEDIR:S,${SRCTOP}/,,}
+
+DIRDEPS = \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libusb \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif