svn commit: r349551 - in head/tools/bus_space: Python examples

Marcel Moolenaar marcel at FreeBSD.org
Sun Jun 30 02:29:14 UTC 2019


Author: marcel
Date: Sun Jun 30 02:29:12 2019
New Revision: 349551
URL: https://svnweb.freebsd.org/changeset/base/349551

Log:
  Add support for Python 3 and make it the default.
  
  Python 2.7 will retire on Januari 1, 2020.

Modified:
  head/tools/bus_space/Python/Makefile
  head/tools/bus_space/Python/lang.c
  head/tools/bus_space/examples/am79c900_diag.py

Modified: head/tools/bus_space/Python/Makefile
==============================================================================
--- head/tools/bus_space/Python/Makefile	Sun Jun 30 02:08:13 2019	(r349550)
+++ head/tools/bus_space/Python/Makefile	Sun Jun 30 02:29:12 2019	(r349551)
@@ -3,7 +3,11 @@
 SHLIB_NAME=	bus.so
 SRCS=		lang.c
 
-CFLAGS+= -I${.CURDIR}/.. -I/usr/local/include/python2.7
-LDFLAGS+= -L/usr/local/lib -lpython2.7
+# Set PYTHON to the version to compile against.
+# E.g. "python2.7", "python3.6", etc...
+PYTHON=	python3.6m
+
+CFLAGS+= -I${.CURDIR}/.. -I/usr/local/include/${PYTHON}
+LDFLAGS+= -L/usr/local/lib -l${PYTHON}
 
 .include <bsd.lib.mk>

Modified: head/tools/bus_space/Python/lang.c
==============================================================================
--- head/tools/bus_space/Python/lang.c	Sun Jun 30 02:08:13 2019	(r349550)
+++ head/tools/bus_space/Python/lang.c	Sun Jun 30 02:29:12 2019	(r349551)
@@ -412,6 +412,12 @@ busdma_sync_range(PyObject *self, PyObject *args)
 	Py_RETURN_NONE;
 }
 
+/*
+ * Module methods and initialization.
+ */
+
+static char bus_docstr[] = "Access to H/W bus memory and register areas.";
+
 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." },
@@ -431,6 +437,9 @@ static PyMethodDef bus_methods[] = {
     { NULL, NULL, 0, NULL }
 };
 
+static char busdma_docstr[] = "A bus- and device-independent interface"
+    " to Direct Memory Access (DMA) mechanisms.";
+
 static PyMethodDef busdma_methods[] = {
     { "tag_create", busdma_tag_create, METH_VARARGS,
 	"Create a root tag." },
@@ -470,18 +479,12 @@ static PyMethodDef busdma_methods[] = {
     { NULL, NULL, 0, NULL }
 };
 
-PyMODINIT_FUNC
-initbus(void)
+static PyObject *
+module_initialize(PyObject *bus, PyObject *busdma)
 {
-	PyObject *bus, *busdma;
 
-	bus = Py_InitModule("bus", bus_methods);
-	if (bus == NULL)
-		return;
-	busdma = Py_InitModule("busdma", busdma_methods);
-	if (busdma == NULL)
-		return;
-	PyModule_AddObject(bus, "dma", busdma);
+	if (bus == NULL || busdma == NULL)
+		return (NULL);
 
 	PyModule_AddObject(busdma, "MD_BUS_SPACE", Py_BuildValue("i", 0));
 	PyModule_AddObject(busdma, "MD_PHYS_SPACE", Py_BuildValue("i", 1));
@@ -491,4 +494,49 @@ initbus(void)
 	PyModule_AddObject(busdma, "SYNC_POSTREAD", Py_BuildValue("i", 2));
 	PyModule_AddObject(busdma, "SYNC_PREWRITE", Py_BuildValue("i", 4));
 	PyModule_AddObject(busdma, "SYNC_POSTWRITE", Py_BuildValue("i", 8));
+
+	PyModule_AddObject(bus, "dma", busdma);
+	return (bus);
 }
+
+#if PY_MAJOR_VERSION >= 3
+
+static struct PyModuleDef bus_module = {
+	PyModuleDef_HEAD_INIT,
+	"bus",
+	bus_docstr,
+        -1,
+	bus_methods,
+};
+
+static struct PyModuleDef busdma_module = {
+	PyModuleDef_HEAD_INIT,
+	"busdma",
+	busdma_docstr,
+        -1,
+	busdma_methods,
+};
+
+PyMODINIT_FUNC
+PyInit_bus(void)
+{
+	PyObject *bus, *busdma;
+
+	bus = PyModule_Create(&bus_module);
+	busdma = PyModule_Create(&busdma_module);
+	return (module_initialize(bus, busdma));
+}
+
+#else /* PY_MAJOR_VERSION >= 3 */
+
+PyMODINIT_FUNC
+initbus(void)
+{
+	PyObject *bus, *busdma;
+
+	bus = Py_InitModule3("bus", bus_methods, bus_docstr);
+	busdma = Py_InitModule3("busdma", busdma_methods, busdma_docstr);
+	(void)module_initialize(bus, busdma);
+}
+
+#endif /* PY_MAJOR_VERSION >= 3 */

Modified: head/tools/bus_space/examples/am79c900_diag.py
==============================================================================
--- head/tools/bus_space/examples/am79c900_diag.py	Sun Jun 30 02:08:13 2019	(r349550)
+++ head/tools/bus_space/examples/am79c900_diag.py	Sun Jun 30 02:29:12 2019	(r349551)
@@ -54,7 +54,7 @@ import time
 sys.path.append('/usr/lib')
 
 import bus
-import busdma
+from bus import dma as busdma
 
 
 # ILACC initialization block definition
@@ -161,7 +161,7 @@ def ip_str(a):
 
 
 def mac_is(l, r):
-    for i in xrange(6):
+    for i in range(6):
         if l[i] != r[i]:
             return False
     return True
@@ -203,7 +203,7 @@ def stop():
 
 mac = ()
 bcast = ()
-for o in xrange(6):
+for o in range(6):
     mac += (bus.read_1(io, o),)
     bcast += (0xff,)
 logging.info('ethernet address = ' + MACFMT % mac)
@@ -237,23 +237,23 @@ addr_txbufs = addr_rxbufs + bufsize * nrxbufs
 
 ib = initblock.from_address(addr_initblock)
 ib.mode = ((ffs(ntxbufs) - 1) << 28) | ((ffs(nrxbufs) - 1) << 20)
-for i in xrange(len(mac)):
+for i in range(len(mac)):
     ib.hwaddr[i] = mac[i]
-for i in xrange(4):
+for i in range(4):
     ib.filter[i] = 0xffff
 ib.rxdesc = busaddr + (addr_rxdesc - cpuaddr)
 ib.txdesc = busaddr + (addr_txdesc - cpuaddr)
 ib._pad1_ = 0
 ib._pad2_ = 0
 
-for i in xrange(nrxbufs):
+for i in range(nrxbufs):
     bd = bufdesc.from_address(addr_rxdesc + ctypes.sizeof(bufdesc) * i)
     bd.buffer = busaddr + (addr_rxbufs - cpuaddr) + bufsize * i
     bd.flags = (1 << 31) | (15 << 12) | (-bufsize & 0xfff)
     bd.length = 0
     bd._pad_ = 0
 
-for i in xrange(ntxbufs):
+for i in range(ntxbufs):
     bd = bufdesc.from_address(addr_txdesc + ctypes.sizeof(bufdesc) * i)
     bd.buffer = busaddr + (addr_txbufs - cpuaddr) + bufsize * i
     bd.flags = (15 << 12)
@@ -280,10 +280,10 @@ start()
 pkt = packet.from_address(addr_txbufs)
 ctypes.memset(addr_txbufs, 0, ctypes.sizeof(pkt))
 options = [53, 1, 1]
-for i in xrange(len(options)):
+for i in range(len(options)):
     pkt.dhcp_options[i] = options[i]
 pkt.dhcp_magic = 0x63825363
-for i in xrange(6):
+for i in range(6):
     pkt.bootp_chaddr[i] = mac[i]
 pkt.bootp_hlen = 6
 pkt.bootp_htype = 1
@@ -298,7 +298,7 @@ pkt.ip_ttl = 64
 pkt.ip_len = ctypes.sizeof(pkt) - 14
 pkt.ip_vl = 0x45
 pkt.eth_type = 0x0800
-for i in xrange(6):
+for i in range(6):
     pkt.eth_src[i] = mac[i]
     pkt.eth_dest[i] = bcast[i]
 pktlen = ctypes.sizeof(pkt)
@@ -325,7 +325,7 @@ stop()
 busdma.sync_range(dmamem, busdma.SYNC_PREWRITE, addr_rxdesc - cpuaddr,
                   ctypes.sizeof(bufdesc) * nrxbufs)
 
-for i in xrange(nrxbufs):
+for i in range(nrxbufs):
     bd = bufdesc.from_address(addr_rxdesc + ctypes.sizeof(bufdesc) * i)
     if (bd.flags & 0x80000000):
         continue


More information about the svn-src-all mailing list