diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/build/Makefile.depend | 13 | ||||
| -rw-r--r-- | tools/build/mk/Makefile.boot | 3 | ||||
| -rw-r--r-- | tools/build/options/WITHOUT_MANDOCDB | 6 | ||||
| -rw-r--r-- | tools/bus_space/C/Makefile | 3 | ||||
| -rw-r--r-- | tools/bus_space/C/lang.c | 120 | ||||
| -rw-r--r-- | tools/bus_space/C/libbus.h | 71 | ||||
| -rw-r--r-- | tools/bus_space/Makefile.inc | 2 | ||||
| -rw-r--r-- | tools/bus_space/Python/Makefile | 2 | ||||
| -rw-r--r-- | tools/bus_space/Python/lang.c | 182 | ||||
| -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.c | 437 | ||||
| -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.depend | 19 | ||||
| -rw-r--r-- | tools/tools/ath/ath_ee_9300_print/Makefile.depend | 21 | ||||
| -rw-r--r-- | tools/tools/drm/radeon/mkregtable/Makefile.depend | 19 | ||||
| -rw-r--r-- | tools/tools/makeroot/Makefile.depend | 13 | ||||
| -rw-r--r-- | tools/tools/usbtest/Makefile.depend | 20 |
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 |
