Knowledge (XXG)

busdma

Source 📝

1918: 87:, still sharing the same core logic irrespective of the bus, and such device drivers would also benefit from this same abstraction. Thus the rationale of busdma is to facilitate maximum 125:
umbrella (without an underscore). Both NetBSD and OpenBSD have additional "bus_space" APIs that have been amalgamated into the version of busdma incorporated into FreeBSD.
98:
Circa 2006, bus and DMA abstractions made it possible for NetBSD to support 50 hardware platforms and 14 CPU architectures out of a single source tree, compared to the
1978: 1778: 935: 648: 181: 76: 2013: 992: 1959: 1564: 1798: 1660: 1369: 1108: 980: 663: 619: 173: 1311: 1123: 723: 84: 60: 36: 1274: 455: 160: 1254: 2008: 1704: 871: 599: 72: 1269: 1264: 755: 1595: 99: 411: 215: 1346: 1145: 236: 156: 917: 71:(NetBSD/alpha). Additionally, some devices may come in multiple flavours supporting more than one bus, e.g., 1952: 1620: 1557: 1341: 815: 770: 361: 169: 2003: 1793: 1665: 1098: 1038: 950: 792: 668: 550: 48: 1983: 1881: 1652: 1304: 843: 716: 569: 1766: 1751: 1692: 1476: 1224: 1132: 876: 636: 448: 210: 92: 52: 339: 2018: 1756: 1709: 1379: 907: 504: 1945: 1608: 1601: 1550: 1515: 1103: 775: 760: 1083: 1078: 750: 1929: 1998: 1993: 1770: 1739: 1582: 1399: 1297: 1093: 927: 895: 709: 640: 614: 44: 1988: 1788: 1531: 945: 866: 658: 441: 415: 205: 1897: 1729: 1384: 1209: 1073: 1068: 678: 604: 80: 1972: 1818: 1682: 1590: 1573: 1494: 1434: 1157: 975: 883: 805: 765: 683: 587: 330: 260: 126: 40: 1876: 1744: 1633: 1499: 1204: 1048: 900: 828: 56: 1808: 1719: 1677: 1672: 1648: 1177: 1113: 970: 565: 555: 1869: 1803: 1446: 1259: 1152: 1088: 960: 856: 88: 310: 1424: 1419: 68: 20: 240: 51:
to new computer hardware. This is accomplished by having abstractions for
408: 1813: 1471: 1414: 1409: 1404: 1389: 1214: 1187: 1182: 1172: 1167: 1028: 965: 955: 673: 530: 421: 403: 390: 170:
Proceedings of the FREENIX Track: 1998 USENIX Annual Technical Conference
1917: 1542: 1859: 1697: 1638: 1429: 1336: 1321: 1249: 1192: 1162: 1023: 1018: 912: 742: 733: 626: 326: 322: 256: 252: 118: 114: 1289: 701: 109:
Originally implemented as the "bus_dma" APIs by the developers of the
1864: 1854: 1849: 1839: 1724: 1628: 1439: 1394: 1364: 1199: 1043: 1033: 1013: 985: 823: 688: 577: 545: 540: 496: 480: 465: 433: 350: 318: 291: 248: 110: 43:
less dependent on platform-specific code, thereby allowing the host
280: 269: 129:
developers are also slowly converting their drivers to use busdma.
1844: 1734: 1687: 1456: 1451: 1237: 1232: 888: 833: 609: 592: 509: 103: 64: 1925: 1783: 1714: 1466: 1461: 1374: 1245: 940: 861: 851: 800: 653: 582: 514: 402:— NetBSD, FreeBSD, OpenBSD and DragonFly BSD Kernel Developer's 389:— NetBSD, FreeBSD, OpenBSD and DragonFly BSD Kernel Developer's 241:"bus_dma, … — Bus and Machine Independent DMA Mapping Interface" 1546: 1293: 705: 437: 397: 1241: 1140: 384: 121:
and their derivatives; with FreeBSD incorporating it under a
16:
Application programming interfaces for BSD operating systems
1933: 409:
FreeBSD busdma and SMPng driver conversion project page
1890: 1827: 1765: 1647: 1619: 1581: 1524: 1508: 1487: 1357: 1329: 1223: 1131: 1122: 1061: 1001: 926: 842: 814: 791: 784: 741: 635: 564: 523: 489: 473: 311:"bus_space, … — bus space manipulation functions" 182:"A Machine-Independent DMA Framework for Net BSD" 55:(DMA) mapping across popular machine-independent 63:, which are used on distinct architectures from 199: 197: 162:A Machine-Independent DMA Framework for NetBSD 1953: 1558: 1305: 717: 449: 113:operating system, busdma has been adopted by 8: 1960: 1946: 1565: 1551: 1543: 1312: 1298: 1290: 1128: 788: 724: 710: 702: 456: 442: 434: 150: 148: 146: 144: 142: 138: 7: 1914: 1912: 1979:Application programming interfaces 1932:. You can help Knowledge (XXG) by 37:application programming interfaces 14: 309:Christopher G. Demetriou (1997). 1916: 206:"NetBSD: Not Just for Toasters" 363:DragonFly On-Line Manual Pages 293:DragonFly On-Line Manual Pages 1: 756:FreeBSD Documentation License 204:David Chisnall (2006-10-06). 2014:Operating system technology 1596:Light Weight Kernel Threads 2035: 1911: 352:OpenBSD manual page server 282:OpenBSD manual page server 216:Prentice Hall Professional 237:NASA Ames Research Center 157:NASA Ames Research Center 918:Highly Available STorage 279:"BUS_DMAMAP_CREATE(9)". 1621:OS-level virtualisation 91:across a wide range of 1928:-related article is a 1099:Marshall Kirk McKusick 39:designed to help make 2009:Operating system APIs 341:FreeBSD Manual Pages 271:FreeBSD Manual Pages 53:direct memory access 1275:PlayStation Vita OS 315:BSD Cross Reference 245:BSD Cross Reference 1609:Kernel Normal Form 1602:serializing tokens 1516:OpenBSD Foundation 1255:Nintendo Switch OS 1104:Diomidis Spinellis 776:Kernel Normal Form 761:FreeBSD Foundation 524:Notable subsystems 414:2010-07-29 at the 47:to be more easily 1941: 1940: 1906: 1905: 1540: 1539: 1347:security features 1287: 1286: 1283: 1282: 1079:Poul-Henning Kamp 1057: 1056: 751:FreeBSD Core Team 699: 698: 67:(NetBSD/i386) to 2026: 1962: 1955: 1948: 1920: 1913: 1583:Operating system 1567: 1560: 1553: 1544: 1358:Related projects 1330:Operating system 1314: 1307: 1300: 1291: 1270:PlayStation 4 OS 1265:PlayStation 3 OS 1129: 789: 726: 719: 712: 703: 490:Related projects 474:Operating system 458: 451: 444: 435: 430: 427: 425: 423: 401: 400: 388: 387: 370: 367: 360:"BUS_SPACE(9)". 356: 349:"BUS_SPACE(9)". 345: 338:"BUS_SPACE(9)". 334: 306: 300: 297: 286: 275: 264: 235:Jason R Thorpe; 232: 226: 225: 223: 222: 201: 192: 189: 177: 167: 155:Jason R Thorpe; 152: 45:operating system 2034: 2033: 2029: 2028: 2027: 2025: 2024: 2023: 1969: 1968: 1967: 1966: 1909: 1907: 1902: 1886: 1823: 1761: 1643: 1615: 1577: 1571: 1541: 1536: 1532:OpenBSD Journal 1520: 1504: 1483: 1353: 1342:version history 1325: 1318: 1288: 1279: 1219: 1118: 1053: 997: 922: 838: 810: 780: 771:Version History 737: 730: 700: 695: 631: 560: 519: 485: 469: 462: 420: 416:Wayback Machine 396: 395: 383: 382: 379: 374: 373: 359: 348: 337: 308: 307: 303: 289: 278: 267: 234: 233: 229: 220: 218: 203: 202: 195: 180: 165: 154: 153: 140: 135: 17: 12: 11: 5: 2032: 2030: 2022: 2021: 2016: 2011: 2006: 2001: 1996: 1991: 1986: 1981: 1971: 1970: 1965: 1964: 1957: 1950: 1942: 1939: 1938: 1921: 1904: 1903: 1901: 1900: 1898:Matthew Dillon 1894: 1892: 1888: 1887: 1885: 1884: 1879: 1874: 1873: 1872: 1862: 1857: 1852: 1847: 1842: 1837: 1831: 1829: 1825: 1824: 1822: 1821: 1816: 1811: 1806: 1801: 1796: 1791: 1786: 1781: 1779:802.11 drivers 1775: 1773: 1763: 1762: 1760: 1759: 1754: 1749: 1748: 1747: 1737: 1732: 1727: 1722: 1717: 1712: 1707: 1702: 1701: 1700: 1690: 1685: 1680: 1675: 1670: 1669: 1668: 1657: 1655: 1645: 1644: 1642: 1641: 1636: 1631: 1625: 1623: 1617: 1616: 1614: 1613: 1612: 1611: 1606: 1605: 1604: 1587: 1585: 1579: 1578: 1572: 1570: 1569: 1562: 1555: 1547: 1538: 1537: 1535: 1534: 1528: 1526: 1522: 1521: 1519: 1518: 1512: 1510: 1506: 1505: 1503: 1502: 1497: 1491: 1489: 1485: 1484: 1482: 1481: 1480: 1479: 1469: 1464: 1459: 1454: 1449: 1444: 1443: 1442: 1432: 1427: 1422: 1417: 1412: 1407: 1402: 1397: 1392: 1387: 1382: 1377: 1372: 1367: 1361: 1359: 1355: 1354: 1352: 1351: 1350: 1349: 1344: 1333: 1331: 1327: 1326: 1319: 1317: 1316: 1309: 1302: 1294: 1285: 1284: 1281: 1280: 1278: 1277: 1272: 1267: 1262: 1257: 1252: 1235: 1229: 1227: 1221: 1220: 1218: 1217: 1212: 1210:Gentoo/FreeBSD 1207: 1202: 1197: 1196: 1195: 1190: 1180: 1175: 1170: 1165: 1160: 1155: 1150: 1149: 1148: 1137: 1135: 1126: 1120: 1119: 1117: 1116: 1111: 1106: 1101: 1096: 1091: 1086: 1081: 1076: 1074:Jordan Hubbard 1071: 1069:Matthew Dillon 1065: 1063: 1059: 1058: 1055: 1054: 1052: 1051: 1046: 1041: 1036: 1031: 1026: 1021: 1016: 1011: 1005: 1003: 999: 998: 996: 995: 990: 989: 988: 983: 973: 968: 963: 958: 953: 948: 943: 938: 936:802.11 drivers 932: 930: 924: 923: 921: 920: 915: 910: 905: 904: 903: 893: 892: 891: 881: 880: 879: 874: 869: 864: 859: 848: 846: 840: 839: 837: 836: 831: 826: 820: 818: 816:Virtualisation 812: 811: 809: 808: 803: 797: 795: 786: 782: 781: 779: 778: 773: 768: 763: 758: 753: 747: 745: 739: 738: 731: 729: 728: 721: 714: 706: 697: 696: 694: 693: 692: 691: 681: 676: 671: 666: 661: 656: 651: 649:802.11 drivers 645: 643: 633: 632: 630: 629: 624: 623: 622: 612: 607: 602: 597: 596: 595: 585: 580: 574: 572: 562: 561: 559: 558: 553: 548: 543: 538: 533: 527: 525: 521: 520: 518: 517: 512: 507: 502: 499: 493: 491: 487: 486: 484: 483: 477: 475: 471: 470: 463: 461: 460: 453: 446: 438: 432: 431: 428:/UnifiedBusDma 418: 406: 393: 378: 377:External links 375: 372: 371: 369: 368: 357: 346: 301: 299: 298: 290:"BUS_DMA(9)". 287: 276: 268:"BUS_DMA(9)". 227: 193: 191: 190: 137: 136: 134: 131: 102:model used by 81:VESA Local Bus 57:computer buses 41:device drivers 15: 13: 10: 9: 6: 4: 3: 2: 2031: 2020: 2017: 2015: 2012: 2010: 2007: 2005: 2004:DragonFly BSD 2002: 2000: 1997: 1995: 1992: 1990: 1987: 1985: 1982: 1980: 1977: 1976: 1974: 1963: 1958: 1956: 1951: 1949: 1944: 1943: 1937: 1935: 1931: 1927: 1922: 1919: 1915: 1910: 1899: 1896: 1895: 1893: 1889: 1883: 1880: 1878: 1875: 1871: 1868: 1867: 1866: 1863: 1861: 1858: 1856: 1853: 1851: 1848: 1846: 1843: 1841: 1838: 1836: 1833: 1832: 1830: 1826: 1820: 1817: 1815: 1812: 1810: 1807: 1805: 1802: 1800: 1797: 1795: 1792: 1790: 1787: 1785: 1782: 1780: 1777: 1776: 1774: 1772: 1768: 1764: 1758: 1755: 1753: 1750: 1746: 1743: 1742: 1741: 1738: 1736: 1733: 1731: 1728: 1726: 1723: 1721: 1718: 1716: 1713: 1711: 1708: 1706: 1703: 1699: 1696: 1695: 1694: 1691: 1689: 1686: 1684: 1681: 1679: 1676: 1674: 1671: 1667: 1664: 1663: 1662: 1659: 1658: 1656: 1654: 1650: 1646: 1640: 1637: 1635: 1632: 1630: 1627: 1626: 1624: 1622: 1618: 1610: 1607: 1603: 1599: 1598: 1597: 1594: 1593: 1592: 1591:DragonFly BSD 1589: 1588: 1586: 1584: 1580: 1575: 1574:DragonFly BSD 1568: 1563: 1561: 1556: 1554: 1549: 1548: 1545: 1533: 1530: 1529: 1527: 1523: 1517: 1514: 1513: 1511: 1509:Organizations 1507: 1501: 1498: 1496: 1495:Theo de Raadt 1493: 1492: 1490: 1486: 1478: 1475: 1474: 1473: 1470: 1468: 1465: 1463: 1460: 1458: 1455: 1453: 1450: 1448: 1445: 1441: 1438: 1437: 1436: 1433: 1431: 1428: 1426: 1423: 1421: 1418: 1416: 1413: 1411: 1408: 1406: 1403: 1401: 1398: 1396: 1393: 1391: 1388: 1386: 1383: 1381: 1378: 1376: 1373: 1371: 1368: 1366: 1363: 1362: 1360: 1356: 1348: 1345: 1343: 1340: 1339: 1338: 1335: 1334: 1332: 1328: 1323: 1315: 1310: 1308: 1303: 1301: 1296: 1295: 1292: 1276: 1273: 1271: 1268: 1266: 1263: 1261: 1260:OpenServer 10 1258: 1256: 1253: 1251: 1247: 1243: 1239: 1236: 1234: 1231: 1230: 1228: 1226: 1222: 1216: 1213: 1211: 1208: 1206: 1203: 1201: 1198: 1194: 1191: 1189: 1186: 1185: 1184: 1181: 1179: 1176: 1174: 1171: 1169: 1166: 1164: 1161: 1159: 1158:DragonFly BSD 1156: 1154: 1151: 1147: 1144: 1143: 1142: 1139: 1138: 1136: 1134: 1130: 1127: 1125: 1121: 1115: 1112: 1110: 1109:Robert Watson 1107: 1105: 1102: 1100: 1097: 1095: 1092: 1090: 1087: 1085: 1082: 1080: 1077: 1075: 1072: 1070: 1067: 1066: 1064: 1060: 1050: 1047: 1045: 1042: 1040: 1037: 1035: 1032: 1030: 1027: 1025: 1022: 1020: 1017: 1015: 1012: 1010: 1007: 1006: 1004: 1000: 994: 991: 987: 984: 982: 979: 978: 977: 974: 972: 969: 967: 964: 962: 959: 957: 954: 952: 949: 947: 944: 942: 939: 937: 934: 933: 931: 929: 925: 919: 916: 914: 911: 909: 906: 902: 899: 898: 897: 894: 890: 887: 886: 885: 882: 878: 875: 873: 870: 868: 865: 863: 860: 858: 855: 854: 853: 850: 849: 847: 845: 841: 835: 832: 830: 827: 825: 822: 821: 819: 817: 813: 807: 806:ULE scheduler 804: 802: 799: 798: 796: 794: 790: 787: 783: 777: 774: 772: 769: 767: 766:FreeBSD Ports 764: 762: 759: 757: 754: 752: 749: 748: 746: 744: 740: 735: 727: 722: 720: 715: 713: 708: 707: 704: 690: 687: 686: 685: 682: 680: 677: 675: 672: 670: 667: 665: 662: 660: 657: 655: 652: 650: 647: 646: 644: 642: 638: 634: 628: 625: 621: 618: 617: 616: 613: 611: 608: 606: 603: 601: 598: 594: 591: 590: 589: 586: 584: 581: 579: 576: 575: 573: 571: 567: 563: 557: 554: 552: 549: 547: 544: 542: 539: 537: 534: 532: 529: 528: 526: 522: 516: 513: 511: 508: 506: 503: 500: 498: 495: 494: 492: 488: 482: 479: 478: 476: 472: 467: 459: 454: 452: 447: 445: 440: 439: 436: 429: 419: 417: 413: 410: 407: 405: 399: 394: 392: 386: 381: 380: 376: 365: 364: 358: 354: 353: 347: 343: 342: 336: 335: 332: 331:DragonFly BSD 328: 324: 320: 316: 312: 305: 302: 295: 294: 288: 284: 283: 277: 273: 272: 266: 265: 262: 261:DragonFly BSD 258: 254: 250: 246: 242: 238: 231: 228: 217: 213: 212: 207: 200: 198: 194: 187: 183: 179: 178: 175: 171: 164: 163: 158: 151: 149: 147: 145: 143: 139: 132: 130: 128: 127:DragonFly BSD 124: 120: 116: 112: 107: 105: 101: 96: 94: 90: 86: 82: 78: 74: 70: 66: 62: 58: 54: 50: 46: 42: 38: 34: 30: 26: 22: 1984:BSD software 1934:expanding it 1923: 1908: 1834: 1745:soft updates 1649:File systems 1525:Publications 1500:Niels Provos 1205:GNU/kFreeBSD 1008: 901:Soft updates 566:File systems 535: 398:bus_space(9) 362: 351: 340: 314: 304: 292: 281: 270: 244: 230: 219:. Retrieved 209: 185: 161: 122: 108: 97: 35:is a set of 32: 28: 24: 18: 1225:proprietary 1178:MidnightBSD 1133:open-source 1124:Derivatives 1114:Dru Lavigne 1094:Sam Leffler 1084:Mike Karels 556:Rump kernel 2019:Unix stubs 1973:Categories 1870:hw.sensors 1828:Subsystems 1771:networking 1153:DesktopBSD 1089:Ben Laurie 928:Networking 793:Scheduling 785:Subsystems 641:networking 385:bus_dma(9) 221:2019-07-25 133:References 89:code reuse 1789:Bluetooth 1767:Firewalls 1683:disklabel 1425:OpenSMTPD 1420:OpenOSPFD 946:Bluetooth 884:disklabel 659:Bluetooth 637:Firewalls 588:disklabel 93:platforms 69:DEC Alpha 33:bus_space 21:computing 1814:netgraph 1472:Xenocara 1415:OpenNTPD 1410:OpenIKED 1405:OpenBGPD 1390:LibreSSL 1215:XigmaNAS 1188:OPNsense 1183:m0n0wall 1173:GhostBSD 1168:FreeSBIE 1029:portsnap 966:Netgraph 956:IPFilter 674:IPFilter 531:Veriexec 424:.freebsd 412:Archived 239:(1997). 211:InformIT 159:(1998). 1999:OpenBSD 1994:FreeBSD 1860:OpenPAM 1698:HAMMER2 1653:storage 1639:vkernel 1576:Project 1447:sensors 1430:OpenSSH 1337:OpenBSD 1324:Project 1322:OpenBSD 1250:watchOS 1193:pfSense 1163:FreeNAS 1024:OpenBSM 1019:OpenPAM 844:Storage 743:FreeBSD 736:Project 734:FreeBSD 627:OpenZFS 570:storage 468:Project 404:Manuals 391:Manuals 327:OpenBSD 323:FreeBSD 257:OpenBSD 253:FreeBSD 188:. 1998. 119:FreeBSD 115:OpenBSD 106:ports. 100:forking 29:bus_dma 1989:NetBSD 1891:People 1877:systat 1865:sysctl 1855:moused 1850:kqueue 1840:DPorts 1835:busdma 1725:procfs 1693:HAMMER 1673:autofs 1629:chroot 1488:People 1440:pfsync 1395:mandoc 1248:, and 1200:TrueOS 1146:Darwin 1062:People 1049:systat 1044:moused 1034:kqueue 1014:DTrace 1009:busdma 986:pfsync 824:chroot 689:pfsync 578:bioctl 546:envsys 541:DTrace 536:busdma 501:netpgp 497:pkgsrc 481:NetBSD 466:NetBSD 319:NetBSD 249:NetBSD 186:Usenix 174:USENIX 123:busdma 111:NetBSD 49:ported 25:busdma 1924:This 1882:SMBus 1845:ioctl 1752:Vinum 1735:tmpfs 1730:PUFFS 1688:fdisk 1678:devfs 1600:LWKT 1457:spamd 1452:sndio 1380:httpd 1238:macOS 1233:Junos 1002:Other 889:fdisk 877:vinum 857:raid5 834:bhyve 620:WAPBL 610:tmpfs 605:PUFFS 593:fdisk 510:tnftp 166:(PDF) 104:Linux 65:IA-32 59:like 1930:stub 1926:Unix 1809:NDIS 1804:ipfw 1799:CARP 1784:ALTQ 1720:NVMe 1715:NTFS 1705:LVM2 1661:AHCI 1634:jail 1467:tmux 1462:sudo 1375:doas 1370:CARP 1320:The 1246:tvOS 993:SCTP 981:CARP 971:NDIS 961:ipfw 941:ALTQ 872:LVM2 867:geli 862:GBDE 852:GEOM 829:jail 801:ALTQ 732:The 664:CARP 654:ALTQ 639:and 600:LVM2 583:CHFS 568:and 515:tcsh 464:The 426:.org 422:wiki 83:and 77:EISA 31:and 1794:BPF 1757:VFS 1740:UFS 1710:NFS 1666:NCQ 1477:cwm 1385:fdm 1365:bio 1242:iOS 1141:XNU 1039:KLD 951:BPF 913:ZFS 908:VFS 896:UFS 679:NPF 669:BPF 615:UFS 551:LKM 505:pcc 85:PCI 73:ISA 61:PCI 19:In 1975:: 1819:PF 1769:, 1651:, 1435:PF 1400:mg 1244:, 1240:, 976:pf 684:PF 329:, 325:, 321:, 317:. 313:. 259:, 255:, 251:, 247:. 243:. 214:. 208:. 196:^ 184:. 172:. 168:. 141:^ 117:, 95:. 79:, 75:, 27:, 23:, 1961:e 1954:t 1947:v 1936:. 1566:e 1559:t 1552:v 1313:e 1306:t 1299:v 725:e 718:t 711:v 457:e 450:t 443:v 366:. 355:. 344:. 333:. 296:. 285:. 274:. 263:. 224:. 176:.

Index

computing
application programming interfaces
device drivers
operating system
ported
direct memory access
computer buses
PCI
IA-32
DEC Alpha
ISA
EISA
VESA Local Bus
PCI
code reuse
platforms
forking
Linux
NetBSD
OpenBSD
FreeBSD
DragonFly BSD





NASA Ames Research Center
A Machine-Independent DMA Framework for NetBSD
Proceedings of the FREENIX Track: 1998 USENIX Annual Technical Conference

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.