svn commit: r285903 - in head/tools/bus_space: . C Python

Marcel Moolenaar marcel at FreeBSD.org
Sun Jul 26 21:37:34 UTC 2015


Author: marcel
Date: Sun Jul 26 21:37:31 2015
New Revision: 285903
URL: https://svnweb.freebsd.org/changeset/base/285903

Log:
  Change the dev argument from a full path to just the device
  identification (e.g. isa:0x3f0 or pci0:2:1:0). In libbus,
  the device is turned into a path name. For bus_space_map(),
  the resource is now specified in a second argument.
  Before:
  	bus.map('/dev/proto/pci0:2:1:0/pcicfg')
  	busdma.tag_create('/dev/proto/pci0:2:1:0/busdma', ...)
  Now:
  	bus.map('pci0:2:1:0', 'pcicfg')
  	busdma.tag_create('pci0:2:1:0', ...)

Modified:
  head/tools/bus_space/C/lang.c
  head/tools/bus_space/C/libbus.h
  head/tools/bus_space/Python/lang.c
  head/tools/bus_space/bus.c
  head/tools/bus_space/bus.h
  head/tools/bus_space/busdma.c

Modified: head/tools/bus_space/C/lang.c
==============================================================================
--- head/tools/bus_space/C/lang.c	Sun Jul 26 19:47:46 2015	(r285902)
+++ head/tools/bus_space/C/lang.c	Sun Jul 26 21:37:31 2015	(r285903)
@@ -80,10 +80,10 @@ bus_write_4(int rid, long ofs, uint32_t 
 }
 
 int
-bus_map(const char *dev)
+bus_map(const char *dev, const char *resource)
 {
 
-	return (bs_map(dev));
+	return (bs_map(dev, resource));
 }
 
 int

Modified: head/tools/bus_space/C/libbus.h
==============================================================================
--- head/tools/bus_space/C/libbus.h	Sun Jul 26 19:47:46 2015	(r285902)
+++ head/tools/bus_space/C/libbus.h	Sun Jul 26 21:37:31 2015	(r285903)
@@ -29,7 +29,7 @@
 #ifndef _LIBBUS_SPACE_H_
 #define	_LIBBUS_SPACE_H_
 
-int	bus_map(const char *dev);
+int	bus_map(const char *dev, const char *resource);
 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);

Modified: head/tools/bus_space/Python/lang.c
==============================================================================
--- head/tools/bus_space/Python/lang.c	Sun Jul 26 19:47:46 2015	(r285902)
+++ head/tools/bus_space/Python/lang.c	Sun Jul 26 21:37:31 2015	(r285903)
@@ -131,12 +131,12 @@ bus_write_4(PyObject *self, PyObject *ar
 static PyObject *
 bus_map(PyObject *self, PyObject *args)
 {
-	char *dev;
+	char *dev, *resource;
 	int rid;
 
-	if (!PyArg_ParseTuple(args, "s", &dev))
+	if (!PyArg_ParseTuple(args, "ss", &dev, &resource))
 		return (NULL);
-	rid = bs_map(dev);
+	rid = bs_map(dev, resource);
 	if (rid == -1) {
 		PyErr_SetString(PyExc_IOError, strerror(errno));
 		return (NULL);

Modified: head/tools/bus_space/bus.c
==============================================================================
--- head/tools/bus_space/bus.c	Sun Jul 26 19:47:46 2015	(r285902)
+++ head/tools/bus_space/bus.c	Sun Jul 26 21:37:31 2015	(r285903)
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
 #include <errno.h>
 #include <fcntl.h>
 #include <limits.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 
@@ -92,19 +93,25 @@ rid_lookup(int rid)
 }
 
 int
-bs_map(const char *dev)
+bs_map(const char *dev, const char *res)
 {
+	char path[PATH_MAX];
 	struct proto_ioc_region region;
 	struct resource *r;
-	int rid;
+	int len, rid;
 
+	len = snprintf(path, PATH_MAX, "/dev/proto/%s/%s", dev, res);
+	if (len >= PATH_MAX) {
+		errno = EINVAL;
+		return (-1);
+	}
 	rid = rid_alloc();
 	if (rid == -1)
 		return (-1);
 	r = rid_lookup(rid);
 	if (r == NULL)
 		return (-1);
-	r->fd = open(dev, O_RDWR);
+	r->fd = open(path, O_RDWR);
 	if (r->fd == -1)
 		return (-1);
 	r->rid = -1;

Modified: head/tools/bus_space/bus.h
==============================================================================
--- head/tools/bus_space/bus.h	Sun Jul 26 19:47:46 2015	(r285902)
+++ head/tools/bus_space/bus.h	Sun Jul 26 21:37:31 2015	(r285903)
@@ -29,7 +29,7 @@
 #ifndef _TOOLS_BUS_SPACE_H_
 #define	_TOOLS_BUS_SPACE_H_
 
-int bs_map(const char *dev);
+int bs_map(const char *dev, const char *res);
 int bs_read(int rid, off_t ofs, void *buf, ssize_t bufsz);
 int bs_subregion(int rid0, long ofs, long sz);
 int bs_unmap(int rid);

Modified: head/tools/bus_space/busdma.c
==============================================================================
--- head/tools/bus_space/busdma.c	Sun Jul 26 19:47:46 2015	(r285902)
+++ head/tools/bus_space/busdma.c	Sun Jul 26 21:37:31 2015	(r285903)
@@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$");
 #include <errno.h>
 #include <fcntl.h>
 #include <limits.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
@@ -183,10 +184,16 @@ 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)
 {
+	char path[PATH_MAX];
 	struct obj *tag;
-	int fd;
+	int fd, len;
 
-	fd = open(dev, O_RDWR);
+	len = snprintf(path, PATH_MAX, "/dev/proto/%s/busdma", dev);
+	if (len >= PATH_MAX) {
+		errno = EINVAL;
+		return (-1);
+	}
+	fd = open(path, O_RDWR);
 	if (fd == -1)
 		return (-1);
 


More information about the svn-src-head mailing list